一 常见图形概念及使用
| 图表类型 | 适用场景 | 核心特点 |
|---|---|---|
| 柱状图(bar) | 比较不同类别数据(如各地区销售额对比)、时间序列分析(离散时间) | 高度反映数值大小,支持横向/纵向展示,可叠加分组 |
| 折线图(plot) | 连续数据趋势比较(适合展示随时间的变化,如股票价格走势、用户增长趋势)、多变量趋势比较 | 通过线段连接数据点,强调连续性变化 |
| 散点图(scatter) | 分析变量间相关性(如身高与体重关系),聚类分析初步观察 | 用点分布揭示数据模式,可添加回归线 |
| 饼图/环形图(pie) | 显示比例分布(如市场份额占比)、简单分类(不适合多分类情况) | 扇形面积代表比例,环形图可突出中心信息 |
| 热力图HeatMap() | 矩阵数据密度展示(如用户活跃时段分布、网页点击热区) | 颜色深浅映射数值大小,适合高维度数据聚类 |
| 箱线图(boxplot) | 数据分布统计(如收入中位数、异常值检测)、实验的分组之间结果比较 | 展示最小值、Q1、中位数、Q3、最大值,识别数据离散度 |
| 雷达图(polar) | 多维能力评估(如技能评分、产品属性对比) | 多边形顶点表示维度,面积反映综合能力 |
| 地理地图(pyecharts) | 空间数据可视化(如疫情分布、物流网络) | 结合经纬度坐标,支持气泡图、热力层叠加 |
选择原则:
明确目标: 趋势分析用折线图,占比用饼图,分布用散点/箱线图
简化维度: 避免过度复杂(如3D图表可能降低可读性)
颜色规范: 使用差异明显的色系,色盲友好(避免红绿对比)
热力图(Heatmap)
概念:热力图是一种以颜色深浅来表示数据大小的二维图形。颜色通常从浅到深表示数值从低到高,或者相反。
使用场景
二维数据展示 :用于展示二维数据矩阵中的数值分布情况。例如,展示不同时间段不同地区的销售额热度,或者基因表达矩阵中基因在不同样本中的表达水平。
密度展示 :可以用于展示数据点的密度分布。例如,在地理信息系统(GIS)中展示人口密度。
二、Matplotlib
(一)Matplotlib 简介
Matplotlib 是 Python 中最常用的绘图库之一,它提供了丰富的绘图功能,可以用于绘制各种静态、动态、交互式的二维和三维图形。
(二)基本图形绘制
import matplotlib.pyplot as plt
import numpy as np
# 生成数据
x = np.linspace(0, 10, 100)
y = np.sin(x)
# 创建画布与子图
fig, ax = plt.subplots(figsize=(8, 4))
# 绘制折线图
# linewidth(线宽)、markersize(标记大小)、alpha(透明度)
# fontsize 和 fontfamily 用于设置标题和标签的字体大小和字体系列。
ax.plot(x, y, label='sin(x)', color='blue', linestyle='--')
ax.set_title("Sine Wave") # 标题
ax.set_xlabel("X Axis") # X轴标签
ax.set_ylabel("Y Axis") # Y轴标签
ax.legend() # 显示图例
ax.grid(True, linestyle=':') # 网格线
plt.show() # 展示图形
多子图与样式控制
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(10, 6))
# 第一个子图:柱状图
axes[0,0].bar(['A', 'B', 'C'], [20, 35, 30], color=['#FF6B6B', '#4ECDC4', '#556270'])
axes[0,0].set_title("Bar Chart")
# 第二个子图:散点图
x = np.random.randn(100)
y = x + np.random.randn(100)*0.5
axes[0,1].scatter(x, y, alpha=0.6, edgecolors='w',cmap='viridis') # `cmap` 设置颜色映射表
axes[0,1].set_title("Scatter Plot")
# 散点图额外的代码,添加颜色条
cbar = plt.colorbar(scatter)
cbar.set_label('Color Intensity')
# 第三个子图:箱线图
data = [np.random.normal(0, std, 100) for std in range(1, 4)]
axes[1,0].boxplot(data, vert=True, patch_artist=True)
axes[1,0].set_xticklabels(['Group 1', 'Group 2', 'Group 3'])
# 第四个子图:填充图
x = np.arange(0, 4 * np.pi, 0.1)
y = np.cos(x)
axes[1,1].fill_between(x, y, where=(y > 0), color='green', alpha=0.3)
axes[1,1].set_title("Area Chart")
plt.tight_layout() # 自动调整子图间距
plt.savefig('output.png', dpi=300) # 保存高清图像
plt.show()
# 饼图
# sizes参数是各部分的数值,labels参数是各部分的标签,autopct用于设置显示百分比的格式,startangle 设置饼图的起始角度,colors设置各部分的颜色。
ax.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90, colors=['gold', 'lightcoral', 'lightskyblue', 'lightgreen'])
ax.axis('equal') # 确保是圆形
# 热力图
# cmap参数设置颜色映射表,interpolation设置插值方法。颜色条通过 `colorbar()` 添加,用于表示热力图中颜色对应的数值。
heatmap = ax.imshow(data, cmap='hot', interpolation='nearest')
cbar = plt.colorbar(heatmap)
cbar.set_label('Value')
ax.set_title('Heatmap Example')ax.set_xlabel('X-axis')ax.set_ylabel('Y-axis')
plt.show()
高级技巧
样式主题:通过plt.style.use('ggplot')切换预定义主题(如seaborn, bmh)
动画绘制:使用FuncAnimation创建动态图表
3D图形:
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z, cmap='viridis')
三、pyecharts
(一)pyecharts 简介
pyecharts 是一个基于 Echarts(一个由百度开源的数据可视化库)的 Python 包装库,它允许用户使用简单的 Python 代码生成交互式的可视化图表。pyecharts 提供了丰富的图表类型和高度的自定义能力,并且可以轻松地将图表集成到 Web 应用中。
(二)基本图形绘制
# 柱状图
from pyecharts.charts import Barfrom pyecharts
import options as opts
categories = ['A', 'B', 'C', 'D']
values = [23, 45, 12, 38]
bar = Bar()
bar.add_xaxis(categories) # 添加 X 轴的分类数据,
bar.add_yaxis('Values', values) # 添加 Y 轴的数值数据和系列名称
bar.set_global_opts(title_opts=opts.TitleOpts(title='Bar Chart Example')) # 设置全局变量
bar.render('bar_chart.html') # 将图表渲染为 HTML 文件,可以在浏览器中打开查看
# 折线图
x = ['Jan', 'Feb', 'Mar', 'Apr', 'May']
y = [23, 45, 32, 67, 53]
line = Line()
line.add_xaxis(x)
line.add_yaxis('Monthly Data', y) # 添加数据
line.set_global_opts(title_opts=opts.TitleOpts(title='Line Chart Example'), xaxis_opts=opts.AxisOpts(name='Month'), yaxis_opts=opts.AxisOpts(name='Value')) # 设置全局变量
line.render('line_chart.html') # 渲染图表
# 饼图
labels = ['Product A', 'Product B', 'Product C', 'Product D']
values = [15, 30, 25, 30]
pie = Pie()
pie.add('', [list(z) for z in zip(labels, values)])
pie.set_global_opts(title_opts=opts.TitleOpts(title='Pie Chart Example'))
pie.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c} ({d}%)"))
pie.render('pie_chart.html')
(三)复杂图表示例
地理热力图
from pyecharts.charts import Geo
from pyecharts.globals import ChartType
data = [("北京", 100), ("上海", 88), ("广州", 66), ("深圳", 55), ("成都", 44)]
geo = (
Geo()
.add_schema(maptype="china")
.add(
"城市热度",
data_pair=data,
type_=ChartType.HEATMAP,
blur_size=20,
)
.set_global_opts(
visualmap_opts=opts.VisualMapOpts(max_=100),
title_opts=opts.TitleOpts(title="中国主要城市热度分布"),
)
)
geo.render("geo_heatmap.html")
2. 动态仪表盘
from pyecharts.charts import Gauge
gauge = (
Gauge()
.add(
series_name="业务指标",
data_pair=[("完成率", 78.5)],
axisline_opts=opts.AxisLineOpts(
linestyle_opts=opts.LineStyleOpts(
color=[(0.3, "#67e0e3"), (0.7, "#37a2da"), (1, "#fd666d")], width=30
)
),
)
.set_global_opts(
title_opts=opts.TitleOpts(title="项目进度监控"),
legend_opts=opts.LegendOpts(is_show=False),
)
)
gauge.render("gauge.html")
(四) Matplotlib VS pyecharts
| 维度 | Matplotlib | pyecharts |
|---|---|---|
| 渲染方式 | 静态图像(PNG/SVG/PDF) | 动态HTML(支持缩放、悬停交互) |
| 学习曲线 | 陡峭(需掌握Figure/Axes对象体系) | 平缓(链式调用,配置项直观) |
| 交互能力 | 有限(依赖GUI后端) | 强大(内置工具栏、数据筛选) |
| 应用场景 | 科研论文、印刷报告 | 网页看板、实时数据监控 |
| 扩展性 | 支持自定义Artist对象 | 依赖ECharts生态(可扩展主题) |
(五)最佳实践与注意事项
数据清洗优先:可视化前确保数据无缺失、异常值
图表一致性:同一报告中保持颜色、字体风格统一
交互设计:
在pyecharts中添加TooltipOpts优化提示信息
使用DataZoom控件处理大数据集缩放
性能优化:
Matplotlib大数据绘图时优先使用rasterized=True
pyecharts分页加载超过万级数据点
错误示例修正:
避免饼图超过7个分类(改用条形图)
折线图时间轴不均匀时使用set_xticks手动校准
四 总结
数据可视化是数据分析的“最后一公里”,合理选择工具与图表类型能显著提升信息传达效率:
Matplotlib:适合精细化控制的静态图表,满足学术出版要求
pyecharts:快速构建交互式看板,适配现代Web应用掌握两者结合使用(如用Matplotlib做探索性分析,pyecharts生成最终报告),可覆盖从数据分析到展示的全流程需求。




没有回复内容