matplotlib模块数据可视化-多图

时间:2022-03-27 23:42:13

1 源码

import numpy as np
import matplotlib.pyplot as plt
plt.figure()
# 1> 第一个小图 表示总共有两行,该行只有一列,在位置1处画图
plt.subplot(2,1,1)

n = 12
x = np.arange(n)
# np.random.uniform(0.5,1.0,n),生成n个0.5-1.0之间的随机数
y1 = (1 - x/float(n)) * np.random.uniform(0.5,1.0,n)
y2 = (1 - x/float(n)) * np.random.uniform(0.5,1.0,n)
plt.bar(x,+y1,width=0.8,facecolor="#9999ff",edgecolor="white")
plt.bar(x,-y2,facecolor="#ff9999",edgecolor="white")
# 绘制文字,显示柱状图形的值
for x,y1,y2 in zip(x,y1,y2):
plt.text(x+0.4,y1+0.05,'%.2f' % y1,ha='center',va='bottom')
plt.text(x+0.4,-(y2+0.05),'%.2f' % y2,ha='center',va='top')

# for x,y in zip(x,y2):
# plt.text(x+0.4,-(y+0.05),'%.2f' % y,ha='center',va='bottom')
plt.ylim(-1.25,1.25)

# 2> 第二个小图
# 也可以不加逗号,表示总共两行,该行有两列,在位置3处绘图,位置2是第一行的后面,但是第一行画了一个图,序号仍保留
# 等等,发现了什么? 为什么是位置3?绘图位置是从1开始,总序号为列数最多的*总行数,并且编号上按行数*最大列数编号
plt.subplot(223)
z = [10,20,30,40,50]
explode = [0, 0.2, 0, 0, 0]
labels = ('Frogs', 'Hogs', 'Dogs', 'Logs','Cats')
plt.pie(z, explode=explode, labels=labels,startangle=90,autopct='%1.1f%%',
shadow=True, pctdistance=0.8)
plt.axis('equal')

# 3> 第三个小图
plt.subplot(2,2,4)
three = np.linspace(-np.pi,np.pi,256,endpoint=True)
# print three
y_c,y_s=np.cos(three),np.sin(three)
plt.plot(three,y_c,color="blue",linewidth=2.5,linestyle="-")
plt.plot(three,y_s,color="red",linewidth=2.5,linestyle="-")
plt.xlim(three.min() * 1.1,three.max()*1.1)

# 设置坐标轴上的显示刻度,前面的实际刻度位置,后面为要显示的内容,最后一个参数为内容旋转
plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],[r"$-\pi$",r"$-\pi/2$",r"$0$",r"$+\pi/2$",r"$+\pi$"],rotation=17)

plt.ylim(y_c.min()*1.1,y_c.max()*1.1)
plt.yticks([-1,0,1],[r"$-1$",r"$0$",r"$+1$"])

plt.show()

2 效果图

matplotlib模块数据可视化-多图