9.2 Pandas 与 Matplotlib Seaborn


文档摘要

9.2 Pandas 与 Matplotlib / Seaborn 9.2 Pandas 与 Matplotlib / Seaborn 的集成:数据可视化利器 Pandas 提供了强大的数据处理和分析能力,而 Matplotlib 和 Seaborn 则是 Python 中最常用的数据可视化库。将 Pandas 与 Matplotlib/Seaborn 结合使用,可以轻松地将 Pandas 数据结构(如 Series 和 DataFrame)中的数据可视化,从而更好地理解数据、发现模式和交流结果。 9.2.1 Pandas 内置的可视化功能 Pandas 自身集成了一些基于 Matplotlib 的简单绘图功能,可以直接在 Series 和 DataFrame 对象上调用 方法进行可视化。

9.2 Pandas 与 Matplotlib / Seaborn

9.2 Pandas 与 Matplotlib / Seaborn 的集成:数据可视化利器

Pandas 提供了强大的数据处理和分析能力,而 Matplotlib 和 Seaborn 则是 Python 中最常用的数据可视化库。将 Pandas 与 Matplotlib/Seaborn 结合使用,可以轻松地将 Pandas 数据结构(如 Series 和 DataFrame)中的数据可视化,从而更好地理解数据、发现模式和交流结果。

9.2.1 Pandas 内置的可视化功能

Pandas 自身集成了一些基于 Matplotlib 的简单绘图功能,可以直接在 Series 和 DataFrame 对象上调用 .plot() 方法进行可视化。

基本用法:

import pandas as pd import numpy as np import matplotlib.pyplot as plt # 创建一个 Series s = pd.Series(np.random.randn(10).cumsum(), index=np.arange(0, 100, 10)) s.plot() plt.show() # 创建一个 DataFrame df = pd.DataFrame(np.random.randn(10, 4).cumsum(0), columns=['A', 'B', 'C', 'D'], index=np.arange(0, 100, 10)) df.plot() plt.show()

代码详解:

  • s.plot()df.plot():这两个方法分别调用了 Matplotlib 来绘制 Series 和 DataFrame。默认情况下,DataFrame 会将每一列绘制成一条线。

  • plt.show():这个 Matplotlib 函数用于显示绘制的图形。

plot() 方法的常用参数:

  • kind:指定绘图类型,例如:

    • 'line' (默认):折线图

    • 'bar':条形图

    • 'barh':水平条形图

    • 'hist':直方图

    • 'box':箱线图

    • 'kde''density':密度图

    • 'scatter':散点图

    • 'pie':饼图

  • ax:指定 Matplotlib 的 Axes 对象,用于在同一个图中绘制多个图形。

  • subplots:如果为 True,则将 DataFrame 的每一列绘制成一个独立的子图。

  • sharexsharey:控制子图是否共享 x 轴和 y 轴。

  • figsize:指定图形的大小(宽度,高度),单位为英寸。

  • title:设置图形的标题。

  • xlabelylabel:设置 x 轴和 y 轴的标签。

  • xlimylim:设置 x 轴和 y 轴的范围。

  • legend:是否显示图例。

  • style:指定线条的样式,例如颜色、线型、标记等。

代码示例:绘制不同类型的图:

# 条形图 df.plot(kind='bar') plt.title("Bar Chart") plt.show() # 直方图 s.plot(kind='hist', bins=20) plt.title("Histogram") plt.show() # 散点图 (需要指定 x 和 y) df.plot(kind='scatter', x='A', y='B') plt.title("Scatter Plot") plt.show()

9.2.2 使用 Matplotlib 定制 Pandas 图形

虽然 Pandas 的 plot() 方法提供了一些基本的绘图功能,但有时我们需要更精细的控制。这时,我们可以直接使用 Matplotlib API 来定制 Pandas 生成的图形。

步骤:

  1. 使用 plt.subplots() 创建一个 Figure 对象和一个或多个 Axes 对象。

  2. 将 Axes 对象传递给 Pandas 的 plot() 方法的 ax 参数。

  3. 使用 Matplotlib API 对 Axes 对象进行定制,例如设置标题、标签、颜色、线型等。

代码示例:

fig, axes = plt.subplots(2, 1, figsize=(8, 6)) # 创建一个包含两个子图的 Figure 和 Axes 对象 # 在第一个子图中绘制 Series s.plot(ax=axes[0], color='k', linestyle='--', label='Series Data') axes[0].set_title('Series Plot with Customization') axes[0].set_xlabel('Index') axes[0].set_ylabel('Value') axes[0].legend() # 在第二个子图中绘制 DataFrame df.plot(ax=axes[1], alpha=0.7) # 设置透明度 axes[1].set_title('DataFrame Plot with Customization') axes[1].set_xlabel('Index') axes[1].set_ylabel('Value') axes[1].grid(True) # 添加网格线 plt.tight_layout() # 自动调整子图的布局,避免重叠 plt.show()

代码详解:

  • plt.subplots(2, 1, figsize=(8, 6)):创建一个包含 2 行 1 列子图的 Figure 对象和 Axes 对象。figsize 参数指定图形的大小。

  • s.plot(ax=axes[0], color='k', linestyle='--', label='Series Data'):将 Series 绘制在第一个子图 (axes[0]) 上,并设置颜色、线型和标签。

  • axes[0].set_title(...)axes[0].set_xlabel(...)axes[0].set_ylabel(...):使用 Matplotlib API 设置子图的标题和轴标签。

  • axes[0].legend():显示图例。

  • df.plot(ax=axes[1], alpha=0.7):将 DataFrame 绘制在第二个子图 (axes[1]) 上,并设置透明度。

  • axes[1].grid(True):添加网格线。

  • plt.tight_layout():自动调整子图的布局,避免重叠。

