您的当前位置:首页正文

python画图matplotlib.pyplot

来源:华佗健康网
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()

因篇幅问题不能全部显示,请点此查看更多更全内容