2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > Python画图(直方图 多张子图 二维图形 三维图形以及图中图)

Python画图(直方图 多张子图 二维图形 三维图形以及图中图)

时间:2024-07-27 07:33:33

相关推荐

Python画图(直方图 多张子图 二维图形 三维图形以及图中图)

Python画图很方便,不管是平时的学习还是教学当中,都将经常用到,特别直观,其中主要用到两个常用的库,一个二维和三维的:matplotlib.pyplotmpl_toolkits.mplot3d

目录

点线图

直方图(Histogram)

子图(多个图形画在同一个图形里)

三维图形,以x²+y²函数图形为例

点线图

import numpy as npimport matplotlib.pyplot as pltx = np.array([[0, 3, 5], [0, 1, 2],[3,4,7]])y = np.array([[0, 6, 0], [1, 7, 0],[2,5,4]])plt.plot(x, y,color='red',marker='.',markersize=20,linestyle='-')plt.grid(True)plt.show()-----------------------------array([[0, 3, 5],[0, 1, 2],[3, 4, 7]])array([[0, 6, 0],[1, 7, 0],[2, 5, 4]])-------------------------------

x,y生成的点的连线,从上面的图形可以看出,点和连线构成的新矩阵的点是:

[0,0],[0,1],[3,2]

[3,6],[1,7],[4,5]

[5,0],[2,0],[7,4]

如果我们使用meshgrid来生成新的矩阵将会是什么样的呢?

import numpy as npimport matplotlib.pyplot as pltx = np.array([[0, 3, 5], [0, 1, 2],[3,4,7]])#np.array([0, 3, 5, 0, 1, 2,3,4,7])效果一样shape(9,)y = np.array([[0, 6, 0], [1, 7, 0],[2,5,4]])#np.array([0, 6, 0, 1, 7, 0,2,5,4])效果一样shape(9,)X,Y=np.meshgrid(x,y)plt.plot(X,Y,color='red',marker='.',markersize=20,linestyle='-')plt.grid(True)plt.show()

X.shape和Y.shape都是(9, 9),简单来讲就是做了笛卡尔积的处理

直方图(Histogram)

import numpy as npimport matplotlib.pylab as pltfrom matplotlib.font_manager import FontPropertiesfont=FontProperties(fname=r"C:\Windows\Fonts\simhei.ttf", size=14)x=[11,12,12,12,13,30,31,30,40,40,44,40,40,40,40]y=np.arange(10,51)plt.hist(x,y)plt.xlabel('年龄',FontProperties=font)plt.ylabel('年龄的数量',FontProperties=font)plt.title('10-50岁的年龄分布',FontProperties=font)plt.show()

子图(subplot)多个图形画在同一个图形里

x=np.linspace(0,5)y1=np.sin(x)y2=np.sin(2*x)plt.plot(x,y1,'b--',label='sinx')plt.plot(x,y2,'r',label='sin2x')plt.legend()plt.show()

这样的两个函数图形挤在一个平面,不是很好观察,很多时候我们需要分布在不同位置,使用子图subplot来实现,如下:

x=np.linspace(0,5)y1=np.sin(x)y2=np.sin(2*x)splt=plt.subplot(3,1,1)plt.plot(x,y1,'b--',label='sinx')plt.subplot(3,1,3)plt.plot(x,y2,'r',label='sin2x')plt.legend()plt.show()

plt.subplot(3,1,1)表示的是3行1列,第一个子图的绘制

plt.subplot(3,1,3)表示的是3行1列,第三个子图的绘制

也可以使用下面这种方法:

figure,splt=plt.subplots(2,2)splt[0][0].plot(x,y1)splt[1][1].plot(x,y2)plt.show()

这样更直观,在第几行几列进行图形的绘制

三维图形,以x²+y²函数图形为例

import matplotlib.pyplot as pltimport numpy as npimport mpl_toolkits.mplot3d as p3dfig=plt.figure()ax=p3d.Axes3D(fig)x=np.arange(-3, 5, 0.1)y=np.arange(-3, 5, 0.1)X,Y=np.meshgrid(x, y)Z=X**2+Y**2ax.plot_surface(X,Y,Z, rstride=1, cstride=1, cmap='rainbow')plt.savefig('D:/tony.png')plt.show()

还有一种图形的画法,类似图片中有一张缩略图,我叫它图中图

import numpy as np import matplotlib.pyplot as plt fig=plt.figure()x=np.linspace(1,10)y=xax1=fig.add_axes([0.1,0.1,0.9,0.9])#(矩形:左、下、宽、高)ax1.plot(x,y,'r')ax1.set_title('y=x')#绘制第二张图形,嵌套在里面y1=np.cos(x)ax2=fig.add_axes([0.2,0.6,0.3,0.3])ax2.plot(x,y1,'g')ax2.set_title('y=cosx')plt.show()

图形里面默认不支持中文,可以通过指定字体来实现

import matplotlib.pyplot as pltx=np.linspace(-10,10)y=2**(x)plt.plot(x,y)plt.rcParams['font.family']=['STFangsong']plt.title('Exponential Function(指数函数)')plt.xlabel('x轴')plt.ylabel('y轴')plt.show()import matplotlib#显示有哪些字体sorted([f.name for f in matplotlib.font_manager.fontManager.ttflist])

Python画图实战之画K线图/weixin_41896770/article/details/120634612

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。