【数据可视化-01】Matplotlib图形实战宝典

  在数据分析领域,图形化展示数据是非常重要的环节。Python中的matplotlib库是绘制各类图形的强大工具。本文将介绍如何使用matplotlib绘制折线图、直方图、饼图、散点图和柱状图等数据分析中常见的图形,并附上相应的代码示例,可以当初matplotlib函数库来使用,将案列中的数据替换成自己真实的数据即可绘制出符合条件的图像。
  关于matplotlib进行数据可视化的案列,具体参考Matplotlib 3.6.0 文档示例库,里面给出各种图形可视化的案列代码,具体如下所示:
在这里插入图片描述
  下面示点进去带标签的分组条形图页面下官方代码案列;
  此示例显示如何创建分组条形图以及如何使用标签注释条形图。
在这里插入图片描述
  接下来我们将详细介绍matplotlib在进行数据可视化分析过程常用的图像绘制;

一、折线图(Line Plot)

  折线图通常用于展示数据随时间或其他连续变量的变化趋势。

import matplotlib.pyplot as plt
import numpy as np# 创建数据
x = np.linspace(0, 10, 100)
y = np.sin(x)# 绘制折线图
plt.plot(x, y)# 设置图表标题和坐标轴标签
plt.title('Sin Curve')
plt.xlabel('x')
plt.ylabel('y')# 显示图表
plt.show()

在这里插入图片描述

二、直方图(Histogram)

  直方图用于展示数据的分布情况,特别是连续型变量的分布情况。

import matplotlib.pyplot as plt
import numpy as np# 创建数据
data = np.random.randn(1000)# 绘制直方图
plt.hist(data, bins=30, edgecolor='black')# 设置图表标题和坐标轴标签
plt.title('Histogram of Data')
plt.xlabel('Value')
plt.ylabel('Frequency')# 显示图表
plt.show()

在这里插入图片描述

三、饼图(Pie Chart)

  饼图用于展示各类别的比例或占比。

import matplotlib.pyplot as plt# 创建数据
labels = ['Category A', 'Category B', 'Category C']
sizes = [15, 30, 55]# 绘制饼图
plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90)# 设置图表标题
plt.title('Pie Chart Example')# 显示图表
plt.axis('equal')  # Equal aspect ratio ensures that pie is drawn as a circle.
plt.show()

在这里插入图片描述

四、散点图(Scatter Plot)

  散点图用于展示两个变量之间的关系,通过点的分布来观察是否存在某种趋势或模式。

import matplotlib.pyplot as plt
import numpy as np# 创建数据
x = np.random.rand(50)
y = np.random.rand(50)# 绘制散点图
plt.scatter(x, y)# 设置图表标题和坐标轴标签
plt.title('Scatter Plot Example')
plt.xlabel('X')
plt.ylabel('Y')# 显示图表
plt.show()

在这里插入图片描述

五、柱状图(Bar Chart)

  柱状图用于比较不同类别或不同时间点的数据大小。

import matplotlib.pyplot as plt# 创建数据
categories = ['Category 1', 'Category 2', 'Category 3']
values = [10, 15, 7]# 绘制柱状图
plt.bar(categories, values)# 设置图表标题和坐标轴标签
plt.title('Bar Chart Example')
plt.xlabel('Categories')
plt.ylabel('Values')# 显示图表
plt.show()

在这里插入图片描述

六、箱线图(Box Plot)

  箱线图用于展示一组数据的分布情况,包括最小值、下四分位数、中位数、上四分位数和最大值。

  下面是一个简单的示例,说明如何绘制箱线图,其中特征名称作为X轴的标签:

import matplotlib.pyplot as plt
import numpy as np# 创建一些示例数据
np.random.seed(10)
data = {'Feature 1': np.random.normal(0, 1, 100),'Feature 2': np.random.normal(1, 1.5, 100),'Feature 3': np.random.normal(-1, 0.7, 100),'Feature 4': np.random.normal(2, 2, 100)
}# 提取数据列表和特征名称列表
values = list(data.values())
labels = list(data.keys())# 绘制箱线图
fig, ax = plt.subplots()
ax.boxplot(values, vert=True, patch_artist=True, labels=labels)# 设置图表标题
ax.set_title('Box Plot with Features as X-axis Labels')# 显示网格
ax.grid(True)# 显示图表
plt.show()

