• matplotlib绘图


    介绍

    在官网上有更多种类的图型的绘制方法

    matpoltlib中文官方文档例子_Matplotlib 中文网

    matpoltlib英文官方文档:Examples — Matplotlib 3.8.1 documentation

    分类

    一、折线图

    1、要实现的功能:

    2、实例:

    1. # 导入包
    2. from matplotlib import pyplot as plt
    3. #这句话还可以用:from matplotlib import pyplot as plt
    4. # 创建数据
    5. x = range(2, 26, 2)
    6. y = [15, 13, 14.5, 17, 20, 25, 26, 26, 27, 22, 18, 15]
    7. y2 = [1, 0, 11, 12, 13, 14, 3, 10, 1, 1, 1, 2]
    8. # 设置图片尺寸和清晰度,dpi表示分辨率,即每英寸的点数,默认80
    9. plt.figure(figsize=(20, 8), dpi=200)
    10. # 绘制折线图
    11. plt.plot(x, y, label='line_1')
    12. plt.plot(x, y2, label='line_2', color='r', linestyle="--", linewidth=5, alpha=0.5)#设置线颜色、线条样式、线条宽度、线条透明度
    13. # 设置曲线标签;需要先在plot函数中设置label参数,
    14. plt.legend() # 默认标签显示在右上角;对参数loc赋值可使label显示在不同位置
    15. # 设置x、y轴刻度(数字的情况下)
    16. xticks_labels = [i/2 for i in range(2, 50)]
    17. plt.xticks(xticks_labels)
    18. plt.yticks(range(0, max(y)+1))
    19. # 设置x、y刻度(字符串情况下);传入两个参数,都为列表形式,两个列表对应;rotation代表旋转角度
    20. plt.xticks(xticks_labels, [f"No.{i}" for i in xticks_labels], rotation = 45)
    21. # 添加标题和标签
    22. plt.title('Simple Line Plot')
    23. plt.xlabel('X-axis')
    24. plt.ylabel('Y-axis')
    25. # 设置网格
    26. plt.grid()
    27. # plt.grid(alpha = 0.2) #参数alpha表示网格透明度
    28. # 保存图片
    29. plt.savefig("./t1.png")
    30. plt.savefig("./t2.svg") # .svg矢量图格式,放大不会有锯齿
    31. # 显示图形
    32. plt.show()

    3、逐句解释:

    (1)导入包

    1. # 导入包
    2. from matplotlib import pyplot as plt
    3. #这句话还可以用:from matplotlib import pyplot as plt

    (2)创建数据

    1. # 创建数据
    2. x = range(2, 26, 2)
    3. y = [15, 13, 14.5, 17, 20, 25, 26, 26, 27, 22, 18, 15]
    4. y2 = [1, 0, 11, 12, 13, 14, 3, 10, 1, 1, 1, 2]

    (3)设置图片尺寸和清晰度,dpi表示分辨率,即每英寸的点数,默认80

    1. # 设置图片尺寸和清晰度,dpi表示分辨率,即每英寸的点数,默认80
    2. plt.figure(figsize=(20, 8), dpi=200)

    (4)绘制折线图,plot中,参数可以设置:“ 线条颜色、线条样式、线条宽度、线条透明度 ”

    1. # 绘制折线图
    2. plt.plot(x, y, label='line_1')
    3. plt.plot(x, y2, label='line_2', color='r', linestyle="--", linewidth=5, alpha=0.5)#设置线颜色、线条样式、线条宽度、线条透明度

    (5)在一个表中显示多个折线图,多次调用plot函数绘图即可,可用 legend 生成图例,不同折线标签是由 plot 中的 label 参数设置,legend 中参数可设置标签的各项特点。

    1. # 设置曲线标签;需要先在plot函数中设置label参数,
    2. plt.legend() # 默认标签显示在右上角;对参数loc赋值可使label显示在不同位置

    (6)设置x、y轴的刻度,数字情况是传入一个列表参数,字符串情况是传入两个相互对应的列表参数

    1. # 设置x、y轴刻度(数字的情况下)
    2. xticks_labels = [i/2 for i in range(2, 50)]
    3. plt.xticks(xticks_labels)
    4. plt.yticks(range(0, max(y)+1))
    5. # 设置x、y刻度(字符串情况下);传入两个参数,都为列表形式,两个列表对应;rotation代表旋转角度
    6. plt.xticks(xticks_labels, [f"No.{i}" for i in xticks_labels], rotation = 45)

    (7)设置标题和x、y轴标签

    1. # 添加标题和标签
    2. plt.title('Simple Line Plot')
    3. plt.xlabel('X-axis')
    4. plt.ylabel('Y-axis')

    (8)设置网格,alpha参数代表网格透明度,范围0-1

    1. # 设置网格
    2. plt.grid()
    3. # plt.grid(alpha = 0.2) #参数alpha表示网格透明度

    (9)保存图片,svg矢量图格式可以防止放大图线后出现模糊

    1. # 保存图片
    2. plt.savefig("./t1.png")
    3. plt.savefig("./t2.svg") # .svg矢量图格式,放大不会有锯齿

    (10)显示图线

    1. # 显示图形
    2. plt.show()

    二、散点图

    将  plot()  换成  scatter()  即可。其余与折线图完全一样。

    三、条形图

    1、竖着的条形图

    1. from matplotlib import pyplot as plt
    2. a = ["no1", "no2", "no3", "no4", "no5", "no6", "no7", "no8", "no9"]
    3. b = [56.1, 26.94, 17.53, 16.49, 15.45, 12.96, 11.8, 11.61, 11]
    4. # 设置图形大小
    5. plt.figure(figsize=(20, 8), dpi=80)
    6. # 绘制条形图
    7. plt.bar(range(len(a)), b, width=0.3)
    8. # 设置字符串到x轴
    9. plt.xticks(range(len(a)), a, rotation=90)
    10. plt.show()

    2、横着的条形图

    1. from matplotlib import pyplot as plt
    2. a = ["no1", "no2", "no3", "no4", "no5", "no6", "no7", "no8", "no9"]
    3. b = [56.1, 26.94, 17.53, 16.49, 15.45, 12.96, 11.8, 11.61, 11]
    4. # 设置图形大小
    5. plt.figure(figsize=(20, 8), dpi=80)
    6. # 绘制条形图
    7. plt.barh(range(len(a)), b, height=0.3)
    8. # 设置字符串到x轴
    9. plt.yticks(range(len(a)), a)
    10. plt.show()

    3,区别

    (1)竖图和横图用的绘图函数分别为 bar() 和 barh() ,

    (2)若竖图设置的是x轴,其对应的横图就应该设置y轴。

    (3)竖图设置条的宽度用width参数,横图用height参数

    四、直方图

    用 hist() 绘制直方图,参数density默认为False,表示绘制频率分布直方图,设置为True 表示绘制概率分布直方图(面积归一化)

    1. from matplotlib import pyplot as plt
    2. a = [112,134,173,156,88,93,140,150,130,133,122,123,132,145,154,154,154,123,165,147,99,95,149,120,123,93,92,154,123,134,135,154,153,133,122,123,154,145,134,145,164,163,162,166,126,134,143,155,156,167,133,134,155,159,158,138,139,134,137,147,148,149,133,134,144,134,143,133,170,167,145,123,134,165,122,102,101,100,102,103,103,104,105,106,107,148,109,112,113,114,115,112,111,111,110,114,113,123,133,116]
    3. d = 5 # 组距
    4. num_bins = (max(a)-min(a))//d
    5. print(len(a), max(a), min(a), max(a)-min(a))
    6. print(num_bins)
    7. # 设置图形大小
    8. plt.figure(figsize=(20, 8), dpi=80)
    9. plt.hist(a, num_bins, density=True) # density设置为True表示概率分布直方图(面积归一化),默认density为False,为频率分别直方图
    10. # 设置x轴刻度
    11. plt.xticks(range(min(a), max(a)+d, d))
    12. plt.grid()
    13. plt.show()

    hist() 中第二个参数若为一个数字num,则代表平均分为num组,若为一个列表,则可以按照列表分组,这个列表中的数代表的并不是比例,而是横坐标的数字,如将上代码中的 hist() 的第二个参数改为 [60,70,80,90,100,125,155,160,170,180],可得到:

    此时应更改横坐标也为[60,70,80,90,100,125,155,160,170,180]

  • 相关阅读:
    mysql八股
    typeScript类继承编译成javaScript后的代码分析
    【附源码】计算机毕业设计java租车信息管理系统设计与实现
    什么是营销自动化工具?简单的营销自动化流程如何设计?
    Elastic实战:canal自定义客户端,实现mysql多表同步到es
    srdensenet
    Springboot文件管理 -- 实现上传下载显示删除等接口详细解析 附代码(全)
    有哪些支持 HomeKit 的智能家居生态值得推荐?
    通过工具和字节码带你深入理解运行时数据区
    java基础面试:继承、final关键字、抽象类、接口
  • 原文地址:https://blog.csdn.net/m0_56997192/article/details/134421618