前言
数据可视化是将抽象的数据转化为直观的图形或图表的过程,旨在帮助读者更高效地理解数据背后的规律、趋势和异常。在 Python 数据分析生态中,选择合适的可视化工具至关重要。本文主要介绍四个核心库:Pandas、Matplotlib、Seaborn 和 Pyecharts。掌握这四个库,基本能够覆盖绝大多数数据展示需求。
Python 数据可视化主要依赖 Pandas、Matplotlib、Seaborn 和 Pyecharts 四大库。Pandas 内置绘图功能适合快速探索数据;Matplotlib 提供底层控制,支持高度定制化图表;Seaborn 基于 Matplotlib 封装统计图形,美观且易用;Pyecharts 提供交互式 Web 图表及地图支持。本文详细介绍各库的安装背景、核心 API 及代码实战,涵盖折线图、柱状图、热力图、雷达图等多种类型,并讲解中文显示、样式设置及多子图绘制技巧,帮助开发者构建高质量的数据展示方案。

数据可视化是将抽象的数据转化为直观的图形或图表的过程,旨在帮助读者更高效地理解数据背后的规律、趋势和异常。在 Python 数据分析生态中,选择合适的可视化工具至关重要。本文主要介绍四个核心库:Pandas、Matplotlib、Seaborn 和 Pyecharts。掌握这四个库,基本能够覆盖绝大多数数据展示需求。
在使用上述库之前,建议确保已安装 Python 环境及相关依赖包。可以通过 pip 命令进行安装:
pip install pandas matplotlib seaborn pyecharts numpy
若遇到中文显示乱码问题,通常需要在代码中配置字体路径或使用系统支持的字体名称(如 SimHei)。
Pandas 是 Python 的核心数据分析支持库,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据。它广泛应用于数据分析领域,适用于处理与 Excel 表类似的表格数据,以及有序和无序的时间序列数据等。
Pandas 的主要数据结构是 Series(一维数据)和 DataFrame(二维数据),这两种数据结构足以处理金融、统计、社会科学、工程等领域里的大多数典型用例。使用 pandas 进行数据分析流程包含数据整理与清洗、数据分析与建模、数据可视化与制表等阶段。
灵活的分组功能:group by 数据分组; 直观地合并功能:merge 数据连接; 灵活地重塑功能:reshape 数据重塑;
Pandas 库不仅可以做一些数据清洗的工作,还可以使用 pandas 作图,并且做图时,使用一行代码就可以轻松作图。详细的作图方法可以看代码中的注释。
#导入 pandas 库
import pandas as pd
#生成一个 Series
s=pd.Series([1,3,3,4], index=list('ABCD'))
#括号内不指定图表类型,则默认生成直线图
s.plot()

条形图
#条形图
s.plot(kind='bar')

水平条形图
#水平条形图
s.plot.barh()

饼图
#饼图
s.plot.pie()

直方图
#直方图
s.plot.hist()

密度图 (KDE)
#密度图
import numpy as np
s=pd.Series(np.random.randn(1000)) #生成一列随机数
s.plot.kde()
s.plot.density()

散点图
#散点图
import numpy as np
#生成一个 DataFrame
df=pd.DataFrame(np.random.randn(1000,2),
columns=['X1','Y'])
df.plot.scatter(x='X1',y='Y')

六角箱图 (Hexbin)
#六角箱图
df.plot.hexbin(x='X1',y='Y',gridsize=8)

箱型图
#箱型图
df=pd.DataFrame(np.random.rand(10,2),columns=['A','B'])
df.plot.box()

面积图
#面积图
df=pd.DataFrame(np.random.randint(10,size=(4,4)),
columns=list('ABCD'),
index=list('WXYZ'))
df.plot.area()

