跳到主要内容 Python 数据可视化入门教程 | 极客日志
Python AI 算法
Python 数据可视化入门教程 Python 数据可视化主要涉及 Pandas、Matplotlib、Seaborn 和 Pyecharts 四个核心库的使用。Pandas 提供 DataFrame 结构及基础绘图功能;Matplotlib 支持高度自定义的图表绘制与参数调整;Seaborn 基于 Matplotlib 提供更高级的统计图形接口;Pyecharts 则擅长交互式图表与地图展示。本文通过代码示例演示了各库在折线图、柱状图、热力图、雷达图及多表绘制中的具体应用,帮助读者掌握 Python 数据可视化的基本方法与技巧。
CoderByte 发布于 2025/2/7 更新于 2026/4/19 0 浏览前言
什么是数据可视化? 数据可视化是为了使得数据更高效地反应数据情况,便于让读者更高效阅读,通过数据可视化突出数据背后的规律,以此突出数据中的重要因素。如果使用 Python 做数据可视化,建议学好如下这四个 Python 数据分析包,分别是:
Pandas、Matplotlib、Seaborn、Pyecharts
学好以上四个数据分析包,做可视化足够用了。全文较长,建议耐心看完,学习后即可使用 Python 做数据可视化,具体的代码实操部分可以实际用代码进行演示,这样才能更好的掌握,下面一起来学习~
01. Pandas
官网 https://www.pypandas.cn/
Pandas 是 Python 的核心数据分析支持库,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据,广泛应用于数据分析领域。Pandas 适用于处理与 Excel 表类似的表格数据,以及有序和无序的时间序列数据等。
Pandas 的主要数据结构是 Series(一维数据)和 DataFrame(二维数据),这两种数据结构足以处理金融、统计、社会科学、工程等领域里的大多数典型用例。使用 pandas 进行数据分析流程包含数据整理与清洗、数据分析与建模、数据可视化与制表等阶段。
灵活的分组功能:group by 数据分组;
直观地合并功能:merge 数据连接;
灵活地重塑功能:reshape 数据重塑;
pandas 库不仅可以做一些数据清洗的工作,还可以使用 pandas 作图,并且做图时,使用一行代码就可以轻松作图,详细的作图方法可以看代码中的注释。
import pandas as pd
s=pd.Series([1 ,3 ,3 ,4 ], index=list ('ABCD' ))
s.plot()
s.plot(kind='bar' )
s.plot.barh()
微信扫一扫,关注极客日志 微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
相关免费在线工具 加密/解密文本 使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
RSA密钥对生成器 生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
Mermaid 预览与可视化编辑 基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
curl 转代码 解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
Base64 字符串编码/解码 将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
Base64 文件转换器 将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
import numpy as np
s=pd.Series(np.random.randn(1000 ))
s.plot.kde()
s.plot.density()
import numpy as np
df=pd.DataFrame(np.random.randn(1000 ,2 ),
columns=['X1' ,'Y' ])
df.plot.scatter(x='X1' ,y='Y' )
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()
02. Matplotlib
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 查看图表的风格,选择一个自己喜欢的图表风格,在图表中不能显示汉字,使用一段代码就可以显示了。
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' )
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.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'命令。
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 )
plt.rcParams['axes.titlesize' ] = 20
plt.rcParams['axes.labelsize' ] = 20
plt.rcParams['xtick.labelsize' ] = 20
plt.rcParams['ytick.labelsize' ] = 20
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()
下图就是通过设置全局变量做的图,个人觉得并不美观,对于其他图表全局变量的设置,大家可以探索,做出更好看的图表。
03. Seaborn
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()
flights_long = sns.load_dataset("flights" )
flights = flights_long.pivot("month" , "year" , "passengers" )
f, ax = plt.subplots(figsize=(9 , 6 ))
sns.heatmap(flights, annot=True , fmt="d" , linewidths=.5 , ax=ax)
04. Pyecharts
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 这两个数据可视化库,加以了解 Python 数据可视化内容,同时在数据可视化中学习多表绘制和设置全局变量,相信通过以上的学习,一定能对你学习 Python 数据可视化有所启发。