在这里插入图片描述

  设置vert=True(这是默认值,表示箱体是垂直的),并启用patch_artist=True以允许我们为箱体设置颜色。最后,我们设置了图表的标题,并显示了网格和图表。

  要绘制水平分布的箱线图(即箱体的长轴沿X轴方向),你需要对matplotlibboxplot函数进行一些调整。特别地,你需要设置vert参数为False,这样箱线图就会水平显示。下面是一个简单的示例,说明如何创建水平箱线图:

import matplotlib.pyplot as plt
import numpy as np# 创建一些示例数据
np.random.seed(10)
data = {'Feature 1': np.random.normal(0, 1, 100),'Feature 2': np.random.normal(1, 1.5, 100),'Feature 3': np.random.normal(-1, 0.7, 100),'Feature 4': np.random.normal(2, 2, 100)
}# 提取数据为列表
values = [data[feature] for feature in data]# 创建箱线图的位置(即X轴上的刻度位置)
positions = np.arange(len(data))# 绘制水平箱线图
fig, ax = plt.subplots()
ax.boxplot(values, vert=False, patch_artist=True, positions=positions, notch=False)# 设置箱线图的颜色
colors = ['b', 'g', 'r', 'c']
for patch, color in zip(ax.artists, colors):patch.set_facecolor(color)# 设置X轴和Y轴的标签
ax.set_xlabel('Value')
ax.set_ylabel('Features')
ax.set_yticklabels(data.keys())  # 设置Y轴刻度标签为特征的名称# 显示网格
ax.grid(True)# 显示图表
plt.show()

在这里插入图片描述

七、箱线图
  面积图(Area Chart)结合了折线图和面积图的特性,可以展示随时间或其他连续变量的数据变化趋势,并且通过堆叠面积来表示多个类别的数据总量及其各自贡献。

  下面是一个简单的示例代码,演示如何使用matplotlib绘制折线面积图:

import matplotlib.pyplot as plt
import numpy as np# 创建数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)# 绘制折线图和折线面积图
fig, ax = plt.subplots()
ax.plot(x, y1, label='sin(x)', color='blue', linewidth=2)
ax.plot(x, y2, label='cos(x)', color='red', linewidth=2)# 绘制y1的面积图
ax.fill_between(x, y1, where=y1>=0, color='lightblue', interpolate=True)
ax.fill_between(x, y1, where=y1<0, color='blue', interpolate=True)# 绘制y2的面积图,注意要调整y的起始值以避免重叠
ax.fill_between(x, y1+y2, where=(y1+y2)>=0, color='lightpink', interpolate=True)
ax.fill_between(x, y1+y2, where=(y1+y2)<0, color='pink', interpolate=True)# 设置图表标题和坐标轴标签
ax.set_title('Stacked Line Area Chart Example')
ax.set_xlabel('x')
ax.set_ylabel('y')# 添加图例
ax.legend()# 显示网格
ax.grid(True)# 显示图表
plt.show()

在这里插入图片描述

  在上面的代码中,我们首先定义了两个函数y1y2,它们分别代表sin(x)cos(x)的值。然后,我们使用plot函数绘制了这两个函数的折线图。接下来,我们使用fill_between函数来绘制每个函数的面积图。需要注意的是,为了避免面积图之间的重叠,我们在绘制y2的面积图时,将y的起始值调整为y1+y2

  最后,我们设置了图表的标题、坐标轴标签,并添加了图例。调用plt.show()函数来显示最终的折线面积图。

八、热力图

  为了更直观地绘制热力图,通常会使用seaborn库,它是基于matplotlib的一个更高级的统计绘图库。下面是一个使用seaborn绘制热力图的示例代码:

  首先,确保你已经安装了seaborn库。如果没有安装,可以使用pip进行安装:

pip install seaborn

  然后,你可以使用以下代码来绘制热力图:

import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np# 创建一个随机数据矩阵
data = np.random.rand(10, 12)# 创建一个热力图
heatmap = sns.heatmap(data, cmap='coolwarm', annot=True, fmt=".2f")# 设置X轴和Y轴的标签
heatmap.set_xticklabels(range(1, 13))  # 设置X轴刻度标签
heatmap.set_yticklabels(range(1, 11))  # 设置Y轴刻度标签# 设置图表的标题
plt.title('Heatmap Example')# 显示图表
plt.show()