Matplotlib 是一个 Python 2D 绘图库,它以多种硬拷贝格式和跨平台的交互式环境生成出版物质量的图形。Matplotlib 可用于 Python 脚本,Python 和 IPython Shell、Jupyter 笔记本,Web 应用程序服务器和四个图形用户界面工具包。
Matplotlib 尝试使容易的事情变得更容易,使困难的事情变得可能,只需几行代码就可以生成图表、直方图、功率谱、条形图、误差图、散点图等。
为了简单绘图,该 pyplot 模块提供了类似于 MATLAB 的界面,尤其是与 IPython 结合使用时,对于高级用户,您可以通过面向对象的界面或 MATLAB 用户熟悉的一组功能来完全控制线型,字体属性,轴属性等。
下面介绍 matplotlib 的用法,使用 matplotlib 除了可以作图外,还可以对于图表的参数做一些调整,使得图表更加美观,关于使用 matplotlib 的建议,可以做一些常用的图表模板,更换代码的数据源就可以生成图表,而不用一点一点的去调整参数。
#导入模块
import matplotlib.pyplot as plt
#设置风格
plt.style.use('seaborn-white')
#中文显示问题,如果没有这段代码,图表不显示中文汉字
plt.rcParams['font.sans-serif'] =['SimHei']
这里首先导入 matplotlib 库,并使用了 seaborn-white 的图表风格,可以使用 plt.style.available 查看图表的风格,选择一个自己喜欢的图表风格,在图表中不能显示汉字,使用一段代码就可以显示了。
#构建一个 DataFrame
import pandas as pd
import matplotlib.pyplot as plt
df=pd.DataFrame({'X':[1,3,5,7]})
df['Y']=df['X']**3
df

#设置图像的大小
plt.figure(facecolor='white',figsize=(9,6),dpi=100)
plt.plot(df['X'],df['Y'])
#设置图像的标题
plt.title('折线图',fontsize=15,color='b')
#设置图像的 X、Y 轴标题大小,颜色,与坐标轴的距离
plt.xlabel('X 轴',fontsize=10,color='r',labelpad=15)
plt.ylabel('Y 轴',fontsize=10,color='g',rotation=0,labelpad=15)
#设置起始坐标点
plt.xlim([1,8])
plt.ylim([1,350])
#plt.xticks([1,2,3,4])只显示 1,2,3,4
#plt.yticks([50,150,250,300])只显示 50,150,250,300
#图像的网格线进行设置
plt.grid(color='r', linestyle='-.')
这里首先设置图像的大小,跟我们画画一样,选择多大的纸张去作图,一样的道理,然后设置坐标轴,起始坐标,网格线等。

有时候,要在一张图表上绘制多条线。
#多个图的绘图方法
import numpy as np
import matplotlib.pyplot as plt
x=np.array([1,3,5])
y1=x
y2=x * 10
y3=x * 20
y4=x * 30
可以在一个 plt.plot 命令后继续加另一个 plt.plot 命令,可以在一张图上做另一条线。
plt.figure(facecolor='white')
plt.plot(x,y1,label='A')
plt.plot(x,y2,label='B')
plt.plot(x,y3,label='C')
plt.plot(x,y4,label='D')
plt.legend()#显示图例

使用 plt.subplots 命令也可以作出同样的图。
#使用面向对象绘图
fig,ax=plt.subplots(facecolor='white')
plt.plot(x,y1,label='A')
plt.plot(x,y2,label='B')
plt.plot(x,y3,label='C')
plt.plot(x,y4,label='D')
plt.legend()#显示图例

下面介绍在一张图表的不同位置绘制不同的线型,使用 plt.subplot 命令首先确定绘图的位置,比如 plt.subplot(223) 表示在 2*2 分布的图表中第三个位置,其余的绘图命令相似。
plt.figure(facecolor='white',figsize=(9,6))
plt.subplot(221)
plt.plot(x,y1,label='A',color='r')
plt.xticks(fontsize=15)
plt.legend()#显示图例
plt.subplot(222)
plt.plot(x,y2,label='B',color='y')
plt.xticks(fontsize=15)
plt.legend()#显示图例
plt.subplot(223)
plt.plot(x,y3,label='C',color='b')
plt.xticks(fontsize=15)
plt.legend()#显示图例
plt.subplot(224)
plt.plot(x,y4,label='D',color='g')
plt.xticks(fontsize=15)
plt.legend()#显示图例
plt.tight_layout()#密集显示

