图形化显示
Matplotlib的官方文档首页略显庞杂,熟悉之后会发现包罗万象,这里是最好的Matplotlib学习场所,所以针对文档的内容做一个简单的导读,最后列出自己总结的作图基本语法,仅供参考。
文档导读
Examples & Gallery
Examples:提供了大量的实际代码案例,几乎囊括了Matplotlib的所有功能。建议找一些初步探索,了解Matplotlib的强大。但是这里不适合初学者学习,建议有了基础训练再来找自己需要的案例。Gallery页面提供了更方便的索引方式,可以直观的看到Examples的所有图像。
- animation Examples:生成了动画效果,目前笔者用的很少。
- api Examples
- colorbar_only:画出颜色条
- date_demo:数据图
- font_family_rc:字体调整方法
- font_file:设置字体文件
- histogram_path_demo:直方图
- donut_demo:画个甜甜圈
- watermark_text:设置文字水印
- watermark_image:设置图片水印
- span_regions:图片不同区域设置不同色块
- radar_chart:雷达图
- mathtext_asarray:写数学公式
- axes_grid Examples
- color Examples:颜色模块
- event_handling Examples:事件处理,暂时用不到
- images_contours_and_fields:对图像进行简单处理。
- lines_bars_and_markers Examples:对线型和Marker的类型做了解释。
- misc Examples
- mplot3d Examples:三维作图
- pie_and_polar_charts:饼图和极坐标图
- pylab_examples Examples:我的主要作图相关案例
- usetex_demo:图例和注释
- showcase Examples:展示案例
- bachelors_degrees_by_gender:商业图表的效果
- specialty_plots Examples:一些特殊画图的案例
- Statistics Examples:统计图表案例
- style_sheets Examples:不同风格案例展示
- subplots_axes_and_figures Examples:画布和坐标系的案例
- tests Examples
- text_labels_and_annotations Examples:文字标签的处理
- ticks_and_spines Examples:对坐标轴进行变换
- units Examples
- user_interfaces Examples
- widgets Examples:插件案例
Pyplot
Plotting commands summary提供了Pyplot模块作图的命令查询和常见的参数展示。
Docs
这里是整个文档的真正目录索引,如果觉得找起来麻烦,直接点击pdf,下载pdf版本。如果药了解基础知识建议从Usage开始。
Modules & Index
Modules提供了Matplotlib的所有子模块列表,方便查询 Index是整个文档的所有内容索引。
简单例子
首先让自己画出一个最基本的线图,有了直观的新鲜感觉,后面的事情会简单许多。
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
x = np.arange(10)
plt.plot(x)
关键定义:Figures、Axes、axis、plot
Matplotlib作图时,各个组件(暂且这么叫)也是有结构关系的,最顶层时稳定的机器环境,简单说是matplotlib.pyplot这个组块,在这一个组块上,利用其他的函数来不断的添加画图时的各个元素。而这个组块的概念和Matlab很类似。
下一层是第一个面向对象的接口层,在这里,pyplot利用较少的特定函数完成类似于新建画布、图像等工作。之后的所有工作主要在这一层实例化的类上进行操作。
在上图中标注了重要的类,下面重点介绍:
- Figure:即上面红框部分,简单理解是一个画布。一个画布里可以有零个或者多个坐标轴。
- Axes:即上面蓝色框内的部分,可以理解为坐标系,是我们真正作图的地方,一个画布里可以有多个坐标系,而一个坐标系只能属于一个画布。
- Axis:坐标轴,如果是二维坐标系有两个坐标轴,三维的会有三个坐标轴。
基本函数
生成画布
罗列生成figure、axes的常用函数和用法。
- plt.figure:直接生成一个画布,建议和add_axes一起使用,注意,add_axes的参数必填,否则后续作图会报错。
y = np.random.rand(10)
x = np.arange(10)
left, bottom, width, height = 0.1, 0.1, 0.8, 0.8
fig1 = plt.figure()
ax1 = fig1.add_axes((left, bottom, width, height), axisbg="#e1e1e1")
ax1.plot(x,y)
- plt.axes:单独使用既可生成一个坐标系(默认自动生成了画布)。
ax2 = plt.axes()
ax2.plot(x,y)
- plt.subplot:区别于下面的
plt.subplots
,这里只会生成一个画布和坐标系,返回的是生成的坐标系。
ccc = plt.subplot(111)
ccc.plot(x,y)
- plt.subplots:该函数会返回一个画布和一个或多个坐标系,在画图中非常常用。
fig, ax = plt.subplots()
ax.plot(x, y1);
- plt.plot:该函数直接使用,默认生成了画布和坐标系。
x = np.arange(5)
y = np.arange(5.0)/2
plt.plot(x,y)
同一个画布中增加多个坐标系
- 利用subplots直接添加
fig, axes = plt.subplots(ncols=2, nrows=3)
fig, axes = plt.subplots(1, 2)
- 注意:坐标系以多维数组的形式存储在了axes中,调用时要按照数组的方式进行选择。可以考虑for循环的方式增加图形细节,减少重复劳动。
ncols, nrows = 3, 3
fig, axes = plt.subplots(nrows, ncols)
for m in range(nrows):
for n in range(ncols):
axes[m, n].set_xticks([])
axes[m, n].set_yticks([])
axes[m, n].text(0.5, 0.5, "axes[%d, %d]" % (m, n),horizontalalignment='center')
- 更自定义的方法是在建立了画布之后,对应的画布利用
add_axes
函数设置,并且可以自定义各个图形的位置和大小。
同一个坐标系中画多幅图
- 生成了坐标系,可以调用坐标系的plot方法添加需要的图形,可以添加多个。
ax = plt.subplot(111)
ax.bar(x,y)
ax.plot(np.arange(10))
ax.plot(np.sin(np.linspace(1,5,num=10)))
为图片增加细节
到目前为止画出的图形都还比较“简陋”,下面为图形增加更多的细节内容。
- 为图片整容:不喜欢默认的图片风格,可以进行一次全面的替换。图片风格在Matplotlib中属于Style子模块,利用下面的代码可以实现风格的变化,能够变化的代码风格利用
mpl.style.available
可以查看。
import matplotlib as mpl
mpl.style.library
mpl.style.available
mpl.style.use('bmh')
# 可以替换的风格
#u'seaborn-darkgrid',
#u'seaborn-notebook',
#u'classic',
#u'seaborn-ticks',
#u'grayscale',
#u'bmh',
#u'seaborn-talk',
#u'dark_background',
#u'ggplot',
#u'fivethirtyeight',
#u'seaborn-colorblind',
#u'seaborn-deep',
#u'seaborn-whitegrid',
#u'seaborn-bright',
#u'seaborn-poster',
#u'seaborn-muted',
#u'seaborn-paper',
#u'seaborn-white',
#u'seaborn-pastel',
#u'seaborn-dark',
#u'seaborn-dark-palette'
图表中可以有丰富的细节,主要有这些内容:图表名称、图例、X轴刻度和标识、Y轴刻度和标识、箭头、文字说明、辅助线(横线、竖线)、图片大小、位置、中文显示(特殊)、线的细节。由于内容庞杂,这里近列出相关的函数和使用案例,必要时进行说明,更具体的说明请参考官方文档或者Jupyter Notebook中的help内容。
- 图表标题
axes.set_title("legend(loc=%d)" % (n+1))
- 图片大小、位置:回到最开始介绍的“生成画布”部分,通过增加如下的属性设置画布的大小。需要注意,下方
add_axes
中的四个指标: left, bottom, width,height 都是针对画布来设置的,单位可以理解为“一个画布大小”。借用这个方法可以顺带着完成同一个画布设置多个坐标系的工作。
fig = plt.figure(figesize = (4,2))
ax1 = fig.add_axes((0,0,1,1))
ax2 = fig.add_axes((1,1,2,2),axisbg="#e1e1e1")
ax3 = fig.add_axes((0.5,0.5,0.5,0.5),axisbg="#e1e1e1")
ax1.plot(x,y);
- x、y轴的刻度显示和刻度范围限制
ax.set_ylim(-15, 40)
ax.set_yticks([-10, 0, 10, 20, 30])
ax.set_xticks([-4, -2, 0, 2])
- x、y轴标识
ax.set_xlabel("$x$", fontsize=18)
ax.set_ylabel("$y$", fontsize=18)
- 图例
ax.legend(loc=0, ncol=3, fontsize=14, frameon=False);
- 线条:粗细、类型、颜色、标签:
ls
-line style、marker
-标记,一般是对需要显示的不同标记点、lw
-line width、color
-颜色、label
-标签,用于在图例中显示对应内容。
ax.plot(x, y1, lw=1.5, color="blue", label=r"$y(x)$")
ax.plot?
#结果如下
The following format string characters are accepted to control
the line style or marker:
================ ===============================
character description
================ ===============================
``'-'`` solid line style
``'--'`` dashed line style
``'-.'`` dash-dot line style
``':'`` dotted line style
``'.'`` point marker
``','`` pixel marker
``'o'`` circle marker
``'v'`` triangle_down marker
``'^'`` triangle_up marker
``'<'`` triangle_left marker
``'>'`` triangle_right marker
``'1'`` tri_down marker
``'2'`` tri_up marker
``'3'`` tri_left marker
``'4'`` tri_right marker
``'s'`` square marker
``'p'`` pentagon marker
``'*'`` star marker
``'h'`` hexagon1 marker
``'H'`` hexagon2 marker
``'+'`` plus marker
``'x'`` x marker
``'D'`` diamond marker
``'d'`` thin_diamond marker
``'|'`` vline marker
``'_'`` hline marker
================ ===============================
The following color abbreviations are supported:
========== ========
character color
========== ========
'b' blue
'g' green
'r' red
'c' cyan
'm' magenta
'y' yellow
'k' black
'w' white
========== ========
对应的各种线型和Marker的标示展示
- 辅助线(横线):有两种画法,一种是利用numpy的函数构造出对应的坐标,一种是给出线段的起始点,第二种方法在下面会具体介绍。方法一的好处是直线可以贯穿整个图形,并且根据x轴的取值范围变化。方法二的好处是画线段方便。
ax.plot(x,np.zero_like(x)+1 , color='black',ls ='--',lw=0.5)
ax.plot([0,9],[0.4,0.4],ls='--',lw = 1,color = 'red')
- 辅助线(竖线与其他直线段):下面代码中第一个
[x1,x2]
里面都是x坐标,第二个[y1,y2]
都是y坐标,画出来的是从(x1,y1)到(x2,y2)的线段。基于这个原理,在图中根据需要画线段变得很简单了。
ax.plot([3,3],[0,5],ls='--',lw = 0.5,color='black')
ax.plot([3,1],[0,5],ls='--',lw = 0.5,color='black')
图表类型
基本的图表类型:
- 线型图
- 条状图(bar)
- 直方图(hist)
- 散点图(scatter)
- 饼图
- 极坐标
- 雷达图
- stem
- errorbar
- step
看完了是否已经蠢蠢欲动,赶紧探索起来吧。
[完](http://blog.junyu.pro)
声明: 本文转载需标明出处,禁止用于商业目的。
ChangeLog
161203 新建 161205 发布