python画图matplotlib.pyplot
matplotlib
matplotlib库是常⽤的可视化⼯具,可制作的各种图表import matplotlib.pyplot as plt2D绘图简单的折线图
squares = [1, 4, 9, 16, 25]plt.plot(squares) plt.show()
创建了⼀个列表squares,在其中存储了前述平⽅数,再将这个列表传递给函数plot(),默认横坐标为[0,1,2,3,4],这个函数尝试根据这些数字绘制出有意义的图形。plt.show()打matplotlib查看器,并显⽰绘制的图形;换成下列代码运⾏结果同上图⼀致:
input_values = [0, 1, 2, 3, 4]plt.plot(input_values,squares)
2.设置图表标题,给坐标轴加上标签,设置刻度标记的⼤⼩,隐藏坐标轴
squares = [1, 4, 9, 16, 25]plt.plot(squares,colo r='r',linewidt h=5) # 设置图表标题,并给坐标轴加上标签 plt.tit le(\"SquareNumbe rs\
fonts i ze=24) plt.xla bel(\"Va lu e\设置刻度标记的⼤⼩plt.tick_para m s(axis='both', la b el size=14)plt.show()
1.参数linewidth 决定了plot()绘制的线条的粗细;
2.函数title()给图表指定标题;
3.参数fontsize指定了图表中⽂字的⼤⼩;
4.函数xlabel()和ylabel()让你能够为每条轴设置标题;
5.函数tick_params()设置刻度的样式,其中指定的实参将影响x轴和y轴上的刻度(axes='both'),并将刻度标记的字号设置为14(labelsize=14);6. # 隐藏坐标轴plt.axes().get_xaxis().set_visible(Fals e)plt.axes().get_yaxis().set_visibl e(Fal se)3. figure函数,grid函数
plt.figure(figsize=(10,5))y=np.arange(0,10) plt.plot(y.cumsum()) plt.grid() plt.sh ow()
1.函数figure(dpi, figsize)⽤于指定图表的宽度、⾼度、分辨率和背景⾊;
2.需要给形参figsize指定⼀个元组,向matplotlib指出绘图窗⼝的尺⼨,单位为英⼨;
3.Python假定屏幕分辨率为80像素/英⼨,如果上述代码指定的图表尺⼨不合适,可根据需要调整其中的数字;4.如果知道⾃⼰的系统的分辨率,可使⽤形参dpi向figure()传递该分辨率,以有效地利⽤可⽤的屏幕空间,如:plt.figure(dpi=128, figsize=(10, 6));5.ndarray对象的cumsum⽅法为累加和;6.grid(True)⽤来绘制⽹格;4.使⽤scatter()绘制散点图
plt.scatter(1, 4, s=200, c='g', marker='o')plt.show()
1.绘制⼀个坐标为(2,4)的点,颜⾊:green,⼤⼩:200;2.marker=’o’代表圆形标记,’v’代表下三⾓形标记;5. 修改数据点的颜⾊
x_values = [1, 2, 3, 4, 5]y_values = [1,4,9, 16, 25]
plt.scatter(x_values, y_values,s=100,c='r') plt.show()
1.绘制的点的坐标分别为 (1, 1)、(2, 4)、(3, 9)、(4, 16)和(5, 25);
2.要修改数据点的颜⾊,可向scatter()传递参数c,如c='red',或者将其设置为⼀个元组,其中包含三个0~1之间的⼩数值,它们分别表⽰红⾊、绿⾊和蓝⾊分量;
6. 设置每个坐标轴的取值范围,删除数据点的轮廓x_values = range(1, 11)y_values = [x**2 for x in x_values]plt.scatter(x_values, y_values,s=40)
# 设置每个坐标轴的取值范围plt.axis([0, 11,0, 110])plt.show()
1.⼿⼯计算列表要包含的值可能效率低下,需要绘制的点很多时尤其如此。可以不必⼿⼯计算包含点坐标的列表,⽽让Python循环来替我们完成这种计算;
2.函数axis()要求提供四个值:x和y坐标轴的最⼩值和最⼤值;3.plt.axis([0, 11, 0, 110])与plt.xlim(0,11),plt.ylim(0,110)等价;
4.要删除数据点的轮廓,可在调⽤scatter()时传递实参edgecolor='none';7. 颜⾊映射
x_values = range(1, 20)y_values = [x**2 for x in x_values]
plt.scatter(x_values, y_values, c=y_values, cm ap=plt.cm.Blues, edgecol o r='non e',s=40) plt.axi s([0, 21, 0, 410]) plt.show()1.颜⾊映射(colormap)是⼀系列颜⾊,它们从起始颜⾊渐变到结束颜⾊。在可视化中,颜⾊映射⽤于突出数据的规律,例如,你可能⽤较浅的颜⾊来显⽰较⼩的值,并使⽤较深的颜⾊来显⽰较⼤的值;
2.将参数c设置成了⼀个y值列表,并使⽤参数cmap告诉pyplot使⽤哪个颜⾊映射,这些代码将y值较⼩的点显⽰为浅蓝⾊,并将y值较⼤的点显⽰为深蓝⾊;
8. 将图表保存到⽂件
plt.savefig('squares_plot.png', bbox_inches='tight')
1.要让程序⾃动将图表保存到⽂件中,可将对plt.show()的调⽤替换为对plt.savefig()的调⽤;2.第⼀个实参指定要以什么样的⽂件名保存图表,这个⽂件将存储到scatter_squares.py所在的⽬录中;
3.第⼆个实参指定将图表多余的空⽩区域裁剪掉。如果要保留图表周围多余的空⽩区域,可省略这个实参;9.绘制2条线
y=np.transpose(np.array([[1,4,3,2,5],[22,32,26,33,24]]))#绘制两条线 plt.plot(y,l w=1.5) #绘制点线 plt.plo t(y,'ro') plt.show()
y是⼀个5×2的ndarray,plot⾃动把包含的数据解释为单独的数据集;10.添加图例(legend)
y=np.transpose(np.array([[1,4,3,2,5],[22,32,26,33,24]]))#绘制两条线 plt.plot(y[:,0],l w=1.5,lab e l='1s t')plt.plot(y[:,1],lw=1.5,la b el='2n d') #绘制点线 plt.pl ot(y,'ro')plt.l ege n d(loc=0) plt.show()
绘制两条线分别⽤两条语句,这样可以添加单独的标签;
图例legend接受参数loc=0(⾃动选择最佳位置),loc=1(右上)等;11.两条线使⽤相同的横坐标,不同的纵坐标
y=np.transpose(np.array([[1,4,3,2,5],[22,32,26,33,24]]))fig,ax1=p lt.subplots() plt.plot(y[:,0],'b',l w=1.5,lab e l='1s t')plt.plot(y[:,0],'ro') plt.leg end(l oc=0) ax2=ax1.twinx()
plt.pl o t(y[:,1]*100,'g',lw=1.5,labe l='2nd')plt.p l ot(y[:,1]*100,'r o') pl t.l e g end(loc=4)plt.show()
1.使⽤subplots()函数可以直接访问底层的绘图对象(图,⼦图等),⽤它可以⽣⽣和第⼀个⼦图共享x轴的第⼆个⼦图,图中相当于两个相互重叠的⼦图;2. ax2=ax1.twinx()指两幅图共享x轴;
12. 两条线使⽤相同的纵坐标,不同的横坐标
x1=[1,3,5,7,9]x2=[118,223,378,597,828] y=[22,32,26,33,24]
fig,ax1=plt.subplots() plt.plot(x1,y,'b',lw=1.5,l a bel='1st') plt.plot(x1,y,'ro') plt.l ege n d(loc=0)ax2=ax1.twiny()plt.p lot(x2,y,'g',lw=1.5,la bel='2nd')plt.plot(x2,y,'ro')plt.l egend(loc=4) plt.show()
13.使⽤⼦图
x=[1,2,3,4,5]y=[22,32,26,33,24] plt.subplo t(121)plt.plot(x,y,'b',lw=1.5,la b el='1st') plt.plot(x,y,'ro')plt.le gen d(loc=0)
plt.s ubp lot(122)plt.bar(x,y,c o lor='g',w i dth=0.5,lab el='2nd')pl t.l e g end(loc=0)plt.show()
1.plt.subplot(122)⾥的参数代表1⾏2列中的第⼆个,第三个参数从1开始;2.两幅图可以是不同类型,plt.bar()绘制条形图;14.添加颜⾊图例的彩条
data=np.random.randint(1,50,size=[2,50])c=np.random.randint(1,200 ,siz e=[50]) plt.scatter(dat a[0,:], dat a[1,:],c=c,s=100)plt.colorbar() plt.show()
1.scatter绘图函数可以加⼊第三维,通过不同的颜⾊进⾏可视化;
2.plt.colorbar()使⽤彩条加以描述;
15.绘制直⽅图histogram
y=np.transpose(np.array([[10,14,13,12,15,18,22,32,26,33,24,18],[3 5,24,23,22,15,18,22,12,26,13,24,28]]))plt.hist(y,labe l=['1st','2n d'],bin s=5,color=['b','g']) plt.legen d(l o c=0) plt.show()
1.y为12×2的数据集;
2.参数bins为组数,数据y中最⼤值35,最⼩值10,差值为25,组数bins=5,所以组距25/5=5,即5组分别为[10,15),[15,20),[20,25),[25,30),[30,35).第⼀组即y中第⼀列中有4个数范围在[10,15)内,3个数在[15,20)内,,,若需要堆叠两个数据集,改成如下代码:
plt.hist(y,labe l=['1st','2nd'],bin s=5,colo r=['b','g'],stacke d=Tru e) plt.gri d(Tr ue)
16.绘制箱型图
y=np.arange(1,13,1)plt.boxplot(y) plt.grid() plt.sho w()
12个数分为四等份分别是第1个数,第3.75个数,第6.5个数,第9.25个数,第12个数;17.绘制积分图
import matplotlib.pyplot as plt import numpy as n p fro mmatplotlib.patche s impor t Polyg on def func(x):re tur n
0.5*np.ex p(x)+1# 绘制曲线 x=np.li n s p a ce(0,2)# ⽣成以0为⾸项,2为末项,项数为50,的等差数列 y=func(x)
fig,ax=plt.subplot s(f i g size=(7,5)) plt.pl o t(x,y,'b',lw=2)
pl t.y lim(y min=0)#⽣成阴影 a,b=0.5,1.5Ix=np.linsp ace(a,b) # 50项
Iy=fun c(Ix) ve r ts=[(a,0)]+list(z ip(Ix,Iy))+[(b,0)] # 52项 poly = Polygo n(vert s,facecolo
r='0.7',edgecolor='0.5')ax.add_patch(poly) #添加公式,⽂本,刻度标签p lt.text(0.5*(a+b),1,r\"$\\int_a^b
f(x)\\mathrm{d}x$\ax.set_xticks((a,b))a x.set_xticklabels(('$a$','$b$'))ax.set_yticks((func(a),fun c(b)))
a x.set_yti cklabels(('$f(a)$','$f(b)$')) plt.grid() plt.show()
3D绘图
from mpl_toolkits.mplot3d import Axes3D import numpy as n p impor t matplotlib.pyplo t a s p lt1.3D直线(曲线)的绘制
mpl.rcParams['legend.fontsize'] =10 fig = plt.figure() ax = fig.gca(projec t ion='3d') theta = np.linsp ac e(-4 * np.p i, 4 * np.pi,100) z = np.lins p ac e(-2, 2, 100) r = z ** 2 + 1x = r * np.sin(theta)y = r * np.cos(theta) ax.plot(x, y, z, label='paramet riccurve')ax.legend() plt.show()3D表⾯形状的绘制
//eg1
fig = plt.figure()ax = fig.add_subplot(111, projectio n='3d') # Make d atau = np.linsp a ce(0, 2 * np.pi, 100)v = np.lins p ace(0,np.pi, 100) x = 10 * np.outer(np.cos(u), np.sin(v))y = 10 *np.outer(np.sin(u), np.sin(v))z = 10 *
np.outer(np.ones(np.size(u)), np.cos(v)) # Plot t he surfaceax.plot_surfac e(x, y, z, color='b') plt.show()//eg2
fig = plt.figure()ax = Axes3D(fig)X = np.arange(0, 1, 0.01)Y = np.arange(0, 1, 0.01)X, Y = np.meshgrid(X, Y)Z =2*X*Y/(X+Y)
ax.plot_surface(X, Y, Z, rstride=1, cstride=1)plt.draw()
因篇幅问题不能全部显示,请点此查看更多更全内容