当前位置:   article > 正文

使用matplotlib画图(常用图)

使用matplotlib画图(常用图)

1. Matplotlib绘图基础

1.1 subplot(m,n,k) :创建一个m*n的子图,接下来的图样绘制在第k块中

1.2 plot(x,y,color='blue',linewidth=2.5,marker = '^',linestyle='-',label = '  '):绘制曲线

color:线条颜色:

颜色字符说明颜色字符说明
'b'蓝色‘m’洋红色
'g'绿色'y'黄色
'r'红色'k'黑色
'c'青绿色'w'白色
'#008000'RGB某颜色'0.8'灰色值字符串

marker:标记风格

标记字符说明
'.'点标记
'o'实心圆标记
'v'倒三角标记
'^'上三角标记
'>'右三角标记
'<'左三角标记
'*'星形标记
‘+’十字标记
‘|’垂直线标记
‘D’菱形标记

linestyle:线条样式

风格字符说明
'-'实线
'--'破折线
‘-.’点划线
':'虚线

label:图例名称

1.3 xlim(-2.0,2.0) :设置横轴的上下限

1.4 xticks(np.linspace(-4, 4, 9, endpoint=True), fontproperties='Times New Roman',    size=20)

yticks(np.linspace(-1, 1, 5, endpoint=True)):设置横轴和纵轴记号(范围,字体,字号)

1.5 xlabel('X axis',font)    ylabel('Y axis',font): 横轴标签,纵轴标签

        #设置横纵坐标的名称以及对应字体格式
        font = {'family' : 'Times New Roman',
        'weight' : 'normal',
        'size'   : 20,
        }

1.6 title('Demo Figure',font):设置图像标题

1.7 show():在屏幕上显示

1.8 legend(loc = 'upper left'):显示图例并固定位置

实例:

  1. from pylab import *
  2. import numpy as np
  3. import matplotlib.pylab as plt
  4. # 创建一个8*6点(point)的图,并设置分辨率为80
  5. figure(figsize=(8, 6), dpi=80)
  6. # 创建一个新的1*1的子图,接下来的图样绘制在其中的第一块中
  7. subplot(2, 2, 1)
  8. # 得到坐标点(x,y)坐标
  9. X = np.linspace(-np.pi, np.pi, 256, endpoint=True)
  10. C, S = np.cos(X), np.sin(X)
  11. # 绘制余弦曲线,使用蓝色的、连续的、宽度为1的线条
  12. plot(X, C, color='blue', linewidth=2.5, marker = '^',linestyle='-',label = 'cosine')
  13. # 绘制正弦曲线,使用绿色的、连续的、宽度为1的线条
  14. plot(X, S, color='green', linewidth=2.0, linestyle='-',label='sine')
  15. legend(loc = 'upper left')
  16. # 设置横轴的上下限
  17. xlim(-4.0, 4.0)
  18. # 设置横轴记号
  19. xticks(np.linspace(-4, 4, 9, endpoint=True), fontproperties='Times New Roman', size=20)
  20. # 设置纵轴记号
  21. yticks(np.linspace(-1, 1, 5, endpoint=True))
  22. #设置横纵坐标的名称以及对应字体格式
  23. font = {'family' : 'Times New Roman',
  24. 'weight' : 'normal',
  25. 'size' : 20,
  26. }
  27. # 设置横轴标签
  28. plt.xlabel('X axis', font)
  29. # 设置纵轴标签
  30. plt.ylabel('Y axis', font)
  31. # 设置图像标题
  32. plt.title('Demo Figure', font)
  33. # 以分辨率72来保存图片
  34. savefig('demo.png', dpi=72)
  35. subplot(2,2,2)
  36. plot(X, -C, color='m', linewidth=2.5, marker = '^',linestyle='-.')
  37. # 绘制正弦曲线,使用绿色的、连续的、宽度为1的线条
  38. plot(X, -S, color='r', linewidth=2.0, linestyle='--')
  39. # 在屏幕上显示
  40. show()

