数据可视化是数据分析中不可或缺的一部分,它能够帮助我们直观地理解数据、发现规律并传达信息。Python提供了多种强大的可视化库,本文将全面介绍Matplotlib、Seaborn和Pyecharts三大主流工具的使用方法。
1. Matplotlib基础绘图
Matplotlib是Python中最基础的可视化库,提供了丰富的绘图功能。
1.1 绘制折线图
折线图适合展示数据随时间变化的趋势:
import numpy as np
import matplotlib.pyplot as plt
# 1.导入pyplot模块
# 2.绘制线条
# x轴的数据,代表10次考试天
x = np.arange(0, 10)
# y轴的数据,代表数学科目对应成绩
y_max = np.array([99, 94, 95, 96, 97, 98, 99, 100, 99, 98])
# y轴的数据,代表语文科目对应成绩
y_min = np.array([90, 84, 85, 79, 87, 99, 89, 90, 89, 88])
# 根据一组数据绘制第一条线,线上的数据标记是圆形,大小是6像素
plt.plot(x, y_max, marker='o', ms=6)
# 根据另一组数据绘制第二条线,线上的数据标记是星形,大小是8像素
plt.plot(x, y_min, marker='*', ms=8)
# 3.完善图表
# 正常显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题
plt.title('Xiaoming\'s exam results for 10 consecutive times') # 添加标题
plt.xlabel('Exam frequency') # 设置x轴的标签
plt.ylabel('Score') # 设置y轴的标签
# 4.展示图表
plt.show()

1.2 绘制柱形图
柱形图适合比较不同类别间的数值差异:
import numpy as np
# 1.导入pyplot模块
import matplotlib.pyplot as plt
# 2.绘制柱形
# x轴的数据,代表科目
x = np.arange(1, 6)
# y轴的数据,代表张三的成绩
y_a = np.array([85, 90, 70, 92, 87])
# y轴的数据,代表李四的成绩
y_b = np.array([78, 82,92, 85, 83])
bar_width = 0.3 # 柱形的宽度
rect_a = plt.bar(x, y_a, tick_label=["yvwen", "shuxue", "yingyv", "wuli", "huaxue"], width=bar_width, label='zhangsan') # 根据一组数据绘制柱形
rect_b = plt.bar(x+bar_width, y_b, width=bar_width, label='lisi') # 根据另一组数据绘制柱形
# 3.完善图表
plt.rcParams['font.sans-serif'] = ['SimHei']
# 设置坐标轴的标签
plt.ylabel('Score')
# 添加标题
plt.title('The scores of five students in five exams')
# 添加注释文本
def autolabel(rects):
"""在每个柱形上方添加注释文本"""
for rect in rects:
rect_height = rect.get_height() # 获取每个柱形的高度
rect_x = rect.get_x() # 获取每个柱形的x值
rect_width = rect.get_width() # 获取每个柱形的宽度
plt.text(rect_x + rect_width / 2, rect_height + 1,
s='{}'.format(rect_height),
ha='center', va='bottom', fontsize=9)
autolabel(rect_a)
autolabel(rect_b)
# 添加图例
plt.legend()
# 4.展示图表
plt.show()

1.3 绘制散点图
散点图适合展示两个变量间的关系:
import numpy as np
# 1.导入pyplot模块
import matplotlib. pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
# 2.绘制点
# 学习时间
learn_time = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
# 小明的成绩
xiaoming_score = np.array([20, 34, 57, 61, 85, 86, 90, 92, 79, 60])
plt.scatter(learn_time, xiaoming_score, s=50, c='y', edgecolors='k')
# 3.完善图表
plt.title('the relationship between learning time and score')
plt.xlabel('length of learning time')
plt.ylabel('xiaoming score')
plt.grid(visible=True, linewidth=0.5) # 添加网格
plt.xlim(learn_time.min()-5, learn_time.max()+5) # 设置x轴的刻度范围
# 4.展示图表
plt.show()

2. Seaborn高级可视化
Seaborn基于Matplotlib,提供了更高级的统计图表和美观的默认样式。
2.1 数据分布可视化
单变量分布
# y轴的数据,代表最低气温
y_min = np.array([19, 19, 20, 22, 22, 21, 22, 16, 18, 18, 17, 14, 15, 16, 16])
# 使用Seaborn绘制双线图
plt.figure(figsize=(10, 6))
sns.lineplot(x=x, y=y_max, marker='o', label='the highest temperature')
sns.lineplot(x=x, y=y_min, marker='o', label='the lowest temperature')
# 添加标题和标签
plt.title('temperature')
plt.xlabel('date')
plt.ylabel('temperature')
plt.legend()
# 展示图表
plt.show()

双变量分布
import seaborn as sns
import matplotlib.pyplot as plt
# 加载示例数据集
tips = sns.load_dataset('tips', data_home='data/seaborn-data')
# 绘制散点图
sns.scatterplot(x="total_bill", y="tip", data=tips)
plt.show()

# 绘制带有回归线的散点图
sns.lmplot(x="total_bill", y="tip", data=tips)
plt.show()

# 绘制 KDE 图
sns.kdeplot(x="total_bill", y="tip", data=tips, fill=True)
plt.show()

# 绘制等高线图
sns.kdeplot(x="total_bill", y="tip", data=tips, levels=5)
plt.show()

# 绘制六边形图
sns.jointplot(x="total_bill", y="tip", data=tips, kind="hex")
plt.show()