除了使用 plt.subplot 命令确定绘图区域外,还可以用 axs[] 命令绘图,这种绘图方式是面向对象的绘图方式。
#面向对象绘制多图
fig,axs=plt.subplots(2,2,facecolor='white',figsize=(9,6))
axs[0,0].plot(x,y1,label='A',color='r')
axs[0,1].plot(x,y2,label='B',color='y')
axs[1,0].plot(x,y3,label='C',color='b')
axs[1,1].plot(x,y4,label='D',color='g')

有时候绘制多张表时需共享一个坐标轴,可以使用 sharex='all'命令。
#sharex='all'共享 X 轴
fig,axs=plt.subplots(4,1,facecolor='white', figsize=(9,6), sharex='all')
axs[0].plot(x,y1,label='A',color='r')
axs[1].plot(x,y2,label='B',color='y')
axs[2].plot(x,y3,label='C',color='b')
axs[3].plot(x,y4,label='D',color='g')

使用 plt.rcParams 命令对全局变量设置,包括字符显示、中文显示、背景颜色、标题大小、坐标轴字体大小,线型等。
#导入模块
import matplotlib.pyplot as plt
#设置风格
plt.style.use('seaborn-white')
#设置全局变量
plt.rcParams['axes.unicode_minus'] = False #字符显示
plt.rcParams['font.sans-serif'] =['SimHei'] #中文显示
plt.rcParams['figure.facecolor'] = 'b' #设置图表背景颜色
plt.rcParams['axes.facecolor'] = (0.8,0.9,0.8) #设置 RGB 颜色
plt.rcParams['axes.titlesize'] = 20 #设置标题大小
plt.rcParams['axes.labelsize'] = 20 #设置轴大小
plt.rcParams['xtick.labelsize'] = 20 #设置 X 坐标大小
plt.rcParams['ytick.labelsize'] = 20 #设置 Y 坐标大小
plt.rcParams['lines.linestyle'] = '-.' #设置线型
plt.plot(x,y1,label='A')
plt.plot(x,y2,label='B')
plt.plot(x,y3,label='C')
plt.plot(x,y4,label='D')
plt.title('折线图')
plt.xlabel('X 轴')
plt.ylabel('Y 轴')
plt.legend()#显示图例
下图就是通过设置全局变量做的图,个人觉得并不美观,对于其他图表全局变量的设置,大家可以探索,做出更好看的图表。

Seaborn 是一个基于 matplotlib 的 Python 数据可视化库,它建立在 matplotlib 之上,并与 Pandas 数据结构紧密集成,用于绘制有吸引力和信息丰富的统计图形的高级界面。
Seaborn 可用于探索数据,它的绘图功能对包含整个数据集的数据框和数组进行操作,并在内部执行必要的语义映射和统计聚合以生成信息图,其面向数据集的声明式 API 可以专注于绘图的不同元素的含义,而不是如何绘制它们的细节。
Matplotlib 拥有全面而强大的 API,几乎可以根据自己的喜好更改图形的任何属性,seaborn 的高级界面和 matplotlib 的深度可定制性相结合,使得 Seaborn 既可以快速探索数据,又可以创建可定制为出版质量最终产品的图形。
将变量按照多行的形式进行绘制,使用 sns.FacetGrid 命令。
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(style="white", rc={"axes.facecolor": (0, 0, 0, 0)})
rs = np.random.RandomState(1979)
x = rs.randn(500)
g = np.tile(list("ABCDEFGHIJ"), 50)
df = pd.DataFrame(dict(x=x, g=g))
m = df.g.map(ord)
df["x"] += m
pal = sns.cubehelix_palette(10, rot=-.25, light=.7)
g = sns.FacetGrid(df, row="g", hue="g", aspect=15, height=.5, palette=pal)
g.map(sns.kdeplot, "x",
bw_adjust=.5, clip_on=False,
fill=True, alpha=1, linewidth=1.5)
g.map(sns.kdeplot, "x", clip_on=False, color="w", lw=2, bw_adjust=.5)
g.refline(y=0, linewidth=2, linestyle="-", color=None, clip_on=False)
def label(x, color, label):
ax = plt.gca()
ax.text(0, .2, label, fontweight="bold", color=color,
ha="left", va="center", transform=ax.transAxes)
g.map(label, "x")
g.figure.subplots_adjust(hspace=-.25)
g.set_titles("")
g.set(yticks=[], ylabel="")
g.despine(bottom=True, left=True)

