赞
踩
Python画图很方便,不管是平时的学习还是教学当中,都将经常用到,特别直观,其中主要用到两个常用的库,一个二维和三维的:matplotlib.pyplot,mpl_toolkits.mplot3d
目录
- import numpy as np
- import matplotlib.pyplot as plt
- x = 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 np
- import matplotlib.pyplot as plt
- x = 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),简单来讲就是做了笛卡尔积的处理
- import numpy as np
- import matplotlib.pylab as plt
- from matplotlib.font_manager import FontProperties
- font=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()
- 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()
这样更直观,在第几行几列进行图形的绘制
- import matplotlib.pyplot as plt
- import numpy as np
- import mpl_toolkits.mplot3d as p3d
-
- fig=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**2
-
- ax.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=x
- ax1=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 plt
- x=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线图https://blog.csdn.net/weixin_41896770/article/details/120634612
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。