Matplotlib常见画图工具

news/2025/10/24 20:46:32/文章来源:https://www.cnblogs.com/dyt-0812/p/19162254

View Post

Matplotlib常见画图工具

一、Matplotlib核心基础

在开始绘图前,需掌握以下基础框架,几乎所有图表都基于此扩展:

点击查看代码
# 1. 导入库
import matplotlib.pyplot as plt
import numpy as np  # 用于生成示例数据# 2. 设置中文显示(避免中文乱码,关键!)
plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"]  # 支持中文
plt.rcParams["axes.unicode_minus"] = False  # 解决负号显示问题# 3. 创建画布与子图
# 方式1:单图
plt.figure(figsize=(8, 5))  # 画布大小(宽8英寸,高5英寸)# 方式2:多子图(2行1列,第1个子图)
# fig, ax = plt.subplots(2, 1, figsize=(8, 8))  # fig是画布,ax是子图数组# 4. 绘图(以简单折线图为例)
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
plt.plot(x, y, label="示例数据")  # label用于图例# 5. 添加标签与标题
plt.xlabel("X轴名称")
plt.ylabel("Y轴名称")
plt.title("图表标题")# 6. 添加图例、网格
plt.legend()  # 显示图例(需在plot中设置label)
plt.grid(linestyle="--", alpha=0.7)  # 网格线(虚线,透明度0.7)# 7. 显示或保存图表
plt.tight_layout()  # 自动调整布局,避免元素重叠
plt.show()  # 显示图表
# plt.savefig("图表名称.png", dpi=300)  # 保存为图片(dpi设为300保证清晰度)

二、常见图表代码示例

1、柱状图(对比类别数据)

场景:比较不同产品的销量,各部门业绩等。

点击查看代码
import matplotlib.pyplot as plt# 数据
products = ["产品A", "产品B", "产品C", "产品D"]
sales = [350, 520, 280, 410]# 绘图
plt.figure(figsize=(8, 5))
plt.bar(products, sales, color=["#5499C7", "#58D68D", "#F4D03F", "#EC7063"])  # 自定义颜色# 优化细节
plt.xlabel("产品类型")
plt.ylabel("销量(件)")
plt.title("2023年Q1各产品销量对比")
plt.grid(axis="y", linestyle="--", alpha=0.5)  # 仅显示Y轴网格# 在柱子顶部添加数值标签
for i, v in enumerate(sales):plt.text(i, v + 10, str(v), ha="center")  # ha="center" 水平居中plt.tight_layout()
plt.show()

2、折线图(展示趋势变化)

场景:跟踪时间序列数据,如月度用户增长、股价波动等。

点击查看代码
import matplotlib.pyplot as plt
import numpy as np# 数据(1-12月)
months = np.arange(1, 13)
user_growth = [1200, 1500, 1800, 2200, 2800, 3500, 4200, 4800, 5200, 5800, 6500, 7200]# 绘图
plt.figure(figsize=(10, 6))
plt.plot(months, user_growth, marker="o", linestyle="-", color="#3498DB", linewidth=2, markersize=6)# 优化细节
plt.xlabel("月份")
plt.ylabel("用户数(人)")
plt.title("2023年平台用户增长趋势")
plt.xticks(months)  # X轴刻度显示1-12月
plt.grid(linestyle="--", alpha=0.6)# 突出关键节点(如6月)
plt.annotate("半年节点", xy=(6, 3500), xytext=(8, 3000),arrowprops=dict(arrowstyle="->", color="gray"),fontsize=10)plt.tight_layout()
plt.show()

3、散点图(分析变量相关性)

场景:研究两个变量的关系,如广告投入与销售额、身高与体重等。