9.2.3 使用 Seaborn 进行高级可视化

Seaborn 是一个基于 Matplotlib 的高级数据可视化库,它提供了更美观、更信息丰富的统计图形。Seaborn 可以轻松地与 Pandas DataFrame 集成,用于创建各种复杂的图表。

基本用法:

import seaborn as sns # 加载 Seaborn 自带的示例数据集 tips = sns.load_dataset('tips') # 绘制散点图 sns.scatterplot(x='total_bill', y='tip', data=tips) plt.title("Scatter Plot using Seaborn") plt.show() # 绘制直方图 sns.histplot(x='total_bill', data=tips, kde=True) # kde=True 添加核密度估计曲线 plt.title("Histogram using Seaborn") plt.show() # 绘制箱线图 sns.boxplot(x='day', y='total_bill', data=tips) plt.title("Boxplot using Seaborn") plt.show() # 绘制小提琴图 sns.violinplot(x='day', y='total_bill', data=tips) plt.title("Violinplot using Seaborn") plt.show() # 绘制成对关系图 sns.pairplot(tips) plt.show()

代码详解:

  • sns.load_dataset('tips'):加载 Seaborn 自带的 "tips" 数据集,这是一个关于小费的数据集。

  • sns.scatterplot(x='total_bill', y='tip', data=tips):绘制散点图,x 轴为 'total_bill',y 轴为 'tip',数据来自 tips DataFrame。

  • sns.histplot(x='total_bill', data=tips, kde=True):绘制直方图,x 轴为 'total_bill',数据来自 tips DataFrame。kde=True 添加核密度估计曲线。

  • sns.boxplot(x='day', y='total_bill', data=tips):绘制箱线图,x 轴为 'day',y 轴为 'total_bill',数据来自 tips DataFrame。

  • sns.violinplot(x='day', y='total_bill', data=tips):绘制小提琴图,x 轴为 'day',y 轴为 'total_bill',数据来自 tips DataFrame。

  • sns.pairplot(tips):绘制成对关系图,显示数据集中所有数值变量之间的散点图和直方图。

Seaborn 的常用函数:

  • sns.scatterplot():散点图

  • sns.lineplot():折线图

  • sns.histplot():直方图

  • sns.kdeplot():核密度估计图

  • sns.boxplot():箱线图

  • sns.violinplot():小提琴图

  • sns.barplot():条形图

  • sns.countplot():计数图

  • sns.heatmap():热力图

  • sns.pairplot():成对关系图

  • sns.jointplot():联合分布图

代码示例:使用 Seaborn 定制图形:

# 设置 Seaborn 的样式 sns.set_style('whitegrid') # 绘制带有颜色编码的散点图 sns.scatterplot(x='total_bill', y='tip', hue='smoker', data=tips, palette='Set1') # hue 根据 smoker 列进行颜色编码 plt.title("Scatter Plot with Color Encoding") plt.show() # 绘制分面网格图 g = sns.FacetGrid(tips, col='time', row='smoker') # 根据 time 和 smoker 列创建分面 g.map(plt.hist, 'total_bill') # 对每个分面绘制 total_bill 的直方图 plt.show()

代码详解:

  • sns.set_style('whitegrid'):设置 Seaborn 的样式为 "whitegrid"。

  • sns.scatterplot(x='total_bill', y='tip', hue='smoker', data=tips, palette='Set1'):绘制散点图,并根据 'smoker' 列进行颜色编码。palette='Set1' 指定颜色调色板。

  • sns.FacetGrid(tips, col='time', row='smoker'):创建一个分面网格图,根据 'time' 和 'smoker' 列创建分面。

  • g.map(plt.hist, 'total_bill'):对每个分面绘制 'total_bill' 的直方图。

9.2.4 Pandas, Matplotlib, Seaborn 之间的关系

可以使用 mermaid 绘制一个简单的关系图:

图示说明:

  • Pandas (A): 提供数据处理和分析功能,是数据可视化的基础。

  • Matplotlib (B): 是 Python 中最基础的绘图库,提供底层的绘图 API。

  • Seaborn (C): 是基于 Matplotlib 的高级绘图库,提供更美观、更信息丰富的统计图形。

  • Visualization (D): 通过 Matplotlib 和 Seaborn 实现数据可视化。

  • Data Processing (E): Pandas 提供数据处理能力,为可视化提供数据源。

Pandas 可以直接使用 Matplotlib 进行绘图,Seaborn 则建立在 Matplotlib 的基础上,提供了更高级的接口和更美观的样式。

9.2.5 总结

Pandas 与 Matplotlib/Seaborn 的集成使得数据可视化变得更加容易和高效。通过 Pandas 处理数据,然后使用 Matplotlib 或 Seaborn 进行可视化,可以更好地理解数据、发现模式和交流结果。选择合适的库取决于你的需求:

  • Pandas 内置的 plot() 方法: 适用于快速生成简单的图形。

  • Matplotlib: 适用于需要精细控制的定制化图形。

  • Seaborn: 适用于生成美观、信息丰富的统计图形,例如散点图、直方图、箱线图、小提琴图等。

熟练掌握这三个库的结合使用,将极大地提升你的数据分析和可视化能力。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U