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,一经查实,立即删除!