2.2 分类数据可视化
import seaborn as sns
import matplotlib.pyplot as plt
# 加载示例数据集
tips = sns.load_dataset('tips', data_home='data/seaborn-data')
# 绘制 stripplot
sns.stripplot(x="day", y="total_bill", data=tips, jitter=True)
plt.show()

# 绘制 swarmplot
sns.swarmplot(x="day", y="total_bill", data=tips)
plt.show()

# 使用 catplot 绘制 swarmplot
sns.catplot(x="day", y="total_bill", data=tips, kind="swarm")
plt.show()

import seaborn as sns
import matplotlib.pyplot as plt
# 加载示例数据集
tips = sns.load_dataset('tips', data_home='data/seaborn-data')
# 绘制 boxplot
sns.boxplot(x="day", y="total_bill", data=tips)
plt.show()

# 绘制 violinplot
sns.violinplot(x="day", y="total_bill", data=tips)
plt.show()

# 绘制 boxenplot
sns.boxenplot(x="day", y="total_bill", data=tips)
plt.show()

3. Pyecharts交互式可视化
Pyecharts基于Echarts,可以生成交互式的HTML图表。
3.1 柱形图
from pyecharts.charts import Bar
from pyecharts import options as opts
# 数据准备
categories = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
values = [120, 200, 150, 80, 70, 110, 130]
# 创建柱状图对象
bar = Bar()
# 添加数据
bar.add_xaxis(categories)
bar.add_yaxis("销售额", values)
# 设置全局配置项
bar.set_global_opts(
title_opts=opts.TitleOpts(title="每周销售额"),
xaxis_opts=opts.AxisOpts(name="星期"),
yaxis_opts=opts.AxisOpts(name="销售额")
)
# 渲染图表到 HTML 文件
bar.render("bar_chart.html")
# 如果在 Jupyter Notebook 中显示,可以使用以下代码
bar.render_notebook()

3.2 词云图
from pyecharts.charts import WordCloud
from pyecharts import options as opts
# 数据准备
words = [
("Python", 100),
("数据科学", 80),
("机器学习", 70),
("深度学习", 60),
("数据分析", 50),
("可视化", 40),
("算法", 30),
("编程", 20),
("统计", 15),
("数据库", 10)
]
# 创建词云图对象
wordcloud = WordCloud()
# 添加数据
wordcloud.add(
series_name="关键词",
data_pair=words,
shape="circle",
word_size_range=[20, 100],
textstyle_opts=opts.TextStyleOpts(font_family="cursive")
)
# 设置全局配置项
wordcloud.set_global_opts(
title_opts=opts.TitleOpts(title="关键词词云图")
)
# 渲染图表到 HTML 文件
wordcloud.render("wordcloud_chart.html")
# 如果在 Jupyter Notebook 中显示,可以使用以下代码
wordcloud.render_notebook()

3.3 气泡图
from pyecharts.charts import Scatter
from pyecharts import options as opts
import random
# 数据准备
data = [
[random.randint(0, 100), random.randint(0, 100), random.randint(10, 100)]
for _ in range(50)
]
# 创建散点图对象
scatter = Scatter()
# 添加数据
scatter.add_xaxis([d[0] for d in data])
scatter.add_yaxis(
series_name="气泡图",
y_axis=[d[1] for d in data],
symbol_size=[d[2] for d in data], # 气泡大小
label_opts=opts.LabelOpts(is_show=False) # 不显示标签
)
# 设置全局配置项
scatter.set_global_opts(
title_opts=opts.TitleOpts(title="气泡图示例"),
xaxis_opts=opts.AxisOpts(name="X 轴"),
yaxis_opts=opts.AxisOpts(name="Y 轴"),
visualmap_opts=opts.VisualMapOpts(type_="size", min_=10, max_=100) # 视觉映射配置
)
# 渲染图表到 HTML 文件
scatter.render("bubble_chart.html")
# 如果在 Jupyter Notebook 中显示,可以使用以下代码
scatter.render_notebook()

3.4 圆环图
from pyecharts.charts import Pie
from pyecharts import options as opts
# 数据准备
data = [
("类别A", 30),
("类别B", 20),
("类别C", 25),
("类别D", 15),
("类别E", 10)
]
# 创建饼图对象
pie = Pie()
# 添加数据
pie.add(
series_name="类别分布",
data_pair=data,
radius=["40%", "70%"], # 设置内外半径,形成圆环
label_opts=opts.LabelOpts(formatter="{b}: {c} ({d}%)")
)
# 设置全局配置项
pie.set_global_opts(
title_opts=opts.TitleOpts(title="圆环图示例"),
legend_opts=opts.LegendOpts(orient="vertical", pos_top="15%", pos_left="2%")
)
# 渲染图表到 HTML 文件
pie.render("doughnut_chart.html")
# 如果在 Jupyter Notebook 中显示,可以使用以下代码
pie.render_notebook()

总结
本文介绍了Python中三大主流可视化库的使用方法:
- Matplotlib:基础绘图库,灵活性强,适合创建各种静态图表
- Seaborn:基于Matplotlib的高级统计图表库,默认样式美观,适合数据探索
- Pyecharts:交互式可视化库,基于Echarts,适合创建网页交互图表
根据不同的需求场景,可以选择合适的工具:
• 快速探索数据:Seaborn
• 精确控制图表细节:Matplotlib
• 创建交互式网页图表:Pyecharts

2万+

被折叠的 条评论
为什么被折叠?