效果图:

 若横轴纵轴标记为:

  1. xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
  2. [r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'])
  3. yticks([-1, 0, +1],
  4. [r'$-1$', r'$0$', r'$+1$'])

效果图:

 2. 函数间区域填充函数fill_between()和fill()

plt.fill_between(x, y1, y2, where, color, alpha)

参数:

    x: x轴坐标值,为一个list
    y1: 第一条曲线对应的函数值,为x对应的函数值list
    y2: 第二条曲线对应的函数值,为x对应的函数值list
    where: 条件表达式,用于判断某个区间内是否进行填充,如果判断为True,则进行填充,否则不填充
    color: 填充区域的颜色
    alpha: 填充区域的透明度,1表示不透明,0表示完全透明

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. n = 256
  4. X = np.linspace(-np.pi,np.pi,n,endpoint=True)
  5. Y = np.cos(2*X)
  6. plt.axes([0.025,0.025,0.95,0.95])
  7. plt.plot (X, Y+1, color='g', alpha=1.00)
  8. plt.fill_between(X, 1, Y+1, color='g', alpha=.25)
  9. plt.plot (X, Y-1, color='m', alpha=1.00)
  10. plt.fill_between(X, -1, Y-1, (Y-1) > -1, color='m', alpha=.25)
  11. plt.fill_between(X, -1, Y-1, (Y-1) < -1, color='b', alpha=.25)
  12. plt.xlim(-np.pi,np.pi), plt.xticks([])
  13. plt.ylim(-2.5,2.5), plt.yticks([])
  14. plt.show()

效果图:

 3. 散点图

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. n = 1024
  4. X = np.random.normal(0,1,n)
  5. Y = np.random.normal(0,1,n)
  6. T = np.sin(Y) # T中包含了数据点的颜色到当前colormap的映射值
  7. # print(T.shape)
  8. plt.axes([0.025,0.025,0.95,0.95])
  9. plt.scatter(X,Y, s=75, c=T, alpha=.5)
  10. plt.xlim(-1.5,1.5), plt.xticks([])
  11. plt.ylim(-1.5,1.5), plt.yticks([])
  12. plt.show()

效果图:
 

4. 条形图

bar()

参数:

  • x: 长条形中的横坐标点list
  • left: 长条形左边沿x轴坐标list
  • height: 长条形对应每个横坐标的高度值
  • width: 长条形的宽度,默认值为0.8
  • label: 每个数据样本对应的label,后面调用legend()函数可以显示图例
  • alpha: 透明度
  1. from pylab import *
  2. n= 10
  3. X = np.arange(5)
  4. Y1 = np.array([2,3,4,5,6])
  5. Y2 = np.array([-3,-6,-9,-1,-2])
  6. bar(X,Y1,facecolor='#fd9999', edgecolor='white')
  7. bar(X,Y2,facecolor='#9dd999', edgecolor='white')
  8. for x,y in zip(X,Y1):
  9. text(x, y+0.05, '%.2f' % y, ha='center', va= 'bottom')
  10. for x, y in zip(X, Y2):
  11. text(x, y-0.85, '%.2f'% y, ha='center', va='bottom')
  12. ylim(-10,10)
  13. show()

 两种直方图对比:

  1. import matplotlib.pyplot as plt
  2. import matplotlib
  3. # 设置中文字体和负号正常显示
  4. matplotlib.rcParams['font.sans-serif'] = ['SimHei']
  5. matplotlib.rcParams['axes.unicode_minus'] = False
  6. label_list = ['2020', '2021', '2022', '2023'] # 横坐标刻度显示值
  7. num_list1 = [10, 30, 15, 35] # 纵坐标值1
  8. num_list2 = [10, 20, 40, 20] # 纵坐标值2
  9. x = range(len(num_list1))
  10. # 绘制条形图
  11. rects1 = plt.bar(x, height=num_list1, width=0.4, alpha=0.5, color='#2188fe', label='部门一')
  12. rects2 = plt.bar([i+0.4 for i in x], height=num_list2, width=0.4, color='#fe2188', label='部门二')
  13. # 设置y轴属性
  14. plt.ylim(0, 50)
  15. plt.ylabel('数量')
  16. # 设置x轴属性
  17. plt.xticks([index+0.2 for index in x], label_list)
  18. plt.xlabel("年份")
  19. plt.title('某某学校')
  20. plt.legend()
  21. # 显示文本
  22. for rect in rects1:
  23. height = rect.get_height()
  24. plt.text(rect.get_x() + rect.get_width() / 2, height + 1, str(height), ha='center', va='bottom')
  25. for rect in rects2:
  26. height = rect.get_height()
  27. plt.text(rect.get_x() + rect.get_width() / 2, height + 1, str(height), ha='center', va='bottom')
  28. plt.show()

 

 

5. 等高线图

  1. from pylab import *
  2. def f(x,y):
  3. return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)
  4. n = 256
  5. x = np.linspace(-3,3,n)
  6. y = np.linspace(-3,3,n)
  7. X,Y = np.meshgrid(x,y)
  8. #涂色区域
  9. plt.contourf(X, Y, f(X,Y), 12, alpha=.75, cmap='jet')
  10. #等高线
  11. C = plt.contour(X, Y, f(X,Y), 12, colors='black')
  12. show()

6. 折线图

  1. from pylab import *
  2. x = [5, 10, 15, 20, 25, 30, 35, 40]
  3. y = [17, 24, 29, 36, 38, 47, 59, 80]
  4. plt.plot(x, y, 'm*-', markersize=20)
  5. show()

 

7.热力图(自定义colormap)

  1. import matplotlib.pyplot as plt
  2. import matplotlib.colors as col
  3. import matplotlib.cm as cm
  4. import numpy as np
  5. points = np.arange(-5, 5, 0.01)
  6. # print(points)
  7. xs, ys = np.meshgrid(points, points)
  8. z = np.sqrt(xs**2 + ys**2)
  9. # print(z)
  10. # 自定义colormap
  11. start_color = 'r'
  12. end_color = 'w'
  13. cmap_1 = col.LinearSegmentedColormap.from_list('cmap1', [start_color, end_color])
  14. plt.imshow(z, cmap=cmap_1, alpha=0.3)
  15. plt.show()

 

本文参考:

https://blog.csdn.net/qq_30992103/article/details/101905466

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

闽ICP备14008679号