第4章 学习更多图表和定制化
4.4 向图表添加数据表
当前的图表和子图可以使用plt.gcf()和plt.gca()获得,分别表示"Get Current Figure"和"Get Current Axes"。
列出数据集的总结性的或者突出强调的值。
importmatplotlib.pyplot as pltimportnumpy as np
plt.figure()
ax=plt.gca()
y= np.random.randn(9)
col_labels= ['c1', 'c2', 'c3']
row_labels= ['r1', 'r2', 'r3']
table_vals= [[11, 12, 13], [21, 22, 23], [31, 32, 33]]
row_colors= ['r', 'b', 'g']#创建一个带单元格的表格,并添加到当前坐标轴中
my_table = plt.table(cellText=table_vals,
colWidths=[0.1] * 3,
rowLabels=row_labels,
colLabels=col_labels,
rowColours=row_colors,
loc='upper right')
plt.plot(y)
plt.show()
4.5 使用subplots(子区)
subplot派生自axes,位于subplot实例的规则网格中。
matplotlib.pyplot.subplots用来创建普通布局的子区,可以用来创建子区的行数和列数,并可以使用关键字参数sharex和sharey来创建共享x或共享y的子区(sharex = True)。
matplotlib.pyplot.subplots方法返回一个(fig,ax)元组。其中ax可以是一个坐标轴实例,当多个子区时,ax是一个坐标轴实例的数组。
importmatplotlib.pyplot as plt
plt.figure(0)#向subplot2grid方法传入形状参数、位置参数loc和可选的colspan、rowspan参数#colspan和rowspan参数让子区跨越给定网格中的多个行和列#子图的分割规划,位置基于0,而不是像pyplot.subplot()那样基于1
a1 = plt.subplot2grid((3, 3), (0, 0), colspan=3)
a2= plt.subplot2grid((3, 3), (1, 0), colspan=2)
a3= plt.subplot2grid((3, 3), (1, 2), colspan=1)
a4= plt.subplot2grid((3, 3), (2, 0), colspan=1)
a5= plt.subplot2grid((3, 3), (2, 1), colspan=2)#整理刻度标签的大小
all_axex =plt.gcf().axesfor ax inall_axex:for ticklabel in ax.get_xticklabels() +ax.get_yticklabels():
ticklabel.set_fontsize(9)
plt.suptitle("Demo")
plt.show()
也可以用标签参数方法设置字体大小和标签等:
#让标签显示在内部
a1.tick_params(direction='in')#设置刻度标签的大小
a1.tick_params(labelsize=10)#参数bottom, top, left, right的值为布尔值, 设置绘图区四个边框的刻度线是否显示
a1.tick_params(top=True,right=True)#参数labelbottom, labeltop, labelleft, labelright的值为布尔值,分别代表设置绘图区四个边框线上的刻度线标签是否显示
a1.tick_params(labeltop=True,labelright=True)
4.6 定制化网格
matplotlib.pyplot.grid函数
函数参数which可以是'major','minor'或'both',表示仅通过主刻度或者次刻度,或者同时通过两个刻度来操纵网格。
举例:
ax.grid(color='g', linestyle='--', linewidth=1)
4.7 创建等高线图
矩阵中数值相等的点连成的曲线。
contour()函数绘制等高线,contourf()函数绘制填充的等高线。
importmatplotlib.pyplot as pltimportnumpy as npimportmatplotlib as mpl#生成一些线性信号数据
defprocess_signals(x, y):return (1 - (x ** 2 + y ** 2)) * np.exp(-y ** 3 / 3)#numpy.arange([start, ]stop, [step, ]dtype=None)#和range函数类似,但返回值时一个数组而不是一个列表
x = np.arange(-1.5, 1.5, 0.1)
y= np.arange(-1.5, 1.5, 0.1)#np.meshgrid生成网格点坐标矩阵
X, Y =np.meshgrid(x, y)
Z=process_signals(X, Y)
N= np.arange(-1, 1.5, 0.3) #作为等值线的间隔#绘制等高线,水平数由N决定
CS = plt.contour(Z, N, linewidths=2, cmap=mpl.cm.jet)
plt.clabel(CS, inline=True, fmt='%1.1f', fontsize=10) #等值线标签
plt.colorbar(CS) # 添加颜色映射表plt.show()
4.8 填充图表底层区域
np.ma.masked_greater函数可以屏蔽数组中大于给定值的所有值,用来处理护理缺失或者无效的值。相似的函数:
#masked_array(元数据,条件)利用参数2的条件制作一个掩膜,去除背景值数据#im_data > 100时出现警告UserWarning: Warning: converting a masked element to nan.
im_data = np.ma.masked_array(im_data, im_data > int(100))
from matplotlib.pyplot import *
importnumpy as np
x= np.arange(0, 2, 0.01)#创建两个不同的信号
y1 = np.sin(2 * np.pi *x)
y2= 1.2 * np.sin(4 * np.pi *x)
fig=figure()#ax = gca()#绘图
axes1 = fig.add_subplot(211)
axes1.plot(x, y1, x, y2, color='b')#填充两条轮廓线中间的区域
axes1.fill_between(x, y1, y2, where=y2 > y1, facecolor='g', interpolate=True)
axes1.fill_between(x, y1, y2, where=y2 < y1, facecolor='darkblue', interpolate=True)
axes1.set_xlim(0,2)
axes1.set_title('filled between')
axes2= fig.add_subplot(212)#np.ma.masked_greater用来处理缺失或者无效的值
y2 = np.ma.masked_greater(y2, 1.0) #屏蔽y2中大于1.0的值的所有制
axes2.plot(x, y1, x, y2, color='black')
axes2.fill_between(x, y1, y2, where=y2 > y1, facecolor='g', interpolate=True)
axes2.fill_between(x, y1, y2, where=y2 < y1, facecolor='darkblue', interpolate=True)
show()
masked_greater()处理缺失或无效的值。
from matplotlib.pyplot import *
importnumpy as np
x= np.arange(0, 2, 0.01)#创建两个不同的信号
y1 = np.sin(2 * np.pi *x)
y2= 1.2 * np.sin(4 * np.pi *x)
fig=figure()#ax = gca()#绘图
axes1 = fig.add_subplot(211)
axes1.plot(x, y1, x, y2, color='b')#填充两条轮廓线中间的区域
axes1.fill_between(x, y1, y2, where=y2 > y1, facecolor='g', interpolate=True)
axes1.fill_between(x, y1, y2, where=y2 < y1, facecolor='darkblue', interpolate=True)
axes1.set_xlim(0,2)
axes1.set_title('filled between')
axes2= fig.add_subplot(212)#np.ma.masked_greater用来处理缺失或者无效的值
y2 = np.ma.masked_greater(y2, 1.0) #屏蔽y2中大于1.0的值的所有制
axes2.plot(x, y1, x, y2, color='black')
axes2.fill_between(x, y1, y2, where=y2 > y1, facecolor='g', interpolate=True)
axes2.fill_between(x, y1, y2, where=y2 < y1, facecolor='darkblue', interpolate=True)
yticks([-1, 0, +1]) #设置y轴刻度标签
show()
4.9 绘制极限图
通常用来表示本质上是射线的信息。
(暂时用不到啦)