跳到主要内容
Python 数据分析常用图表绘制指南 | 极客日志
Python AI 算法
Python 数据分析常用图表绘制指南 综述由AI生成 Python 数据分析中常用的图表类型,包括折线图、直方图、条形图、饼图、箱线图、热力图、散点图、雷达图、二元变量分布、面积图和六边形图。通过对比 Matplotlib 和 Seaborn 两种库的用法,提供了详细的代码示例与适用场景分析,帮助读者根据数据特征选择合适的可视化方案,并涵盖了从基础绘图到高级分析的完整流程。
www 发布于 2025/2/7 更新于 2026/6/4 24 浏览Python 数据分析常用图表绘制指南
在数据分析与可视化领域,选择合适的图表能够直观地展示数据特征、趋势及分布。本文详细介绍了 Python 中常用的 12 种图表类型,对比了 Matplotlib 和 Seaborn 两种主流库的用法,并提供完整的代码示例与适用场景分析。
环境准备
默认所有操作均基于以下库:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
plt.style.use('seaborn-v0_8' )
sns.set_theme(style="whitegrid" )
1. 折线图 (Line Plot)
折线图主要用于展示数据随时间变化的趋势,适合连续型数据的序列分析。
代码示例
x = [2010 , 2011 , 2012 , 2013 , 2014 , 2015 , 2016 , 2017 , 2018 , 2019 ]
y = [5 , 3 , 6 , 20 , 17 , 16 , 19 , 30 , 32 , 35 ]
plt.figure(figsize=(10 , 6 ))
plt.plot(x, y, marker='o' , linestyle='-' , color='b' )
plt.title('Yearly Trend' )
plt.xlabel('Year' )
plt.ylabel('Value' )
plt.grid(True )
plt.show()
df = pd.DataFrame({ : x, : y})
plt.figure(figsize=( , ))
sns.lineplot(data=df, x= , y= , marker= )
plt.title( )
plt.show()
'x'
'y'
10
6
'x'
'y'
'o'
'Seaborn Line Plot'
注意事项
适用于时间序列或有序分类数据。
可通过 linestyle 调整线条样式,marker 添加数据点标记。
2. 直方图 (Histogram) 直方图用于展示连续变量的频率分布,将横坐标划分为若干区间,用矩形条表示各区间内的数值频数。
代码示例 a = np.random.randn(1000 )
s = pd.Series(a)
plt.hist(s, bins=30 , edgecolor='black' , alpha=0.7 )
plt.title('Distribution Histogram' )
plt.show()
plt.figure(figsize=(10 , 6 ))
sns.histplot(s, kde=False , bins=30 , color='skyblue' )
plt.title('Seaborn Histogram' )
plt.show()
sns.histplot(s, kde=True , bins=30 , color='salmon' )
plt.show()
注意事项
bins 参数控制分组数量,影响分布细节。
结合 KDE(核密度估计)可观察平滑的概率密度曲线。
3. 垂直条形图 (Bar Chart) 条形图用于比较不同类别的数据大小,长条长度代表频数或数值,宽度代表类别。
代码示例 x = ['Cat1' , 'Cat2' , 'Cat3' , 'Cat4' , 'Cat5' ]
y = [5 , 4 , 8 , 12 , 7 ]
plt.bar(x, y, color='steelblue' )
plt.title('Vertical Bar Chart' )
plt.ylabel('Frequency' )
plt.show()
df_bar = pd.DataFrame({'Category' : x, 'Value' : y})
plt.figure(figsize=(10 , 6 ))
sns.barplot(data=df_bar, x='Category' , y='Value' , palette='viridis' )
plt.title('Seaborn Bar Chart' )
plt.show()
注意事项
适用于离散分类数据。
Seaborn 支持自动置信区间显示(通过 ci 参数)。
4. 水平条形图 (Horizontal Bar Chart)
代码示例 plt.barh(x, y, color='coral' )
plt.title('Horizontal Bar Chart' )
plt.xlabel('Frequency' )
plt.show()
注意事项
使用 barh 函数实现。
适合类别标签较长的情况。
5. 饼图 (Pie Chart) 饼图展示部分占整体的比例关系,但仅适用于类别较少且差异明显的场景。
代码示例 nums = [25 , 37 , 33 , 37 , 6 ]
labels = ['High-school' ,'Bachelor' ,'Master' ,'Ph.d' , 'Others' ]
plt.figure(figsize=(8 , 8 ))
plt.pie(nums, labels=labels, autopct='%1.1f%%' , startangle=90 )
plt.title('Education Level Distribution' )
plt.axis('equal' )
plt.show()
注意事项
6. 箱线图 (Box Plot) 箱线图展示数据的五数概括(最小值、下四分位数、中位数、上四分位数、最大值),用于分析数据的离散程度和异常值。
代码示例
data = np.random.normal(size=(10 , 4 ))
lables = ['A' , 'B' , 'C' , 'D' ]
plt.figure(figsize=(10 , 6 ))
plt.boxplot(data, labels=lables, patch_artist=True )
plt.title('Matplotlib Boxplot' )
plt.show()
df_box = pd.DataFrame(data, columns=lables)
plt.figure(figsize=(10 , 6 ))
sns.boxplot(data=df_box)
plt.title('Seaborn Boxplot' )
plt.show()
注意事项
箱体范围覆盖中间 50% 数据。
须点通常表示异常值。
7. 热力图 (Heatmap) 热力图通过颜色深浅表示矩阵元素的大小,适合展示相关性矩阵或二维数据分布。
代码示例
data = np.array([[1 , 2 , 3 ], [4 , 5 , 6 ], [7 , 8 , 9 ]])
ax = sns.heatmap(data, annot=True , cmap='YlGnBu' )
plt.title('Simple Heatmap' )
plt.show()
flights = sns.load_dataset("flights" )
data_flights = flights.pivot('year' , 'month' , 'passengers' )
plt.figure(figsize=(12 , 8 ))
sns.heatmap(data_flights, annot=False , cmap='coolwarm' )
plt.title('Passenger Volume Heatmap' )
plt.show()
注意事项
颜色映射 (cmap) 影响视觉效果。
annot=True 可在单元格显示数值。
8. 散点图 (Scatter Plot) 散点图展示两个变量之间的关系,是探索相关性最常用的工具。
代码示例 N = 1000
x = np.random.randn(N)
y = np.random.randn(N)
plt.scatter(x, y, marker='x' , alpha=0.5 )
plt.title('Scatter Plot' )
plt.show()
df_scatter = pd.DataFrame({'x' : x, 'y' : y})
plt.figure(figsize=(10 , 6 ))
sns.jointplot(x='x' , y='y' , data=df_scatter, kind='scatter' )
plt.show()
注意事项
点密度反映数据集中区域。
可结合回归线分析线性关系。
9. 雷达图 (Radar Chart) 雷达图用于显示多变量数据,适合评估对象在多个维度上的表现。
代码示例 labels = np.array(["推进" , "KDA" , "生存" , "团战" , "发育" , "输出" ])
stats = [83 , 61 , 95 , 67 , 76 , 88 ]
angles = np.linspace(0 , 2 * np.pi, len (labels), endpoint=False )
stats = np.concatenate((stats, [stats[0 ]]))
angles = np.concatenate((angles, [angles[0 ]]))
fig = plt.figure(figsize=(8 , 8 ))
ax = fig.add_subplot(111 , polar=True )
ax.plot(angles, stats, 'o-' , linewidth=2 )
ax.fill(angles, stats, alpha=0.25 )
ax.set_thetagrids(angles * 180 / np.pi, labels, fontproperties="SimHei" )
plt.title('Performance Radar Chart' )
plt.show()
注意事项
需处理中文字体显示问题。
闭合路径需重复第一个点。
10. 二元变量分布 (Joint Plot) 联合分布图同时展示两个变量的散点分布及其边缘分布。
代码示例 tips = sns.load_dataset("tips" )
sns.jointplot(x="total_bill" , y="tip" , data=tips, kind='scatter' )
plt.show()
sns.jointplot(x="total_bill" , y="tip" , data=tips, kind='kde' )
plt.show()
sns.jointplot(x="total_bill" , y="tip" , data=tips, kind='hex' )
plt.show()
注意事项
kind 参数决定子图类型。
适合分析变量间的相关性与分布形态。
11. 面积图 (Area Chart) 面积图强调数量随时间的变化程度,堆积面积图可显示部分与整体的关系。
代码示例 df_area = pd.DataFrame(
np.random.rand(10 , 4 ),
columns=['a' , 'b' , 'c' , 'd' ])
df_area.plot.area(figsize=(10 , 6 ))
plt.title('Stacked Area Chart' )
plt.show()
df_area.plot.area(stacked=False , figsize=(10 , 6 ))
plt.title('Non-stacked Area Chart' )
plt.show()
注意事项
堆积图需注意总量是否恒定。
适合展示趋势和构成变化。
12. 六边形图 (Hexbin Plot) 六边形图将空间中的点聚合成六边形,根据内部点数上色,适合大数据量散点图的降维展示。
代码示例 df_hex = pd.DataFrame(
np.random.randn(1000 , 2 ),
columns=['a' , 'b' ])
df_hex['b' ] = df_hex['b' ] + np.arange(1000 )
plt.figure(figsize=(8 , 8 ))
df_hex.plot.hexbin(x='a' , y='b' , gridsize=25 , cmap='Blues' )
plt.title('Hexbin Plot' )
plt.colorbar(label='Count' )
plt.show()
注意事项
gridsize 控制六边形数量。
比散点图更适合百万级数据。
总结与选型建议 选择合适的图表是数据分析的关键步骤。以下是常见场景的选型参考:
数据类型 推荐图表 时间序列趋势 折线图、面积图 类别比较 条形图、柱状图 占比关系 饼图、环形图 分布形态 直方图、箱线图、KDE 变量关系 散点图、气泡图、热力图 多维数据 雷达图、平行坐标图
掌握这些基础图表的绘制方法,能够帮助你更高效地完成数据洞察工作。在实际项目中,建议先明确分析目标,再选择最合适的可视化方案。
相关免费在线工具 加密/解密文本 使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
RSA密钥对生成器 生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
Mermaid 预览与可视化编辑 基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
随机西班牙地址生成器 随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online
Gemini 图片去水印 基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online
curl 转代码 解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online