数据可视化(二):Python-matplotlib

导入matplotlib的pyplot模块
import matplotlib.pyplot as plt
一、简单使用plot绘制线条

第1步:定义x和y坐标轴上的点

#x坐标轴上点的数值
x=[1, 2, 3, 4]
#y坐标轴上点的数值
y=[1, 4, 9, 16]

第2步:使用plot绘制线条
第1个参数是x的坐标值,第2个参数是y的坐标值

plt.plot(x,y)

第3步:显示图形

plt.show()
11098258-08441ca1ece209c6.png

如果plot()里面只有一个列表,则默认x=[0,1,2,3,4...],列表为y的值

plt.plot([1,4,5])
11098258-373c60b7e99f8c6b.png
二、多图绘制(Figure和Subplot)

使用plt.figure() 创建画板和plt.subplot() 创建子图
plt.figure(1)代表创建一个画板
subplot(211)生成一个2行1列的子图矩阵,当前是第一个子图
创建子图

fig=plt.figure()
ax1=fig.add_subplot(2,2,1)  #为2*2的图像  ax1为第一个子图
ax2=fig.add_subplot(2,2,2)
ax3=fig.add_subplot(2,2,3)
from numpy.random import randn
plt.plot(randn(50).cumsum(),'k--')  #默认在最后一个子图上绘图  k--为设置线型为黑色虚线 
import numpy as np
ax1.hist(randn(100),bins=20,color='k',alpha=0.3)#直方图bins表示分为20组color为填充颜色 k为黑色,b为蓝色,r为红色,alpha=0.3设置透明度 
ax2.scatter(np.arange(30),np.arange(30)+3*randn(30))  #散点图,默认颜色为深蓝
plt.show

11098258-cad57842097e611f.png

使用索引方式创建子图
fig,axes=plt.subplots(2,2) 创建可以通过axes[x,y]索引的子图
plt.subplots_adjust(wspace=0,hspace=0) 用于调整子图的间距

fig,axes=plt.subplots(2,2,sharex=True,sharey=True)#sharex=False,sharey=False每个子图都会有x,y刻度 True共用刻度  
for i in range(2):  
    for j in range(2):  
        axes[i,j].hist(randn(500),bins=50,color='b',alpha=0.5)  
plt.subplots_adjust(wspace=0,hspace=0)#控制子图之间的间距的wspace左右  hspace为上下  
plt.show() 
11098258-6578b5b4ceac5cab.png
三、设置颜色、标记、线型

具体可参考https://www.cnblogs.com/darkknightzh/p/6117528.html
颜色color:线条颜色,r表示红色(red)
线型linestyle:线条的形状,dashed表示用虚线连接
标记marker:点的形状,o表示点为圆圈标记
标记、线型必须放在颜色之后

plt.plot(randn(30).cumsum(),color='k',linestyle='dashed', marker='o')
11098258-369324024625c6c4.png

另外针对数据之间的非实际数据点label,默认使用线性插值方式

data = np.random.randn(30).cumsum()
plt.plot(data, 'k--')
11098258-4203cd0454a18182.png

可以通过drawstyle修改非实际数据显示形式

plt.plot(data, 'k-',  drawstyle='steps-post', label='steps-post')
11098258-5a10de3371b8052f.png

可以放到一起

plt.plot(data, 'k--')
plt.plot(data, 'k-',  drawstyle='steps-post', label='steps-post')
11098258-37f0cc8a50b29f3a.png
四、刻度、标签、图例、注释

设置刻度.set_xticks([ , ])
刻度的标签.set_xticklabels([,],rotation=30, fontsize='small') rotation标签角度,fontsize标签大小
标题.set_title()
轴的标签.set_xlabel()
添加图例在子图绘制中.plot( , label='one').legend(loc='best')
添加注释.text()
添加注释(带箭头).annotate()

fig = plt.figure(figsize=(10,5)) #使用figsize设置画布大小
ax = fig.add_subplot(1, 1, 1)
ax.plot(randn(1000).cumsum(),'b', label='one')
ax.plot(randn(1000).cumsum(),'k--', label='two')
ax.plot(randn(1000).cumsum(),'g.', label='three')
ax.legend(loc='best')   #添加图例
ticks = ax.set_xticks([0, 250, 500, 750, 1000])  #设置x轴刻度
labels = ax.set_xticklabels(['one', 'two', 'three', 'four', 'five'],
                            rotation=0, fontsize='small')   #设置刻度标签,rotation标签角度
ax.set_title('My first matplotlib plot')   #设置标题
ax.set_xlabel('Stages')#设置轴标签
ax.text(700,50,'fit',family='monospace',fontsize=20)#在图像上添加注释
ax.annotate('label', xy=(400,20),
                xytext=(400,50),
                arrowprops=dict(facecolor='red', headwidth=10, width=2,
                                headlength=4))#添加带箭头的注释(标签名,箭头点的位置,标签的位置,箭头属性)
11098258-ed77a47dac7a8207.png

若图中有中文,为防止中文乱码,先指定默认字体。(其他解决中文乱码的方法参考https://www.zhihu.com/question/25404709/answers/created),
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']

from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei'] 
ax.annotate('中文', xy=(200,20),
                xytext=(200,50),
                arrowprops=dict(facecolor='red', headwidth=10, width=2,
                                headlength=4))
11098258-dcd559dde5c2cced.png
五、图表保存到文件

plt.savefig("case5.png", dpi=400)


11098258-9fdcf3d5a316ce94.png

猜你喜欢

转载自blog.csdn.net/weixin_33881041/article/details/87429989