
Python作为数据科学领域的主流语言,提供了丰富的数据可视化工具库,如Matplotlib和Seaborn等。本文将系统介绍Python中10种最常用的数据可视化方法,包括它们的适用场景、绘制方法以及如何通过代码实现。帮助掌握Python数据可视化使数据分析结果更加清晰有力。
根据数据之间的关系特性可以将可视化视图划分为四大类型:比较、联系、构成和分布。
比较类视图:用于展示数据间各类别的关系或随时间的变化趋势,如折线图和条形图;
联系类视图:揭示两个或多个变量之间的关联性,散点图和热力图是典型代表;
构成类视图:呈现各部分占整体的比例关系,饼图是其中最广为人知的例子;
分布类视图:专注于展示单个或多个变量的分布状况,直方图和箱线图在此类中扮演重要角色。
从变量数量角度,可视化又可分为单变量分析和多变量分析。
单变量分析:一次只关注一个变量的特征,如分析“身高”这一变量的分布情况;
多变量分析:则同时考察两个及以上变量的关系,例如在同一图中展示“身高”和“年龄”的关系,以探究两者之间可能存在的关联模式。
Python中实现这些可视化,主要依赖以下工具:
在使用之前需要导入如下库并配置基本参数:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# 设置中文字体和样式
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
sns.set_theme(style="whitegrid") # 使用 seaborn 风格替代 plt.style.use('seaborn')比较类可视化方法主要用于展示不同类别数据间的差异或数据随时间的变化趋势,它们是数据分析中最常用的图表类型之一。通过比较类图表,可以直观地识别出数据中的高低、快慢、增减等对比关系,为决策提供直观依据。三种最常用的比较类可视化方法:折线图、条形图和箱线图。
折线图是展示数据随时间变化趋势的首选工具,特别适用于连续型数据,能够清晰显示数据的上升、下降、波动或周期性等特征。在Python中,我们可以使用Matplotlib的 plot() 函数或Seaborn的 lineplot() 函数来创建折线图。折线图的一个关键优势在于能够同时展示多条折线,方便比较不同类别或组别随时间的变化模式。以下是创建折线图的示例代码:
# 数据准备
x = [2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019]
y = [5, 3, 6, 20, 17, 16, 19, 30, 32, 35]
# 使用Matplotlib画折线图
plt.figure(figsize=(10, 5))
plt.plot(x, y, marker='o', linestyle='--', color='b', label='销售额')
plt.title('年度销售额变化趋势', fontsize=15)
plt.xlabel('年份')
plt.ylabel('销售额(百万)')
plt.legend()
plt.grid(True)
plt.show()代码运行结果:

条形图更适合比较不同类别之间的数值差异,特别是当类别名称较长或类别数量较多时。条形图通过长短不一的条形来表示各类别的大小关系,使比较结果一目了然。与直方图不同,条形图的x轴代表类别而非数值范围。在Python中,我们可以使用Matplotlib的 bar() 函数或Seaborn的 barplot() 函数创建条形图。Seaborn的条形图还能自动计算统计量并添加误差线,展示数据的置信区间。下面是条形图的实现示例:
# 数据准备
categories = ['电子产品', '服装', '食品', '家居', '图书']
values = [45, 37, 29, 52, 18]
# 使用Seaborn画条形图
plt.figure(figsize=(10, 5))
sns.barplot(x=categories, y=values, palette="Blues_d")
plt.title('各类产品销售额比较', fontsize=15)
plt.xlabel('产品类别')
plt.ylabel('销售额(百万)')
plt.show()代码运行结果:

箱线图(又称盒须图)是一种显示数据分布特征的强大工具,特别适用于比较不同组别数据的分布差异。箱线图通过五个统计量(最小值、第一四分位数Q1、中位数、第三四分位数Q3和最大值)来概括数据,并能标识出潜在的异常值。这使得箱线图在比较多个分布时非常高效,可以直观看出数据的分散程度、偏态以及异常值情况。Python中使用Matplotlib的 boxplot() 函数或Seaborn的 boxplot() 函数创建箱线图:
# 数据准备
data = np.random.normal(size=(100, 4))
labels = ['组A', '组B', '组C', '组D']
# 使用Seaborn画箱线图
plt.figure(figsize=(10, 6))
sns.boxplot(data=data, palette="Set2")
plt.xticks(np.arange(4), labels)
plt.title('各组数据分布比较', fontsize=15)
plt.ylabel('观测值')
plt.show()代码运行结果:

