总结了annotate、颜色、直方图、三维图、条形图和饼图的用法。
Annotation(注释)
基本注释
下面代码完成基本注释的功能


其它的上一节已经说过,这里详细说说
arrowprops
的参数:
-
facecolor
用来描述箭头的颜色 -
shrink
表示箭头的头距离标注点和箭头尾距离文本点的百分比,当距离大于0.5时,由于两端不可能都距离0.5,所以直接从标注点开始算,如当shrink=0.6
时:

也可以使用下面的方式使用annotate:


-
xycoords='data'
表示数据坐标系,也就是说(3, 1)
是针对图像上的点而言 -
textcoords='axes fraction'
表示子图坐标系,也就是说点(0.8, 0.95)
是针对整个子图而言,而且使用的是百分比的形式,例如改为xytext=(0.5, 0.5)
:

-
horizontalalignment
是控制文本的x
位置参数,取值有left
、center
和right
-
verticalalignment
是控制文本的y
位置参数,取值有top
、center
和bottom
textcoords='polar'表示极坐标系
horizontalalignment可以简写为 ha
verticalalignment可以简写为 va
使用文本框进行注释
text()
函数提供了bbox
关键字,当bbox
被标明时,就可以给文本加框

还可以使用另一种方式:
bb = t.get_bbox_patch()
bb.set_boxstyle("rarrow", pad=0.6)
get_bbox_patch()
返回一个
FancyBboxPatch
实例,可以通过该实例的
set_boxstyle()
方法修改文本框的样式
常见的文本框样式:

使用箭头
annotate()
方法通常可以用来绘画连接两个点的箭头
给annotate()
方法的第一个参数传入空字符串,就可以绘制一个箭头


其中
arrowstyle
控制箭头的形状,还可以设置其它的值和样式




connectionstyle
控制连接线的样式,还可以设置其它的样式:
angle3表示圆弧形
angle表示使用直角连接
注:有些arrowstyle只对部分connectionstyle起作用。
如果使用注释时设置了第一个字符串参数,默认会添加文本,也可以使用bbox添加文本框
使用legend


颜色
常用的表达方式
在大多数情况下,描述颜色可以使用以下几种方式:
- 介于0~1之间的小数表示的RGB,例如
(0.1, 0.2, 0.5)
- 使用字符串表示的RGB,例如
#0F0F0F
-
{'b', 'g', 'r', 'c', 'm', 'y', 'k', 'w'}
中的其中一个 -
{'C0', 'C1', 'C2', 'C3', 'C4', 'C5', 'C6', 'C7', 'C8', 'C9'}
中的一个
“CN”颜色选择器
颜色可以被规定成一个满足正则表达式C[0-9]
的字符串th = np.linspace(0, 2*np.pi, 128)
ax.plot(th, np.cos(th), 'C1', label='C1')
ax.plot(th, np.sin(th), 'C2', label='C2')
ax.legend()

直方图
使用hist()
方法计算并绘制x
的直方图,返回值是一个包含(n, bins, patches)
的tuple
。
- 返回的tuple中有三个参数:
n
:表示直方图中各个条的数值(各条的高度)bins
:值为直方图总条数加1,表示图中条的边patchs
:是一个list,每个元素是一个条的对象 -
hist()
函数有很多参数可供选择,这里总结几个常用的:x
:要绘画直方图的对象,一般情况下是一个array
bins
:默认为None
,指定直方图的总条数normed
:默认为False
,当其值为True
时,直方图的值进行了归一化,返回的n
也是归一化后的值histtype
:默认为bar
,控制直方图的形状,还可以指定为step
rwidth
:默认为None
,控制每条的宽度color
:默认为None
,控制颜色,不可以使用CN颜色选择器
其中除了x外,其他都是可选参数
下面是一个简单的例子:

结果如下:


三维图
开始
首先要导入相应的类库:from mpl_toolkits.mplot3d import Axes3D
,这个类库应该在matplotlib中。
创建三维图像需要使用关键字projection='3d'
。首先创建一个Figure对象,再添加axes即可:

三维曲线
使用Axes3D.plot(x, y, z)绘制三维曲线(Axes3D表示三维子图的对象),其中z
可以是与x, y
等长的集合或者一个数,当变为一个数时就相当于在平面上作图。

结果如下:

三维点图
使用Axes3D.scatter()绘制三维散点图

其中
c='r'
表示颜色为红色,
maker='^'
表示用三角表示点,结果如下:

三维曲面
使用Axes3D.plot_surface()绘制三维曲面图

其中要注意
X
和
Y
必须使用
meshgrid()
函数处理,
meshgrid()
函数将向量
x
和
y
定义的区域转换成矩阵
X
和
Y
,这两个矩阵可以用来表示
mesh
和
surf
的三维空间点以及两个变量的赋值。其中矩阵
X
的行向量是向量
x
的简单复制,而矩阵
Y
的列向量是向量
y
的简单复制。结果如下:

条形图
使用matplotlib.pyplot.bar()
绘制一个条形图,返回值是一个list
,其中每个元素是一个条形图中单个条的对象。
-
bar()
函数有好几个参数,常用的参数有:left
:可以理解为条的左侧的x坐标,是一个标量序列height
:每个条的高度,就是你要绘制的数据width
:每个条的宽度,默认为0.8bottom
:条形图的底的起始数值,也就是y轴的起始值,可以分开指定每个条的底,默认为0color
:设置条形图的颜色
其中除了left和height外都是可选参数
下面是一个简单的例子:

其中:
- 给p2的每个条设置的bottom为p1,所以就呈现出连接的情形。
- xticks()设置了x轴的说明,传入了两个参数,第一个参数表示需要标注的位置,第二个参数表示标注的内容。
- yticks()设置了y轴的取值和间隔,范围为从0~81,间隔为10.
- legend()设置了图注,其中p1和p2中的索引为0~ind之间的任意数。
结果如下:

另:如果将p2改为
p2 = plt.bar(ind + width, y, width=width, color='r')
将xticks改为
plt.xticks(ind + width/2, ('G1', 'G2', 'G3', 'G4', 'G5', 'G6', 'G7'))
则结果变为:

饼图
使用matplotlib.pyplot.pie()函数可以绘制一个饼图,返回值为patches、texts和autotext,都是list。
-
pie()
的参数:x
:需要绘制成饼图的数据。explode
:由一个array
组成,表示饼图各个分块的间隔,默认为None
。labels
:是一个list
,提供饼图每个分块的名称的一个字符串,默认为None
。colors
:可以是一个array
,表示每个分块的颜色。autopct
:指定每个分块的数据标签的格式,可以是format string
或着函数。shadow
:饼图是否添加阴影,默认为False
。startangle
:指定饼图开始的角度,如果未指定将从x轴开始逆时针旋转,默认为False
。
其中x为必选参数,其余为可选参数
以上所有属性的指定顺序均为逆时针
- 返回值:
patches:由饼图的所有分块的实例组成的list。
texts:由饼图的所有分块的文本标签实例组成的list。
autotexts:当autopct不为None时,返回一个由饼图所有分块的数据标签实例组成的list。
下面是一个简单的例子:

结果如下:

附:
所有内容均来自官方文档
可能有一些错误,希望大家指正哈!谢谢!