将数据的大小用热力图进行呈现,使用 sns.heatmap 命令。
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_theme()
# Load the example flights dataset and convert to long-form
flights_long = sns.load_dataset("flights")
flights = flights_long.pivot("month", "year", "passengers")
# Draw a heatmap with the numeric values in each cell
f, ax = plt.subplots(figsize=(9, 6))
sns.heatmap(flights, annot=True, fmt="d", linewidths=.5, ax=ax)

Echarts 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,pyecharts 诞生了。
Pyecharts 具有简洁的 API 设计,使用如丝滑般流畅,支持链式调用,囊括了 30+ 种常见图表,应有尽有,支持主流 Notebook 环境,Jupyter Notebook 和 JupyterLab,拥有高度灵活的配置项,可轻松搭配出精美的图表。
Pyecharts 强大的数据交互功能,使数据表达信息更加生动,增加了人机互动效果,并且数据呈现效果可直接导出为 html 文件,增加数据结果交互的机会,使得信息沟通更加容易。
Pyecharts 有着丰富的图表素材,支持链式调用,如下是使用 Pyecharts 的地理图表功能,空间上直观显示数据可视化效果。
from pyecharts import options as opts
from pyecharts.charts import Map
from pyecharts.faker import Faker
c = (
Map()
.add("商家 A", [list(z) for z in zip(Faker.provinces, Faker.values())], "china")
.set_global_opts(
title_opts=opts.TitleOpts(title="Map-VisualMap(分段型)"),
visualmap_opts=opts.VisualMapOpts(max_=200, is_piecewise=True),
)
.render("map_visualmap_piecewise.html")
)

使用 Radar 命令绘制出雷达图,用来显示多变量数据的图形方法。
from pyecharts import options as opts
from pyecharts.charts import Radar
v1 = [[4300, 10000, 28000, 35000, 50000, 19000]]
v2 = [[5000, 14000, 28000, 31000, 42000, 21000]]
c = (
Radar()
.add_schema(
schema=[
opts.RadarIndicatorItem(name="销售", max_=6500),
opts.RadarIndicatorItem(name="管理", max_=16000),
opts.RadarIndicatorItem(name="信息技术", max_=30000),
opts.RadarIndicatorItem(name="客服", max_=38000),
opts.RadarIndicatorItem(name="研发", max_=52000),
opts.RadarIndicatorItem(name="市场", max_=25000),
]
)
.add("预算分配", v1)
.add("实际开销", v2)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
legend_opts=opts.LegendOpts(selected_mode="single"),
title_opts=opts.TitleOpts(title="Radar-单例模式"),
)
.render("radar_selected_mode.html")
)

以上介绍了 Pandas 如何绘制图表,同时引申 Matplotlib 库的使用,并且介绍了 Seaborn 和 Pyecharts 这两个数据可视化库。通过对比可以发现:
在实际项目中,建议根据需求组合使用。例如,使用 Pandas 进行数据预处理,Matplotlib 或 Seaborn 进行静态分析图表绘制,Pyecharts 生成交互式报表。同时,注意统一图表风格,保持中文显示正常,并合理保存图像资源。相信通过以上的学习,一定能对你学习 Python 数据可视化有所启发。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online