在这里插入图片描述

  在这个例子中,我们首先导入了所需的库,然后创建了一个10x12的随机数据矩阵。接着,我们使用sns.heatmap函数来绘制热力图,其中data参数是我们要展示的数据,cmap参数定义了颜色映射(这里使用了’coolwarm’),annot=True表示在每个格子中显示数据值,fmt=".2f"定义了数值的格式。最后,我们设置了X轴和Y轴的刻度标签,并为图表添加了标题。

  如果你坚持使用matplotlib而不使用seaborn,你也可以通过绘制一系列带颜色的矩形来手动创建热力图,但这将比使用seaborn更加复杂。因此,推荐使用seaborn来绘制热力图,因为它提供了更简洁、更高级的接口。

  后面将继续介绍seaborn绘图库;因为seaborn并是一个绘图库,它与DataFrame对象有很好的集成。

九、折线图多功能的封装图
  下面封装的ineChartPlotter类,是为绘制不同种类的折线图,有draw_line_chart、draw_line_ndims_one_dim和draw_nline_chart方法,具体的作用参看图片即可了解;

import matplotlib.pyplot as plt  
import pandas as pd  
import numpy as npfrom pylab import mpl
mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei'] # 指定默认字体:解决plot不能显示中文问题
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题class LineChartPlotter:  def __init__(self):  self.fig = None  self.ax = None  def draw_line_chart(self, x, y, marker='o', label='工业', xlabel='Time', ylabel='Flow (累计进水流量)', title='南部污水厂累计进水流量(JSLL1/LJLL)'):  """在图上绘制一条折线图"""  self.fig, self.ax = plt.subplots()  self.ax.plot(x, y, marker=marker, label=label)  self.ax.set_xlabel(xlabel)  self.ax.set_ylabel(ylabel)  self.ax.legend()  self.ax.set_title(title)  self.ax.grid(True)  plt.show()  def draw_line_ndims_one_dim(self, data, xlabel='time', n=None, title='趋势对比图'):  """绘制一个n*1行的一个折线图,共用一个坐标轴"""  if n is None:  n = data.shape[1] - 1  self.fig, axs = plt.subplots(n, 1, figsize=(10, 15), sharex=True)  colors = plt.cm.viridis(np.linspace(0, 1, n))  for i, col in enumerate(data.columns[1:]):  if col != xlabel:  axs[i].plot(data[xlabel], data[col], color=colors[i], label=col)  axs[i].set_ylabel(f'({col})')  axs[i].legend()  axs[-1].set_xlabel('Time')  plt.tight_layout()  self.fig.suptitle(title)  plt.show()  def draw_nline_chart(self, data, xlabel='time', y_label='Flow', title='趋势对比图'):  """这一个图上绘制多个曲线的折线图"""  self.fig, self.ax = plt.subplots(figsize=(10, 5))  for column in data.columns[1:]:  self.ax.plot(data[xlabel], data[column], label=column)  self.ax.set_xlabel(xlabel)  self.ax.set_ylabel(y_label)  self.ax.set_title(title)  self.ax.legend()  max_flow = data[data.columns[1:]].max().max()  self.ax.set_ylim(0, max_flow)  self.ax.grid(True)  plt.show()  # 使用示例  
if __name__ == "__main__":  # 假设我们有一个DataFrame,包含时间和多个流量序列  data = pd.DataFrame({  'time': pd.date_range(start='2023-01-01', periods=100, freq='D'),  'flow1': np.random.rand(100),  'flow2': np.random.rand(100),  'flow3': np.random.rand(100)  })  # 创建绘图对象  plotter = LineChartPlotter()  # 绘制单个折线图  # plotter.draw_line_chart(data['time'], data['flow1'], label='Flow 1')  # # 绘制多个子图的折线图  # plotter.draw_line_ndims_one_dim(data)  # # 绘制单个图上的多个折线图  # plotter.draw_nline_chart(data)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  总之matplotlib是Python中一个功能强大的数据可视化库,它提供了丰富的绘图接口,可以帮助用户快速创建各种高质量的图形,如折线图、直方图、饼图、散点图、柱状图等。以下是使用matplotlib进行数据可视化的几个关键总结和优势:

  • 多样化的图形支持:
      matplotlib支持绘制各种常见的统计图形,包括折线图、柱状图、散点图等,也支持更复杂的图形,如热力图、等高线图等。这使得matplotlib能够应对各种数据分析和可视化的需求。

  • 高度可定制性:
      matplotlib提供了大量的参数和选项,用户可以根据需要自定义图形的各个方面,包括颜色、线条样式、字体、图例等。这使得用户能够根据自己的需求和审美创建出独一无二的图形。

  • 易于集成:
      matplotlib可以与Python中的其他库(如NumPy、Pandas等)无缝集成,使得数据预处理、数据分析和数据可视化可以在同一个环境中进行。这大大提高了数据分析和可视化的效率。

  • 交互式图形:
      matplotlib支持创建交互式图形,用户可以通过鼠标和键盘与图形进行交互,如缩放、平移、选择数据点等。这使得用户能够更深入地探索和分析数据。

  • 丰富的文档和社区支持:
      matplotlib拥有完善的文档和活跃的社区支持,用户可以通过官方文档、教程、示例代码以及社区论坛等途径获取帮助和解答问题。这使得学习和使用matplotlib变得更加容易。

  • 高质量的输出:
      matplotlib可以生成高质量的图形输出,支持多种文件格式(如PNG、PDF、SVG等),可以满足不同场景下的需求。同时,matplotlib还支持在图形中嵌入LaTeX数学公式,使得图形更具专业性和可读性。

  • 跨平台兼容性:
      matplotlib具有良好的跨平台兼容性,可以在Windows、Linux和Mac OS等操作系统上运行。这使得用户可以在不同的平台上使用matplotlib进行数据可视化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/8382.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