折线图强调趋势,条形图突出类别比较,而箱线图则专注于分布特征的对比。在实际数据分析中,这三种图表常常结合使用,从不同角度全面揭示数据中的比较关系。
联系类可视化方法专注于揭示变量之间的关系和相关性,是探索性数据分析中的重要工具。三种强大的联系类可视化技术:散点图、热力图和蜘蛛图,它们各自适用于不同类型的关系探索。
散点图是展示两个连续变量之间关系的经典方法,通过将数据点绘制在二维坐标系中来显示它们的联合分布。直观揭示变量间的相关性、聚类或异常值。Python中可以使用Matplotlib的 scatter() 函数或Seaborn的 jointplot() 函数创建散点图。Seaborn进一步增强了散点图的功能,可以在同一图表中叠加回归线、核密度估计或直方图。以下是散点图的创建示例:
# 数据准备
np.random.seed(42)
x = np.random.randn(300)
y = 2 * x + np.random.randn(300)
# 使用Seaborn画散点图与回归线
plt.figure(figsize=(10, 6))
sns.jointplot(x=x, y=y, kind='reg', height=8)
plt.suptitle('X与Y变量的散点图与回归线', y=1.03)
plt.show()代码运行结果:

热力图是一种用颜色编码表示数据值的矩阵型图表,特别适合展示二维数据或两个分类变量组合的频数。热力图通过颜色的深浅或色调变化直观显示数据的大小或密度,使观察者能够快速识别出数据中的热点或模式。Python中使用Seaborn的 heatmap() 函数创建热力图。热力图常用于可视化混淆矩阵、相关系数矩阵或地理空间数据。热力图的一个重要参数是 cmap ,它决定了颜色映射方案,如’coolwarm’、’viridis’等。以下是热力图的实现代码:
# 数据准备
data = np.random.rand(10, 10) * 10 # 10x10的随机矩阵
# 使用Seaborn画热力图
plt.figure(figsize=(10, 8))
sns.heatmap(data, cmap='coolwarm', annot=True, fmt=".1f",
linewidths=.5, cbar_kws={'label': '数值强度'})
plt.title('热力图示例', fontsize=15)
plt.show()代码运行结果:

蜘蛛图(又称雷达图或星形图)是一种显示多变量数据的二维图表,用于展示三个或更多定量变量的相对表现,非常适合比较多个实体在多个维度上的表现。Python中蜘蛛图的创建需要使用Matplotlib的极坐标系统。以下是蜘蛛图的绘制方法:
# 数据准备
categories = ['速度', '精度', '稳定性', '易用性', '功能']
values = [8, 6, 9, 7, 8]
angles = np.linspace(0, 2 * np.pi, len(categories), endpoint=False).tolist()
values += values[:1] # 闭合图形
angles += angles[:1] # 闭合图形
# 创建蜘蛛图
fig, ax = plt.subplots(figsize=(6, 6), subplot_kw=dict(polar=True))
ax.fill(angles, values, color='red', alpha=0.25)
ax.plot(angles, values, color='red', linewidth=2)
ax.set_xticks(angles[:-1])
ax.set_xticklabels(categories)
ax.set_title('产品性能蜘蛛图', size=15, y=1.1)
plt.show()代码运行结果:

联系类可视化方法的选择取决于变量类型和分析目的。散点图适用于两个连续变量的关系探索,热力图适合展示矩阵型数据或分类变量组合的频数,而蜘蛛图则擅长比较多组多维度数据。在实际应用中,这些方法常常结合使用,从不同角度全面揭示数据中的关联模式。
构成与分布类可视化方法专注于展示数据的组成结构和分布特征,构成类图表揭示整体与部分之间的关系,而分布类图表则展现数据的分散状况和概率特征。
饼图是一种经典的构成类图表,用于显示各部分占总体的比例关系。在Python中可以使用Matplotlib的 pie() 函数创建饼图,该函数提供了丰富的定制选项,如突出显示某一块(explode参数)、添加百分比标签(autopct参数)等。以下是创建饼图的示例代码:
# 数据准备
sizes = [25, 35, 20, 20]
labels = ['北部', '东部', '南部', '西部']
explode = (0.1, 0, 0, 0) # 突出显示北部区域
# 绘制饼图
plt.figure(figsize=(8, 8))
plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%',
shadow=True, startangle=90, colors=['#ff9999','#66b3ff','#99ff99','#ffcc99'])
plt.title('各地区销售占比', fontsize=15)
plt.axis('equal') # 确保饼图是圆形
plt.show()代码运行结果:

直方图是最常用的分布类图表之一,它将连续数据划分为若干个区间(bin),并用条形显示各区间内数据的频数或频率。直方图能够直观展示数据的集中趋势、离散程度和分布形态(如正态分布、偏态分布等)。Python中可以使用Matplotlib的 hist() 函数或Seaborn的 distplot() 函数(在新版本中为 histplot() )创建直方图。Seaborn的直方图还可以叠加核密度估计(KDE),更平滑地估计数据的概率密度分布。以下是直方图的实现代码:
# 数据准备
np.random.seed(42)
data = np.random.randn(1000) # 生成1000个标准正态分布随机数
# 使用Seaborn绘制直方图与核密度估计
plt.figure(figsize=(10, 6))
sns.histplot(data, kde=True, bins=30, color='skyblue')
plt.title('数据分布直方图与核密度估计', fontsize=15)
plt.xlabel('数值')
plt.ylabel('频数')
plt.show()代码运行结果:

二元变量分布图是展示两个变量联合分布的有效工具,它结合了散点图和边缘直方图或核密度图,能够同时显示两个变量的单独分布和它们之间的关系。Seaborn库提供了强大的 jointplot() 函数来创建这类图表,支持多种展示形式,包括散点图(‘scatter’)、核密度估计(‘kde’)和六边形分箱(‘hex’)。二元变量分布图在探索两个连续变量间的相关性时特别有用,可以直观地识别出线性或非线性关系、聚类模式以及异常值。以下是创建二元变量分布图的代码示例:
# 数据准备
tips = sns.load_dataset('tips') # 加载Seaborn内置数据集
# 绘制二元变量分布图(散点图+直方图)
plt.figure(figsize=(10, 8))
sns.jointplot(x='total_bill', y='tip', data=tips, kind='scatter', height=8)
plt.suptitle('账单总额与小费金额的二元分布', y=1.03)
plt.show()
# 绘制二元变量分布图(核密度估计)
sns.jointplot(x='total_bill', y='tip', data=tips, kind='kde', height=8)
plt.suptitle('账单总额与小费金额的核密度估计', y=1.03)
plt.show()代码运行结果:


构成与分布类可视化方法为数据分析提供了理解数据内在结构的强大工具。饼图直观展示构成比例,直方图揭示单变量分布特征,而二元变量分布图则同时探索两个变量的联合分布和边际分布。在实际数据分析过程中,这些方法往往结合使用,从不同角度全面理解数据的组成和分布特性。
高级多变量可视化方法能够同时展示三个或更多变量的复杂关系。成对关系图、气泡图和马赛克图这三种高级多变量可视化技术,能够突破三维限制,在二维平面上展示丰富的多维信息。
成对关系图(Pair Plot)是一种强大的探索性分析工具,它通过绘制数据集中所有数值变量两两之间的散点图和直方图,全面揭示变量间的相互关系和各自分布特征。Python中可以使用Seaborn的 pairplot() 函数轻松创建成对关系图。成对关系图的一个关键优势是能够一次性展示所有数值变量的组合关系,大大提高了多维数据探索的效率。以下是创建成对关系图的代码示例:
# 加载Seaborn内置的鸢尾花数据集
iris = sns.load_dataset('iris')
# 绘制成对关系图,并按花的种类着色
plt.figure(figsize=(12, 12))
sns.pairplot(iris, hue='species', palette='husl', markers=['o', 's', 'D'])
plt.suptitle('鸢尾花数据集成对关系图', y=1.02)
plt.show()代码运行结果:

气泡图是散点图的高级变种,它通过引入第三个维度(通常用气泡大小表示)来增强二维散点图的信息承载能力。气泡图特别适合展示三个连续变量之间的关系,其中x轴和y轴表示两个主要变量,气泡大小表示第三个变量,有时还可以通过气泡颜色引入第四个分类变量。Python中可以使用Matplotlib的 scatter() 函数创建气泡图,通过调整 size 参数实现气泡大小的变化。以下是气泡图的实现代码:
# 数据准备
np.random.seed(42)
x = np.random.rand(20) * 100 # x轴数据
y = np.random.rand(20) * 100 # y轴数据
sizes = np.random.rand(20) * 1000 # 气泡大小
colors = np.random.rand(20) # 气泡颜色
categories = np.random.choice(['A', 'B', 'C'], 20) # 气泡类别
# 绘制气泡图
plt.figure(figsize=(12, 8))
scatter = plt.scatter(x, y, s=sizes, c=colors, cmap='viridis', alpha=0.6)
# 添加颜色条
plt.colorbar(scatter, label='颜色值')
# 添加图例
for category in set(categories):
plt.scatter([], [], label=category)
plt.legend(title='类别')
plt.title('气泡图示例:展示四个维度的数据', fontsize=15)
plt.xlabel('X变量')
plt.ylabel('Y变量')
plt.grid(True)
plt.show()代码运行结果:

马赛克图(Mosaic Plot)是一种用于展示两个或多个分类变量联合分布的特殊图表,它通过不同大小的矩形块表示各类别组合的频数或比例。马赛克图能够直观揭示分类变量间的关联性,特别适合分析调查问卷数据或人口统计特征。Python中可以使用statsmodels库的 mosaic() 函数创建马赛克图。马赛克图的每个矩形块的面积与对应类别组合的频数成比例,颜色则可以表示观测值与期望值的偏差程度,从而直观显示哪些组合出现得比预期更频繁或更稀少。以下是马赛克图的创建示例:
import pandas as pd
from statsmodels.graphics.mosaicplot import mosaic
# 原始计数表
data = {
'性别': ['男', '男', '女', '女'],
'喜好': ['运动', '艺术', '运动', '艺术'],
'数量': [30, 10, 20, 40]
}
df = pd.DataFrame(data)
# 展开成一行一行
long_df = pd.DataFrame([
(sex, pref)
for sex, pref, n in zip(df['性别'], df['喜好'], df['数量'])
for _ in range(n)
], columns=['性别', '喜好'])
# 画马赛克图
mosaic(long_df, ['性别', '喜好'], gap=0.05, title='性别与喜好的关联性马赛克图')
plt.show()代码运行结果:

高级多变量可视化方法突破了传统二维图表的限制,使分析师能够在有限的空间内展示更丰富的信息。成对关系图全面扫描数值变量间的关系,气泡图通过大小和颜色编码额外维度,马赛克图则专门针对分类变量的联合分析。在实际应用中,选择哪种高级可视化方法取决于数据类型(连续或分类)、分析目的以及目标受众的技术水平。无论选择哪种方法,清晰、准确地传达信息始终是数据可视化的首要目标。
样式美化与定制
样式美化可以显著提升图表的专业性和吸引力。Python的Matplotlib和Seaborn库提供了丰富的样式定制选项:
1、颜色选择:使用恰当的颜色映射(colormap)可以突出数据特征。Seaborn提供了多种内置调色板,如’deep’、’muted’、’pastel’等,适用于不同场景。对于连续型数据,使用渐变色(如’viridis’);对于分类数据,使用对比鲜明的颜色(如’Set1’)。
2、字体与标签:确保文字大小适中,标题通常需要14-16pt,轴标签12-14pt,刻度标签10-12pt。使用 plt.rcParams 可以全局设置字体样式。
3、布局与比例:保持适当的图表宽高比,避免扭曲数据。使用 plt.tight_layout() 自动调整子图间距。
4、网格与参考线:适度使用网格线( plt.grid() )可以帮助读者更准确地读取数据值。
以下是图表美化的代码示例:
# 设置全局样式
sns.set_style("whitegrid")
plt.rcParams['font.size'] = 12
plt.rcParams['axes.labelsize'] = 14
plt.rcParams['axes.titlesize'] = 16
# 创建美化后的条形图
plt.figure(figsize=(10, 6))
ax = sns.barplot(x=['A组', 'B组', 'C组', 'D组'],
y=[25, 33, 18, 42],
palette="Blues_d",
saturation=0.8)
# 添加数据标签
for p in ax.patches:
ax.annotate(f"{p.get_height():.0f}",
(p.get_x() + p.get_width() / 2., p.get_height()),
ha='center', va='center',
xytext=(0, 5),
textcoords='offset points')
plt.title("美化后的条形图示例", pad=20)
plt.xlabel("实验组别")
plt.ylabel("测量值")
plt.show()代码运行结果:

交互式可视化
能够通过鼠标悬停、缩放、筛选等交互功能增强数据探索体验。Python生态系统中有多个库支持创建交互式图表,包括Plotly、Bokeh和Altair。Plotly特别适合创建交互式热力图、散点图和地图可视化。以下是使用Plotly创建交互式散点图的示例:
import plotly.express as px
# 加载示例数据集
df = px.data.iris()
# 创建交互式散点图
fig = px.scatter(df, x="sepal_width", y="sepal_length",
color="species", size="petal_length",
hover_data=['petal_width'],
title="鸢尾花数据集交互式散点图")
fig.show()代码运行结果:

数据可视化的最终目标是清晰、准确地传达信息,而非单纯的视觉美观。优秀的可视化作品应当遵循“少即是多”的原则,去除不必要的装饰元素(如3D效果、过度使用的颜色),突出核心数据和关键发现。同时,良好的可视化实践还包括添加适当的标题、标签、图例和注释,确保图表能够自解释。
“无他,惟手熟尔”!有需要就用起来。
如果你觉得这篇文章有用,欢迎点赞、转发、收藏、留言、推荐❤!
本文分享自 Nicholas与Pypi 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!