点击查看代码
import matplotlib.pyplot as plt
import numpy as np# 生成模拟数据(广告投入与销售额,正相关)
np.random.seed(42)  # 固定随机数,结果可复现
ad_cost = np.random.randint(100, 1000, 50)  # 广告投入:100-1000元
sales = 1.2 * ad_cost + np.random.randint(-100, 100, 50)  # 销售额(带随机波动)# 绘图
plt.figure(figsize=(8, 6))
plt.scatter(ad_cost, sales, c="orange", alpha=0.7, edgecolors="black")  # alpha控制透明度# 优化细节
plt.xlabel("广告投入(元)")
plt.ylabel("销售额(元)")
plt.title("广告投入与销售额相关性分析")
plt.grid(linestyle="--", alpha=0.5)# 添加趋势线(用多项式拟合)
z = np.polyfit(ad_cost, sales, 1)  # 一次多项式(直线)
p = np.poly1d(z)
plt.plot(ad_cost, p(ad_cost), "r--")  # 红色虚线趋势线plt.tight_layout()
plt.show()

4、饼图(展示占比关系)

场景:显示各部分占总体的比例,如市场份额、预算分配。

点击查看代码
import matplotlib.pyplot as plt# 数据
channels = ["直接访问", "搜索引擎", "社交媒体", "外部链接"]
traffic = [15, 40, 25, 20]  # 占比(总和100)# 绘图
plt.figure(figsize=(7, 7))
# explode:突出某一部分(这里突出“搜索引擎”)
explode = (0, 0.1, 0, 0)
plt.pie(traffic, explode=explode, labels=channels, autopct="%1.1f%%",colors=["#F5B041", "#3498DB", "#2ECC71", "#9B59B6"],startangle=90, wedgeprops={"edgecolor": "white"})  # startangle:起始角度(90度为顶部)# 优化为正圆形(默认可能椭圆)
plt.axis("equal")
plt.title("网站流量来源占比")plt.tight_layout()
plt.show()

5、直方图(看“数据分布”)

适合展示“数据在各个区间的分布情况”

点击查看代码
import matplotlib.pyplot as plt
import numpy as np# 生成模拟数据:500个同学的身高(均值170cm,标准差5cm的正态分布)
heights = np.random.normal(170, 5, 500)# 画直方图:data是数据,bins是分多少个区间(比如20个“身高段”)
plt.hist(heights, bins=20, edgecolor='black')  # edgecolor给柱子加边框,更清晰
plt.xlabel('身高(cm)')
plt.ylabel('人数')
plt.title('班级同学身高分布')
plt.show()

6、箱线图(看“数据五件套”)

适合对比多组数据的“集中趋势和离散程度”

点击查看代码
import matplotlib.pyplot as plt
import numpy as np# 模拟3个班的成绩(各50人)
class1 = np.random.normal(75, 10, 50)  # 均值75,波动10
class2 = np.random.normal(82, 8, 50)   # 均值82,波动8
class3 = np.random.normal(68, 12, 50)  # 均值68,波动12# 画箱线图:传入多组数据(用列表包起来)
plt.boxplot([class1, class2, class3], labels=['一班', '二班', '三班'])  # labels是组名
plt.ylabel('分数')
plt.title('三个班级数学成绩对比')
plt.show()

7、热力图(看矩阵相关性)

适合展示“二维数据的强弱关系”

点击查看代码
import matplotlib.pyplot as plt
import numpy as np# 模拟数据:5门学科的相关性矩阵(值越大,相关性越强)
corr = np.array([[1.0, 0.8, 0.6, 0.3, 0.2],[0.8, 1.0, 0.7, 0.4, 0.1],[0.6, 0.7, 1.0, 0.5, 0.3],[0.3, 0.4, 0.5, 1.0, 0.6],[0.2, 0.1, 0.3, 0.6, 1.0]
])
subjects = ['数学', '物理', '化学', '生物', '语文']  # 学科名# 画热力图:cmap是颜色方案(比如'Blues'蓝色越深值越大)
plt.imshow(corr, cmap='Blues')
# 加颜色条(右侧的条,告诉你颜色对应的值)
plt.colorbar(label='相关性强度')
# 标上学科名(横轴和纵轴)
plt.xticks(range(5), subjects, rotation=45)  # rotation=45让文字旋转,防重叠
plt.yticks(range(5), subjects)
plt.title('学科成绩相关性热力图')
plt.show()

