当前位置:   article > 正文

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

python 子图 直方图

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

目录

点线图

直方图(Histogram)

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

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


点线图

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. x = np.array([[0, 3, 5], [0, 1, 2],[3,4,7]])
  4. y = np.array([[0, 6, 0], [1, 7, 0],[2,5,4]])
  5. plt.plot(x, y,color='red',marker='.',markersize=20,linestyle='-')
  6. plt.grid(True)
  7. plt.show()
  8. -----------------------------
  9. array([[0, 3, 5],
  10. [0, 1, 2],
  11. [3, 4, 7]])
  12. array([[0, 6, 0],
  13. [1, 7, 0],
  14. [2, 5, 4]])
  15. -------------------------------

 

x,y生成的点的连线,从上面的图形可以看出,点和连线构成的新矩阵的点是:
[0,0],[0,1],[3,2]
[3,6],[1,7],[4,5]
[5,0],[2,0],[7,4]

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

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. 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,)
  4. 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,)
  5. X,Y=np.meshgrid(x,y)
  6. plt.plot(X,Y,color='red',marker='.',markersize=20,linestyle='-')
  7. plt.grid(True)
  8. plt.show()
'
运行

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

直方图(Histogram)

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

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

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

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

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

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

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

 

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

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

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

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

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

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. fig=plt.figure()
  4. x=np.linspace(1,10)
  5. y=x
  6. ax1=fig.add_axes([0.1,0.1,0.9,0.9])#(矩形:左、下、宽、高)
  7. ax1.plot(x,y,'r')
  8. ax1.set_title('y=x')
  9. #绘制第二张图形,嵌套在里面
  10. y1=np.cos(x)
  11. ax2=fig.add_axes([0.2,0.6,0.3,0.3])
  12. ax2.plot(x,y1,'g')
  13. ax2.set_title('y=cosx')
  14. plt.show()
'
运行

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

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

 

Python画图实战之画K线图https://blog.csdn.net/weixin_41896770/article/details/120634612

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/897007
推荐阅读
相关标签
  

闽ICP备14008679号