栈和队列的4道面试题【详细解析】【代码实现】

栈和队列的面试题 1.有效的括号&#xff08;栈实现&#xff09; 题目&#xff1a; 有效的括号 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必…

系统稳定性判定分析(二)----频域分析法相关辐角原理

文章目录 辐角原理&#xff08;即Cauchy原理&#xff09;引理分析辐角原理定义与证明补充知识 参考文献 为后续更好从频域层面分析控制系统的稳定性&#xff0c;本节首先介绍在后续分析中用到的辐角原理。 根据复变函数对数的定义&#xff0c;有 l n f ( z ) l n ∣ f ( z ) ∣…

rabbitmq集群搭建失败解决

1. 现象 1. 三台机器都已经修改hosts&#xff0c;各个节点ping节点名正常 2. erlang.cookie各节点值一样 执行下面步骤加入失败 rabbitmqctl stop_app # 停止rabbitmq服务 rabbitmqctl reset # 清空节点状态 rabbitmqctl join_cluster rabbitrabbitmq3 rabbitmqctl start_ap…

智能化采购管理系统助力光伏行业提高效率

光伏行业是指太阳能电池板的制造、安装和维护等相关产业&#xff0c;是新能源领域的重要组成部分。近年来&#xff0c;随着全球对于环保和可持续发展的重视&#xff0c;光伏行业进入全球化和智能化的新阶段。光伏企业开始加强国际合作&#xff0c;推广智能化技术&#xff0c;提…

【负载均衡在线OJ项目日记】编译与日志功能开发

目录 日志功能开发 常见的日志等级 日志功能代码 编译功能开发 创建子进程和程序替换 重定向 编译功能代码 日志功能开发 日志在软件开发和运维中起着至关重要的作用&#xff0c;目前我们不谈运维只谈软件开发&#xff1b;日志最大的作用就是用于故障排查和调试&#x…

【MM32F3270火龙果】keil安装MM32F3270

文章目录 前言一、下载pack包二、安装pack三、keil选择MM32F3270 cpu四、编译烧写总结 前言 在嵌入式系统开发中&#xff0c;选择适合的开发工具和微控制器平台至关重要。本文将介绍如何在Keil开发环境中安装和配置MM32F3270火龙果微控制器的开发环境。MM32F3270火龙果是一款功…

单链表式并查集

如果用暴力算法的话&#xff0c;那么会直接超时&#xff0c;我们要学会用并查集去记录下一个空闲的位置 #include<bits/stdc.h> using namespace std;const int N 100005;int n; int fa[N]; int a[N];int find(int x) {if (fa[x] x) {return x;}fa[x] find(fa[x]);re…

Etcd集群选举细节

日志级别 在 etcd 集群中&#xff0c;领导者选举是 Raft 协议的一部分&#xff0c;用于在当前领导者失败或无法与集群中的其他节点通信时选出新的领导者。以下是您提供的日志中与领导者选举相关的一些关键条目&#xff0c;以及对它们的详细说明&#xff1a; 节点失去领导者&am…

支付时,中国网联结算与中国银联结算的区别与联系

随着电子商务和互联网支付的快速发展&#xff0c;中国的支付清算市场也呈现出前所未有的繁荣景象。在这个大背景下&#xff0c;中国网联与中国银联作为两大支付清算机构&#xff0c;各自扮演着重要的角色。本文将对两者的区别和联系进行深入探讨&#xff0c;以期对读者有更全面…