三、Matplotlib优化技巧

1、颜色选择

  • 类别对比用差异明显的颜色
  • 数值渐变用同色系

2、减少冗余元素

  • 去除不必要的边框
  • 简化刻度

3、批量处理多子图

  • 用subplots处理多图,统一格式:
点击查看代码
fig, axes = plt.subplots(2, 2, figsize=(12, 10))  # 2x2子图
axes[0, 0].bar(...)  # 第1行第1列子图
axes[0, 1].plot(...) # 第1行第2列子图
fig.suptitle("总标题", fontsize=15)  # 全局标题

4、结合Pandas快速绘图

  • 若数据是DataFrame,可直接调用plot方法:
点击查看代码
import pandas as pd
df = pd.DataFrame({"月份": months, "用户数": user_growth})
df.plot(x="月份", y="用户数", kind="line", figsize=(10, 6))  # 直接生成折线图

四、功能表

函数名 用途 一句话记住
plt.plot() 折线图 看趋势(比如成绩变化)
plt.bar() 柱状图 比大小(比如不同班级的平均分)
plt.scatter() 散点图 看关系(比如身高和体重是否相关)
plt.pie() 饼图 看占比(比如各部门人数占比)
plt.hist() 直方图 看分布(比如年龄分布)
plt.boxplot() 箱线图 比整体(比如多组数据的中位数 / 波动)
plt.imshow() 热力图(配合colorbar 看矩阵强弱(比如相关性)

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

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

相关文章

[python] 代码性能分析工具line_profiler使用指北

代码分析能够评估各部分代码的时间消耗,即进行时间复杂度分析。通过这一过程,我们可以识别影响整体运行效率的关键部分,从而更高效地利用底层计算资源。此外,代码分析也可用于评估内存使用情况,即空间复杂度,以优…

react的diff算法

这个算法用来比较虚拟dom和真实dom,从而最小化真实dom的更新 本质上是对两颗Fiber树的对比 (在Vue中是对旧VDOM树与新VDOM树的对比) 在不剪枝的情况下,时间复杂度接近O(n^3)基于最长公共子序列 (LCS) 的朴素计算为…

LLM学习记录DAY11

📘今日学习总结 tokenization分词算法 BPE分词(Byte-Pair Encoding)BPE 算法从一组基本符号(例如字母和边界字符)开始,迭代地寻找语料库中的两个相邻词元,并将它们替换为新的词元,这一过程被称为合并。 合并的…

ABP - 当前用户 [ICurrentUser、CurrentUser]

当前用户(Current User) 核心辅助类:ICurrentUser:获取当前登录用户信息(ID、用户名、角色等)。 CurrentUser:静态快捷访问(需在请求上下文内)。在ABP框架中,ICurrentUser和CurrentUser用于获取当前登录用户…

轮次检测模型 VoTurn-80M 开源,多模态融合架构;OpenAI 收购桌面助手 Sky:实时识别屏幕自然语言交互丨日报

开发者朋友们大家好:这里是 「RTE 开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的技术」、「有亮点的产品」、「有思考的文章」、「有态度…

ABP - 依赖注入和属性注入

一、依赖注入(Dependency Injection) 核心辅助类:IServiceCollection:扩展方法(如AddTransient、AddScoped)。 DependencyAttribute:标记注入生命周期(Transient/Scoped/Singleton)。 IIocResolver:手动解析…

ABP vNext 框架功能模块 - 依赖注入和属性注入

一、依赖注入(Dependency Injection) 核心辅助类:IServiceCollection:扩展方法(如AddTransient、AddScoped)。 DependencyAttribute:标记注入生命周期(Transient/Scoped/Singleton)。 IIocResolver:手动解析…

SAP维护汇率的关键Tcode

Tcode: OB08 维护汇率Tcode:OBBS 维护汇率的折算比率☆ No matter how much you change, you still have to pay the price for the things youve done.

幂函数

观察幂函数图像结论: 所有的幂函数都过1,1点,幂函数在第一象限必有图像。 a为负数时,不过0,0点,其余都有0,0点。 一、画函数用结论,a<0,单调递减,a>0,单调递增。 二、0<a<1之间,增的缓,a>1,…

ABP vNext 框架功能模块 - 动态API(Dynamic API)[RemoteServiceAttribute | DynamicApiControllerBuilder]

动态API(Dynamic API) 核心辅助类:DynamicApiControllerBuilder:动态生成API控制器。 RemoteServiceAttribute:标记类/方法为远程服务(自动暴露API)。在ABP框架中,DynamicApiControllerBuilder和RemoteService…

第4天(中等题 滑动窗口、哈希表)

打卡第四天 两道中等题哈希表记录元素频率:哈希表程序表示:滑动窗口+哈希表优化算法耗时≈一小时 明天继续 小tips:不小心删除可以用 Ctrl+Z 撤回刚刚消除的代码/文字

ABP vNext 框架功能模块 - 动态API(Dynamic API)

** 动态API(Dynamic API)** 核心辅助类:DynamicApiControllerBuilder:动态生成API控制器。 RemoteServiceAttribute:标记类/方法为远程服务(自动暴露API)。在ABP框架中,DynamicApiControllerBuilder和RemoteSe…

ABP vNext 框架功能模块 - 模块化(Modularity)

模块化(Modularity) 核心辅助类:AbpModule:所有模块的基类,定义模块生命周期方法。 DependsOnAttribute:声明模块依赖关系。 ModuleInitializer:模块初始化器(自动生成)。 IModuleContainer:模块容器,用于运…

ABP vNext 框架功能模块

以下是ABP框架中各核心功能的辅助类及示例说明,涵盖模块化、依赖注入、ORM集成等关键特性: 一. 模块化(Modularity) 核心辅助类:AbpModule:所有模块的基类,定义模块生命周期方法。 DependsOnAttribute:声明模块…

题解:P14299 [JOI2023 预选赛 R2] 填充 / Painting

\(\displaystyle \large {题目传送门}\) 题面 给定一个一个 H*W 的矩形 , 每个坐标上有一个颜色 , 上下左右相邻的同颜色节点可以形成连通块 。 你可以对任意一个连通块 , 进行一次并仅有一次的染色 , 求新形成的连…

Devolutions Server权限提升漏洞分析与修复指南

本文详细分析了CVE-2025-11957漏洞,该漏洞存在于Devolutions Server 2025.2.12.0及更早版本中,由于临时访问工作流程的授权机制存在缺陷,允许经过身份验证的基本用户通过精心构造的API请求自我批准或批准其他用户的…

AI股票预测分析报告 - 2025年10月24日 - 20:08:50

AI股票预测分析报告 - 2025年10月24日body { font-family: "Microsoft YaHei", "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; line-height: 1.6; color: rgba(51, 51, 51, 1); max-width: 1…

在 Astro 博客中优雅使用 51.la 统计数据

在 Astro 博客中使用 51.la 免费流量统计,通过解析 widget JS 自行渲染访问数据,既保留统计功能,又可自定义展示,让你直观了解博客访客情况作为老牌网站流量统计服务商,51.la 提供每月高达 1000 万次的免费统计额…

申威服务器安装Java11(swjdk-11u-9.ky10.sw_64.rpm)详细操作步骤(附安装包)

申威服务器安装Java11(swjdk-11u-9.ky10.sw_64.rpm)详细操作步骤(附安装包)​这是申威架构(国产芯片,常见于Kylin V10等国产系统)专用的 ​Java 11 版本(RPM安装包)​,包名为 java-11.0.7-swjdk-11u-9.ky10.…