【学习笔记】Python 使用 matplotlib 画图

2024-04-27 1087阅读

文章目录

    • 安装
    • 中文显示
    • 折线图、点线图
    • 柱状图、堆积柱状图
    • 坐标轴断点
    • 参考资料

      本文将介绍如何使用 Python 的 matplotlib 库画图,记录一些常用的画图 demo 代码

      安装

      # 建议先切换到虚拟环境中
      pip install matplotlib
      

      中文显示

      新版的 matplotlib 已经支持字体回退功能,因此可以直接设置字体为 Times New Roman 和 SimSun(宋体)。这样英文会以 Times New Roman 显示,中文会以 宋体 显示

      import matplotlib.pyplot as plt
      plt.rcParams['font.family'] = ['Times New Roman','SimSun']
      

      折线图、点线图

      plot 即可以绘制折线图,也可以绘制点线图,通过 marker 参数设置点的样式,markersize 设置点的大小

      import matplotlib.pyplot as plt
      # 设置中文字体为 Times New Roman 和 宋体
      plt.rcParams['font.family'] = ['Times New Roman','SimSun']
      # 生成数据
      x = range(0, 6)
      y = [i**3 for i in x]
      # 绘制点线图
      plt.plot(x, y, marker='o', markersize=6, label='y=x^3')
      # 添加坐标轴标签
      plt.xlabel('x')
      plt.ylabel('y')
      # 配置坐标轴范围
      plt.xlim(0)
      plt.ylim(0)
      # 添加图例
      plt.legend()
      # 配置紧凑布局
      plt.tight_layout(pad=0.1)
      # 保存图片
      plt.savefig('plot.png')
      

      【学习笔记】Python 使用 matplotlib 画图

      柱状图、堆积柱状图

      bar 绘制柱状图,通过 bottom 参数可以绘制堆积柱状图

      # 生成数据
      x = range(1, 6)
      y1 = [1 for i in x]
      y2 = [i for i in x]
      # 绘制堆积柱状图
      plt.bar(x, y1, color='tab:blue', edgecolor='black', label='y1=1', width=0.5)
      plt.bar(x, y2, bottom=y1, color='tab:orange', edgecolor='black', label='y2=x', width=0.5)
      

      【学习笔记】Python 使用 matplotlib 画图

      坐标轴断点

      有时需要在柱状图中添加 y 轴的断点,可以通过画两个相同的图,并配置不同的 y 轴范围,然后在两个图之间添加截断线的方式来实现

      # 生成数据
      x = range(1, 5)
      y = [i**3 for i in x]
      # 分别绘制上下两个图
      b1 = ax1.bar(x, y, color='tab:blue', edgecolor='black', label='y1=1', width=0.5)
      b2 = ax2.bar(x, y, color='tab:blue', edgecolor='black', label='y1=1', width=0.5)
      # 显示数据
      ax1.bar_label(b1, fmt='%d', label_type='edge')
      ax2.bar_label(b2, fmt='%d', label_type='edge')
      # 配置上图的坐标轴范围
      ax1.set_ylim(15)
      ax1.set_yticks([20, 40, 60])
      # 删掉上图的下边框
      ax1.spines['bottom'].set_visible(False)
      # 隐藏上图的x轴
      ax1.xaxis.set_visible(False)
      # 配置下图的坐标轴范围
      ax2.set_ylim(0, 9)
      ax2.set_yticks([0, 2, 4, 6, 8])
      # 删掉下图的上边框
      ax2.spines['top'].set_visible(False)
      # 添加截断线,由于图高度比例为1:2,所以截断线的y坐标也需要按比例设置
      d = .015
      kwargs = dict(transform=ax1.transAxes, color='k', clip_on=False)
      ax1.plot((-d, +d), (-2*d, +2*d), **kwargs) 
      ax1.plot((1 - d, 1 + d), (-2*d, +2*d), **kwargs)
      kwargs.update(transform=ax2.transAxes)
      ax2.plot((-d, +d), (1 - d, 1 + d), **kwargs)
      ax2.plot((1 - d, 1 + d), (1 - d, 1 + d), **kwargs)
      

      【学习笔记】Python 使用 matplotlib 画图

      参考资料

      • 【GitHub】Implement Font-Fallback in Matplotlib
      • 【matplotlib】axes.Axes.bar_label
      • 【matplotlib】Broken Axis

        本文作者: ywang_wnlo

        本文链接: https://ywang-wnlo.github.io/posts/731b80f7/

        版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]