网盘应用:桌面端界面欣赏,这个赛道容不下小玩家。

网盘&#xff08;Cloud Storage&#xff09;是一种云存储服务&#xff0c;允许用户在互联网上存储、管理和共享文件。它提供了一个在线的虚拟硬盘&#xff0c;用户可以通过网络将文件上传到云端&#xff0c;并随时随地访问和管理这些文件。 阿里云盘

办公类的Erp全流程管理系统有哪些靠谱的?

不知不觉&#xff0c;跟公司老板创业开始已经5年有余&#xff0c;感觉部门墙越来越厚。 财务跟业务经常开始漫长的对账过程&#xff0c;时不时HR也会牵涉进来&#xff0c;对销售团队进行考核结果确认&#xff0c;每个业务的催账任务也得最终落到实处。 老板早就对这样的状况深…

二、双fifo流水线操作——verilog练习与设计

文章目录 一、案例分析二、fifo_ctrl模块设计2.1 波形设计&#xff1a;2.2 代码实现2.2.1 fifo_ctrl2.2.2 顶层文件top_fifo_ctrl&#xff08;rx和tx模块省略&#xff09;2.2.3 仿真文件tb_fifo_ctrl 2.3波形仿真 一、案例分析 案例要求&#xff1a;写一个 fifo 控制器&#x…

我独自升级崛起加速器推荐 我独自升级免费加速器

近期&#xff0c;《我独自升级》这部动画凭借爆棚的人气&#xff0c;在各大平台上掀起了一阵观看热潮&#xff0c;其影响力不容小觑。借此时机&#xff0c;韩国游戏巨头网石集团敏捷响应&#xff0c;顺势推出了同名游戏《我独自升级&#xff1a;ARISE》&#xff0c;为粉丝们搭建…

【北京迅为】《iTOP-3588开发板快速烧写手册》-第9章ubuntu系统下升级固件

RK3588是一款低功耗、高性能的处理器&#xff0c;适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用&#xff0c;RK3588支持8K视频编解码&#xff0c;内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…

如何将pdf文件换成3d模型?---模大狮模型网

PDF文件是一种广泛用于文档传输和共享的格式&#xff0c;但在某些情况下&#xff0c;我们可能希望将其中的内容转换为更具交互性和视觉效果的3D模型。本文将介绍如何将PDF文件转换为3D模型&#xff0c;为您展示实现这一想象的步骤。 选择合适的PDF文件&#xff1a; 首先&#…

​「Python绘图」绘制五角星

python 绘制五角星 一、预期结果 二、核心代码 import turtle print("开始绘制五角星")# 设置画布尺寸 # screen turtle.Screen() # screen.setup(width500, height500)# 创建Turtle对象 pen turtle.Turtle() pen.shape("turtle")# 移动画笔到起始位置 …

为什么说RK3562可以碾压PX30?

在如今的科技市场中&#xff0c;处理器的性能直接决定了设备的运行速度和用户体验。今天&#xff0c;我们将对比瑞芯微旗下的两款处理器&#xff1a;PX30与RK3562。RK3562比PX30的性价比究竟高在哪里&#xff1f; PX30 瑞芯微PX30是一款高性能的四核应用处理器&#xff0c;专…

【excel】统计单元格内数字/字符串的数量

文章目录 一、问题二、步骤&#xff08;一&#xff09;将A1中的数字分解出来&#xff0c;在不同的单元格中显示&#xff08;二&#xff09;统计每个数字出现的个数&#xff08;三&#xff09;去重 三、尾巴 一、问题 单元格中有如下数值&#xff1a;12345234534545&#xff0c…

微信社交平台的未来展望,2024微信的重点发展趋势

WeChat社交媒体平台概述 截至2024年&#xff0c;WeChat的月活跃用户超过13亿&#xff0c;预计到今年年底&#xff0c;WeChat用户将超过16.7亿。当然&#xff0c;全球WeChat用户数量的数字表明&#xff0c;该应用程序在世界上最受欢迎的应用程序中排名第五&#xff08;仅次于Fa…

JAVA语言开发的:一套智慧校园平台主要由哪些系统组成、又有哪些前景呢?让我们一起来看一看

▶技术架构&#xff1a;后端&#xff1a;Java 框架&#xff1a;springboot 前端页面&#xff1a;vue 小程序&#xff1a;小程序原生开发 ▶电子班牌&#xff1a;Java Android 源码有演示&#xff0c;自主研发&#xff0c;官方正版授权&#xff0c;联系客服咨询&#xff0…