总结了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.8
bottom
:条形图的底的起始数值,也就是y轴的起始值,可以分开指定每个条的底,默认为0
color
:设置条形图的颜色
其中除了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。
下面是一个简单的例子:
结果如下:
附:
所有内容均来自官方文档
可能有一些错误,希望大家指正哈!谢谢!