拓冰建站拓冰建站
首页 / 资讯中心 / 正文

pandas 绘图入门:从一行 `.plot()` 快速可视化到 Matplotlib 深度定制

pandas 绘图入门从一行.plot()快速可视化到 Matplotlib 深度定制【免费下载链接】pandasFlexible and powerful data analysis / manipulation library for Python, providing labeled data structures similar to R data.frame objects, statistical functions, and much more项目地址: https://gitcode.com/gh_mirrors/pa/pandas导读本文以 pandas 官方入门教程“How do I create plots in pandas?”对应仓库中的 04_plotting.rst为核心讲解如何用 pandas 内建的绘图接口完成从“快速总览数据”到“深度定制并保存图表”的完整流程。你将掌握.plot访问器的用法、Series 与 DataFrame 的绘图差异、scatter/box/area等常用图表类型、subplots子图布局以及把 pandas 图表与 Matplotlib 对象打通后进行定制与导出的实战技巧。文中所有代码均可基于仓库自带的空气质量示例数据 doc/data/air_quality_no2.csv 直接运行。准备数据空气质量 NO₂ 时序数据集本教程使用空气质量的 NO₂ 监测数据该数据由 OpenAQ 提供。air_quality_no2.csv数据集记录了巴黎站点 FR04014、安特卫普站点 BETR801和伦敦站点 London Westminster三个测量站的 NO₂ 浓度值文件位于仓库的 doc/data/air_quality_no2.csv共 1036 行数据包含datetime、station_antwerp、station_paris、station_london四列。import pandas as pd import matplotlib.pyplot as plt air_quality pd.read_csv( doc/data/air_quality_no2.csv, index_col0, parse_datesTrue ) air_quality.head()这里read_csv的两个关键参数值得说明index_col0将第 0 列datetime指定为结果 DataFrame 的索引parse_datesTrue将该列中的日期字符串解析为Timestamp对象而不是普通字符串。两者配合后数据就变成了一个真正的时序 DataFrame索引是时间戳三列分别是三个站点的 NO₂ 浓度读数——这正是后续所有绘图示例的数据基础。快速总览一行代码画出所有数值列拿到数据后最常见的需求是“先快速看一眼数据长什么样”。对 DataFrame 调用无参的plot()即可air_quality.plot() plt.show()当调用对象是 DataFrame 时pandas 会默认为每一列数值数据绘制一条折线图三列数据对应三条曲线并自动附带图例。这个默认行为在源码中可以看到完整的定义DataFrame 的plot属性是挂在 pandas/core/frame.py 上的访问器plot Accessor(plot, pandas.plotting.PlotAccessor)而PlotAccessor类定义在 pandas/plotting/_core.py其默认kind为line且 DataFrame 路径下legend默认值为TrueSeries 路径下默认值为False这就是为什么 DataFrame 折线图默认带图例而 Series 不带。只绘制特定列Series 与 DataFrame 共用.plot如果只想看巴黎站点的数据可以先用上一教程03_subset_data.rst介绍的列选择方法取出该列再调用plotair_quality[station_paris].plot() plt.show()选择出的air_quality[station_paris]是一个 Series它同样拥有.plot方法。也就是说.plot系列方法同时适用于 Series 和 DataFrame选择操作与绘图操作可以自然地组合在一起。散点图比较伦敦与巴黎两列数据折线图适合观察随时间的变化趋势而要“比较两个站点的读数关系”时散点图更直观air_quality.plot.scatter(xstation_london, ystation_paris, alpha0.5) plt.show()x与y参数分别指定散点图的横纵坐标列alpha0.5控制散点的透明度用于缓解数据点重叠造成的视觉遮挡。从源码看scatter与hexbin是仅针对 DataFrame 开放的图表类型定义在 pandas/plotting/_core.py 的scatter方法与同文件第 2310 行的hexbin方法因为它们天然依赖 DataFrame 的多列映射。有哪些绘图类型dir()快速盘点除了默认的折线图pandas 还内置了多种图表类型。用标准 Python 即可快速枚举访问器上的全部公开方法[ method_name for method_name in dir(air_quality.plot) if not method_name.startswith(_) ]在 IPython 或 Jupyter Notebook 等开发环境中也可以直接输入air_quality.plot.后按TAB 键触发自动补全实时查看可用方法列表。这些绘图类型在源码 pandas/plotting/_core.py 中被明确分类为三组类别图表类型说明通用类型Series 与 DataFrame 均可用line、bar、barh、kde、density、area、hist、boxdensity是kde的别名Series 专属pie饼图DataFrame 专属scatter、hexbin散点图、六边形分箱图每种类型在PlotAccessor中都有对应的同名方法例如linepandas/plotting/_core.py、bar第 1542 行、box第 1830 行、area第 2072 行等调用DataFrame.plot.bar()与DataFrame.plot(kindbar)是等价的两种写法。箱线图示例快速查看数值分布其中DataFrame.plot.box对应统计学中的箱线图box plot适用于快速查看各列数值的分布、四分位数与离群点情况。直接作用于空气质量数据air_quality.plot.box() plt.show()每个站点的 NO₂ 浓度序列会分别生成一个箱体便于横向对比三个站点的浓度水平与波动范围。更多除默认折线图之外的图表类型介绍可参见用户指南中的 supported plot styles 章节。子图布局subplotsTrue让每列各占一个坐标系默认情况下DataFrame 的所有列会被画在同一个坐标系中。当各列的数值量级差异较大、互相重叠难以辨认时可以要求每列一个独立子图axs air_quality.plot.area(figsize(12, 4), subplotsTrue) plt.show()subplotsTrue为每一列生成独立的子图figsize(12, 4)设置整幅图的宽高单位英寸plot.area面积图默认即为堆叠stacked效果。subplots参数在 PlotAccessor 的文档字符串中有更细致的说明它除了接受布尔值还可以接受“由列标签迭代器组成的序列”例如[(a, c), (b, d)]会把列a、c合并到第一个子图列b、d合并到第二个子图未指定的其余列则各自单独成图。与之配套的常用参数还包括sharex多个子图共享 x 轴axNone时默认True、sharey共享 y 轴默认False和layout子图的行列排布。这些参数的组合使用可参考用户指南的 plot formatting 章节。深度定制与保存打通 pandas 与 Matplotlibpandas 绘制的每一个图表对象本质上都是一个Matplotlib 对象。Matplotlib 提供了海量的定制能力只要把 pandas 与 Matplotlib 的通道显式打通就能把全部 Matplotlib 能力应用到图表上。下面的例子演示了这一策略fig, axs plt.subplots(figsize(12, 4)) # 1. 创建空白的 Matplotlib Figure 与 Axes air_quality.plot.area(axaxs) # 2. 用 pandas 把面积图绘制到准备好的 Figure/Axes 上 axs.set_ylabel(NO$_2$ concentration) # 3. 任意调用 Matplotlib 定制方法 fig.savefig(no2_concentrations.png) # 4. 用 Matplotlib 自带方法保存图表 plt.show() # 5. 显示图表四步分工非常清晰plt.subplots(figsize(12, 4))由 Matplotlib 创建一个空白 Figure 和 Axes同时设定画布尺寸air_quality.plot.area(axaxs)通过 pandas 的ax参数把数据绘制到上一步准备的坐标系上而非自动新建axs.set_ylabel(...)此后即可对坐标系做任意 Matplotlib 层面的定制例如这里设置 y 轴标签$_2$是 Matplotlib 的 LaTeX 风格数学下标写法fig.savefig(...)/plt.show()用标准 Matplotlib 方法导出图片文件或显示图表。从底层实现看pandas 绘图之所以能与 Matplotlib 无缝衔接是因为PlotAccessor在 _get_plot_backend 中通过选项plotting.backend选择绘图后端默认后端即为 Matplotlib。这意味着你甚至可以把后端替换为其他可视化库通过pd.options.plotting.backend ...设置会话级后端或在单次调用时传backend...参数指定后端。只要理解了“pandas 负责把数据翻译成 Matplotlib 调用、Matplotlib 负责渲染与定制”这一分层关系就掌握了扩展的方向。小结记住这三点.plot.*方法同时适用于 Series 和 DataFrame可以自由地与选择、聚合等操作组合默认情况下每一列数据会被绘制为不同的图形元素折线、箱体等pandas 创建的任何图表都是 Matplotlib 对象因此 Matplotlib 的全部定制、标注与导出能力都可直接使用。本教程的完整绘图能力总览含全部图表类型、格式化选项与后端扩展机制可继续阅读用户指南的 visualization 章节以及PlotAccessor在 pandas/plotting/_core.py 中的完整参数文档含xlim/ylim、logx/logy、colormap、secondary_y、stacked、rot、fontsize等全部参数的含义与默认值。【免费下载链接】pandasFlexible and powerful data analysis / manipulation library for Python, providing labeled data structures similar to R data.frame objects, statistical functions, and much more项目地址: https://gitcode.com/gh_mirrors/pa/pandas创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门