当前位置:

首页 > 编程开发 > Matplotlib库绘图教程——Python实现

Matplotlib库绘图教程——Python实现

中文字体设置:#字体设置plt.rcParams['font.sans-serif']=["SimHei"]plt.rcParams["axes.unicode_minus"]=False1、基本使用Matplotlib:是一个Python的2D绘图库,通过Matplotlib,开发者可以仅需要几行代码,便可以生成折线图,直方图,条形图,饼状图,散点图等。plot是一个画图的函数,他的参数:plot([x],y,[fmt],data=None,**kwargs)1.1、线条样式&颜色(1)

本文目录

      中文字体设置:

      # 字体设置
      plt.rcParams['font.sans-serif'] = ["SimHei"]
      plt.rcParams["axes.unicode_minus"] = False

      1、基本使用

      Matplotlib:是一个Python的2D绘图库,通过Matplotlib,开发者可以仅需要几行代码,便可以生成折线图,直方图,条形图,饼状图,散点图等。
      plot是一个画图的函数,他的参数:plot([x],y,[fmt],data=None,**kwargs)

      1.1、线条样式 & 颜色

      (1)点线形式

      Matplotlib库绘图教程——Python实现

      (2)线条颜色

      Matplotlib库绘图教程——Python实现

      import matplotlib.pyplot as plt
      import numpy as np
      # 原始线图
      plt.plot(range(10),[np.random.randint(0,10) for x in range(10)])
      # 点线图
      plt.plot(range(10),[np.random.randint(0,10) for x in range(10)],"*")
      # 线条颜色
      plt.plot([1,2,3,4,5],[1,2,3,4,5],'r') #将颜色线条设置成红色

      运行结果:

      Matplotlib库绘图教程——Python实现

      1.2、轴&标题

      • 1、设置图标题:plt.title

      • 2、设置轴标题:plt.xlabel & plt.ylabel  -  标题名称

      • 3、设置轴刻度:plt.xticks & plt.yticks  -  刻度长度,刻度标题

      范例:

      x = range(10)
      y = [np.random.randint(0,10) for x in range(10)]
      plt.plot(x,y,linewidth=10,color='red')
      # 设置图标题
      plt.title("sin函数")
      # 设置轴标题
      plt.xlabel("x轴")
      plt.ylabel("y轴")
      # 设置轴刻度
      plt.xticks(range(10),["第%d天"%x for x in range(1,10)])
      plt.yticks(range(10),["第%d天"%x for x in range(1,10)])
      # 加载字体
      plt.rcParams['font.sans-serif'] = ["SimHei"]
      plt.rcParams["axes.unicode_minus"] = False

      运行结果:

      Matplotlib库绘图教程——Python实现

      1.3、marker设置

      marker:关键点重点标记

      范例:

      x = range(10)
      y = [np.random.randint(0,10) for x in range(10)]
      plt.plot(x,y,linewidth=10,color='red')
      # 重点标记
      plt.plot(x,y,marker="o",markerfacecolor='k',markersize=10)

      运行结果:

      Matplotlib库绘图教程——Python实现

      1.4、注释文本

      annotate:注释文本

      范例:

      x = range(10)
      y = [np.random.randint(0,10) for x in range(10)]
      plt.plot(x,y,linewidth=10,color='red')
      # 重点标记
      plt.plot(x,y,marker="o",markerfacecolor='k',markersize=10)
      
      # 注释文本设置
      plt.annotate('local max', xy=(5, 5), xytext=(10,15),
      arrowprops=dict(facecolor='black',shrink=0.05),
      )

      运行结果:

      Matplotlib库绘图教程——Python实现

      1.5、设置图形样式

      plt.figure:调整图片的大小和像素
      	`num`:图的编号,
      	`figsize`:单位是英寸,
      	`dpi`:每英寸的像素点,
      	`facecolor`:图片背景颜色,
      	`edgecolor`:边框颜色,
      	`frameon`:是否绘制画板。

      范例:

      x = range(10)
      y = [np.random.randint(0,10) for x in range(10)]
      # 设置图形样式
      plt.figure(figsize=(20,10),dpi=80)
      plt.plot(x,y,linewidth=10,color='red')

      运行结果:

      Matplotlib库绘图教程——Python实现

      2、条形图

      应用场景:

      • 1. 数量统计。

      • 2. 频率统计。

      相关参数:

      barh:条形图

      • 1. `x`:一个数组或者列表,代表需要绘制的条形图的x轴的坐标点。  

      • 2. `height`:一个数组或者列表,代表需要绘制的条形图y轴的坐标点。  

      • 3. `width`:每一个条形图的宽度,默认是0.8的宽度。  

      • 4. `bottom`:`y`轴的基线,默认是0,也就是距离底部为0.  

      • 5. `align`:对齐方式,默认是`center`,也就是跟指定的`x`坐标居中对齐,还有为`edge`,靠边对齐,具体靠右边还是靠左边,看`width`的正负。  

      • 6. `color`:条形图的颜色。

      2.1、横向条形图 范例

      movies = {
          "流浪地球":40.78,
          "飞驰人生":15.77,
          "疯狂的外星人":20.83,
          "新喜剧之王":6.10,
          "廉政风云":1.10,
          "神探蒲松龄":1.49,
          "小猪佩奇过大年":1.22,
          "熊出没·原始时代":6.71
      }
      plt.barh(np.arange(len(movies)),list(movies.values()))
      plt.yticks(np.arange(len(movies)),list(movies.keys()),fontproperties=font)
      plt.grid()

      运行结果

      Matplotlib库绘图教程——Python实现

      2.2、分组条形图

      范例:

      movies = {
          "流浪地球":[2.01,4.59,7.99,11.83,16],
          "飞驰人生":[3.19,5.08,6.73,8.10,9.35],
          "疯狂的外星人":[4.07,6.92,9.30,11.29,13.03],
          "新喜剧之王":[2.72,3.79,4.45,4.83,5.11],
          "廉政风云":[0.56,0.74,0.83,0.88,0.92],
          "神探蒲松龄":[0.66,0.95,1.10,1.17,1.23],
          "小猪佩奇过大年":[0.58,0.81,0.94,1.01,1.07],
          "熊出没·原始时代":[1.13,1.96,2.73,3.42,4.05]
      }
      plt.figure(figsize=(20,8))
      width = 0.75
      bin_width = width/5
      movie_pd = pd.DataFrame(movies)
      ind = np.arange(0,len(movies))
      
      # 第一种方案
      for index in movie_pd.index:
          day_tickets = movie_pd.iloc[index]
          xs = ind-(bin_width*(2-index))
          plt.bar(xs,day_tickets,width=bin_width,label="第%d天"%(index+1))
          for ticket,x in zip(day_tickets,xs):
              plt.annotate(ticket,xy=(x,ticket),xytext=(x-0.1,ticket+0.1))
      # 设置图例
      plt.ylabel("单位:亿")
      plt.title("春节前5天电影票房记录")
      # 设置x轴的坐标
      plt.xticks(ind,movie_pd.columns)
      plt.xlim
      plt.grid(True)
      plt.show()

      运行结果:

      Matplotlib库绘图教程——Python实现

      2.3、堆叠条形图

      范例:

      menMeans = (20, 35, 30, 35, 27)
      womenMeans = (25, 32, 34, 20, 25)
      groupNames = ('G1','G2','G3','G4','G5')
      xs = np.arange(len(menMeans))
      plt.bar(xs,menMeans)
      plt.bar(xs,womenMeans,bottom=menMeans)
      plt.xticks(xs,groupNames)
      plt.show()

      运行结果:

      Matplotlib库绘图教程——Python实现

      3、直方图

      plt.hist:直方图

      • 1. x:数组或者可以循环的序列;

      • 2. bins:数字或者序列(数组/列表等);

      • 3. range:元组或者None,如果为元组,那么指定`x`划分区间的最大值和最小值;

      • 4. density:默认是`False`,如果等于`True`,那么将会使用频率分布直方图;

      • 5. cumulative:如果这个和`density`都等于`True`,那么返回值的第一个参数会不断的累加,最终等于`1`。

      应用场景:

      • 1. 显示各组数据数量分布的情况。

      • 2. 用于观察异常或孤立数据。

      • 3. 抽取的样本数量过小,将会产生较大误差,可信度低,也就失去了统计的意义。因此,样本数不应少于50个。

      3.1、直方图

      范例:

      durations = [131,  98, 125, 131, 124, 139, 131, 117, 128, 108, 135, 138, 131, 102, 107, 114, 119, 128, 121, 142, 127, 130, 124, 101, 110, 116, 117, 110, 128, 128, 115,  99, 136, 126, 134,  95, 138, 117, 111,78, 132, 124, 113, 150, 110, 117,  86,  95, 144, 105, 126, 130,126, 130, 126, 116, 123, 106, 112, 138, 123,  86, 101,  99, 136,123, 117, 119, 105, 137, 123, 128, 125, 104, 109, 134, 125, 127,105, 120, 107, 129, 116, 108, 132, 103, 136, 118, 102, 120, 114,105, 115, 132, 145, 119, 121, 112, 139, 125, 138, 109, 132, 134,156, 106, 117, 127, 144, 139, 139, 119, 140,  83, 110, 102,123,107, 143, 115, 136, 118, 139, 123, 112, 118, 125, 109, 119, 133,112, 114, 122, 109, 106, 123, 116, 131, 127, 115, 118, 112, 135,115, 146, 137, 116, 103, 144,  83, 123, 111, 110, 111, 100, 154,136, 100, 118, 119, 133, 134, 106, 129, 126, 110, 111, 109, 141,120, 117, 106, 149, 122, 122, 110, 118, 127, 121, 114, 125, 126,114, 140, 103, 130, 141, 117, 106, 114, 121, 114, 133, 137,  92,121, 112, 146,  97, 137, 105,  98, 117, 112,  81,  97, 139, 113,134, 106, 144, 110, 137, 137, 111, 104, 117, 100, 111, 101, 110,105, 129, 137, 112, 120, 113, 133, 112,  83,  94, 146, 133, 101,131, 116, 111,  84, 137, 115, 122, 106, 144, 109, 123, 116, 111,111, 133, 150]
      plt.figure(figsize=(15,5))
      nums,bins,patches = plt.hist(durations,bins=20,edgecolor='k')
      plt.xticks(bins,bins)
      for num,bin in zip(nums,bins):
          plt.annotate(num,xy=(bin,num),xytext=(bin+1.5,num+0.5))
      plt.show()

      运行结果:

      Matplotlib库绘图教程——Python实现

      3.2、频率直方图

      density:频率直方分布图

      范例:

      nums,bins,patches = plt.hist(durations,bins=20,edgecolor='k',density=True,cumulative=True)
      plt.xticks(bins,bins)
      for num,bin in zip(nums,bins):
          plt.annotate("%.4f"%num,xy=(bin,num),xytext=(bin+0.2,num+0.0005))

      运行结果:

      Matplotlib库绘图教程——Python实现

      3.3、直方图

      cumulative参数:nums的总和为1

      范例:

      plt.figure(figsize=(15,5))
      nums,bins,patches = plt.hist(durations,bins=20,edgecolor='k',density=True,cumulative=True)
      plt.xticks(bins,bins)
      for num,bin in zip(nums,bins):
          plt.annotate("%.4f"%num,xy=(bin,num),xytext=(bin+0.2,num+0.0005))

      运行结果:

      Matplotlib库绘图教程——Python实现

      4、散点图

      plt.scatter:散点图绘制:

      • 1. x,y:分别是x轴和y轴的数据集。两者的数据长度必须一致。

      • 2. s:点的尺寸。

      • 3. c:点的颜色。

      • 4. marker:标记点,默认是圆点,也可以换成其他的。

      范例:

      plt.scatter(x =data_month_sum["sumprice"]     #传入X变量数据
                  ,y=data_month_sum["Quantity"]     #传入Y变量数据
                  ,marker='*'     #点的形状
                  ,s=10           #点的大小
                  ,c='r'          #点的颜色
                 )
      plt.show()

      运行结果:

      Matplotlib库绘图教程——Python实现

      5、饼图

      饼图:一个划分为几个扇形的圆形统计图表,用于描述量、频率或百分比之间的相对关系的。

      在matplotlib中,可以通过plt.pie来实现,其中的参数如下:

      x:饼图的比例序列。labels:饼图上每个分块的名称文字。explode:设置某几个分块是否要分离饼图。autopct:设置比例文字的展示方式。比如保留几个小数等。shadow:是否显示阴影。textprops:文本的属性(颜色,大小等)。 范例

      plt.figure(figsize=(8,8),dpi=100,facecolor='white')
      plt.pie(x = StockCode.values,                  #数据传入
              radius=1.5,                            #半径
              autopct='%.2f%%'                       #百分比显示
              ,pctdistance=0.6,                      #百分比距离圆心比例
              labels=StockCode.index,                #标签
              labeldistance=1.1,                     #标签距离圆心比例
              wedgeprops ={'linewidth':1.5,'edgecolor':'green'}, #边框的线宽和颜色
              textprops={'fontsize':10,'color':'blue'})  #文本字体大小和颜色
      plt.title('商品销量占比',pad=100)              #设置标题及距离坐标轴的位置
      plt.show()

      运行结果:

      Matplotlib库绘图教程——Python实现

      6、箱线图

      箱图的绘制方法是:

      •     :1、先找出一组数据的上限值、下限值、中位数(Q2)和下四分位数(Q1)以及上四分位数(Q3)

      •     :2、然后连接两个四分位数画出箱子

      •     :3、再将最大值和最小值与箱子相连接,中位数在箱子中间。  

      中位数:把数据按照从小到大的顺序排序,然后最中间的那个值为中位数,如果数据的个数为偶数,那么就是最中间的两个数的平均数为中位数。  
      上下四分位数:同样把数据排好序后,把数据等分为4份。出现在`25%`位置的叫做下四分位数,出现在`75%`位置上的数叫做上四分位数。但是四分位数位置的确定方法不是固定的,有几种算法,每种方法得到的结果会有一定差异,但差异不会很大。

      上下限的计算规则是:  

      • IQR=Q3-Q1  

      • 上限=Q3+1.5IQR  

      • 下限=Q1-1.5IQR

      在matplotlib中有plt.boxplot来绘制箱线图,这个方法的相关参数如下:

      x:需要绘制的箱线图的数据。notch:是否展示置信区间,默认是False。如果设置为True,那么就会在盒子上展示一个缺口。sym:代表异常点的符号表示,默认是小圆点。vert:是否是垂直的,默认是True,如果设置为False那么将水平方向展示。whis:上下限的系数,默认是1.5,也就是上限是Q3+1.5IQR,可以改成其他的。也可以为一个序列,如果是序列,那么序列中的两个值分别代表的就是下限和上限的值,而不是再需要通过IQR来计算。positions:设置每个盒子的位置。widths:设置每个盒子的宽度。labels:每个盒子的label。meanline和showmeans:如果这两个都为True,那么将会绘制平均值的的线条。

      范例:

      #箱线图 - 主要观察数据是否有异常(离群点)
      #箱须-75%和25%的分位数+/-1.5倍分位差
      plt.figure(figsize=(6.4,4.8),dpi=100)
      
      #是否填充箱体颜色,是否展示均值,是否展示异常值,箱体设置,异常值设置,均值设置,中位数设置
      plt.boxplot(x=UnitPrice                               #传入数据
                  ,patch_artist=True                                #是否填充箱体颜色
                  ,showmeans=True                                   #是否展示均值
                  ,showfliers=True                                  #是否展示异常值
                  ,boxprops={'color':'black','facecolor':'white'}    #箱体设置
                  ,flierprops={'marker':'o','markersize':4,'markerfacecolor':'red'} #异常值设置
                  ,meanprops={'marker':'o','markersize':6,'markerfacecolor':'indianred'} #均值设置
                  ,medianprops={'linestyle':'--','color':'blue'}   #中位数设置
                 )
      plt.show()

      运行结果:

      Matplotlib库绘图教程——Python实现

      7、雷达图

      雷达图:又被叫做蜘蛛网图,适用于显示三个或更多的维度的变量的强弱情况

      plt.polar来绘制雷达图,x轴的坐标点应该为弧度(2*PI=360°)

      范例:

      import numpy as np
      properties = ['输出','KDA','发育','团战','生存']
      values = [40,91,44,90,95,40]
      theta = np.linspace(0,np.pi*2,6)
      plt.polar(theta,values)
      plt.xticks(theta,properties)
      plt.fill(theta,values)

      运行结果:

      Matplotlib库绘图教程——Python实现

      注意事项:

      • 因为polar并不会完成线条的闭合绘制,所以我们在绘制的时候需要在theta中和values中在最后多重复添加第0个位置的值,然后在绘制的时候就可以和第1个点进行闭合了。

      • polar只是绘制线条,所以如果想要把里面进行颜色填充,那么需要调用fill函数来实现。

      • polar默认的圆圈的坐标是角度,如果我们想要改成文字显示,那么可以通过xticks来设置。

      本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
      作者最新文章
      编程开发 Python Matplotlib
      相关文章 更多
      python删除一个列表里的重复元素的方法与代码示例
      python删除一个列表里的重复元素的方法与代码示例

      学习如何使用Python高效删除列表中的重复元素。本文提供5种常见方法的代码示例,涵盖保持顺序与不保持顺序的场景,适合初学者和进阶开发者参考。

      Python写接口的步骤及完整代码示例
      Python写接口的步骤及完整代码示例

      详细讲解使用Python编写Web接口的核心步骤与完整代码示例,涵盖环境准备、路由定义、数据校验、服务启动及调试测试方法。

      codex怎么读取word文档及docx文件操作教程
      codex怎么读取word文档及docx文件操作教程

      介绍如何利用编程工具读取和解析Word文档(docx格式),涵盖基础文本提取代码示例、结构化数据处理逻辑,以及处理复杂排版时的技术局限与替代方案。

      怎么在Python中调用C语言代码提升性能
      怎么在Python中调用C语言代码提升性能

      详细讲解在Python中调用C语言代码提升性能的完整实践指南,包含原理分析、编译步骤、ctypes与CFFI具体实现、性能对比及常见陷阱。

      Python与C语言的性能差异及底层原理
      Python与C语言的性能差异及底层原理

      深入解析Python与C语言在执行效率上的数量级差异,从编译机制、变量内存布局、动态类型推断到GIL锁,系统阐明底层核心原理。

      Python和C语言哪个更适合编程入门
      Python和C语言哪个更适合编程入门

      客观对比Python与C语言在心智负担、底层机制与学习反馈上的核心差异,提供清晰有据的选择标准与切实的入门学习路径。

      selenium上传文件教程本地文件路径设置方法
      selenium上传文件教程本地文件路径设置方法

      深入解析Selenium处理文件上传的技术细节,涵盖标准HTML控件的路径直接注入法与非标准控件的系统级模拟方案,提供Windows与Linux环境下的路径设置最佳实践及常见异常排查。

      大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景
      大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景

      针对大数据工程场景,系统对比Java、Scala与Python在执行性能、生态结合、开发效率和维护成本上的核心差异,给出清晰的架构选型依据与落地方案。

      langgraph python guide中文入门教程详解
      langgraph python guide中文入门教程详解

      本篇LangGraph Python中文入门教程详解,系统梳理StateGraph状态机定义、节点编写、边与条件路由、检查点持久化(MemorySaver)等核心机制,提供从环境安装到完整循环智能体构建的代码示例与实操指导。

      Windows 安装 Python:从官方入口到虚拟环境的可复现实践
      Windows 安装 Python:从官方入口到虚拟环境的可复现实践

      面向后端开发者,基于 Python 官方文档说明如何在 Windows 上安装 Python、创建 venv 虚拟环境及使用 pip 管理依赖。包含可复制命令、验证方法及工具选择边界,避免常见配置误区。

      查看更多
      精品专题 更多
      装机必备
      装机必备

      正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

      Windows
      Windows

      正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

      PDF教程
      PDF教程

      正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

      Mac软件 更多
      讯飞智作 网页版
      讯飞智作 网页版
      Windows/ macOS/ Linux

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      火山引擎 网页版
      火山引擎 网页版
      Windows/ macOS/ Linux

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      Aperty macOS版
      Aperty macOS版
      macOS

      Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

      WINDOWS 更多
      讯飞智作 网页版
      讯飞智作 网页版
      Windows/ macOS/ Linux

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      火山引擎 网页版
      火山引擎 网页版
      Windows/ macOS/ Linux

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      PixTV 网页版
      PixTV 网页版
      Windows

      PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。