Python Pandas - 可视化
数据可视化在数据分析中扮演着重要角色,它帮助您以图形方式表示数据,以便更好地理解数据并识别模式。然而,Pandas 库主要用于数据操作和分析,但它也通过 Python 的 Matplotlib 库支持提供了数据可视化功能。
在 Python 中,Pandas 库提供了一个基本方法 .plot(),用于生成各种可视化图表,以及不同的专用绘图方法。这些可视化工具建立在 Python 的 Matplotlib 库之上,提供灵活性和自定义选项。
在幕后,Pandas 生成的每个图表实际上都是一个 Matplotlib 对象。这种集成允许用户利用 Matplotlib 的广泛自定义选项来微调 Pandas 生成的图表。
在本教程中,我们将学习使用 Pandas 数据结构进行数据可视化的基础知识。
为可视化设置环境
在学习 Pandas 数据可视化之前,我们应确保已安装 Matplotlib 库。以下是安装 Matplotlib 库的命令 −
pip install pandas matplotlib
导入库
除了 import pandas as pd 之外,您还需要导入 Matplotlib 的函数式接口,以显示、自定义和保存图表,使用以下命令 −
import matplotlib.pyplot as plt
显示图表
在 Jupyter Notebook 或 IPython shell 等环境中,图表通常会在生成时自动显示。然而,在标准的 Python script 或 shell 中,这不会自动发生。要在这种环境中显式显示图表,我们需要调用以下命令 −
plt.show()
此命令会在 GUI 窗口中渲染 Matplotlib figure 对象。
Pandas 基本绘图方法
Pandas 库为 Series 和 DataFrame 对象提供了名为 plot() 的基本绘图方法,用于绘制各种类型的图表。此方法是 matplotlib plt.plot() 方法的一个简单封装。
语法
以下是 Pandas .plot() 方法的语法 −
DataFrame.plot(*args, **kwargs)
其中,
kind: 指定图表类型(默认:'line')。
*args:
**kwargs:
示例
以下是使用 Pandas plot() 方法绘制随机 DataFrame 数据的示例。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 创建一个随机 DataFrame
df = pd.DataFrame(np.random.randn(10,4),index=pd.date_range('1/1/2000',
periods=10), columns=list('ABCD'))
# 绘制 DataFrame
df.plot()
plt.show()
其 输出 如下 −
如果 index 包含日期,则 pandas .plot() 方法会调用 Matplotlib 的 gca().autofmt_xdate() 来格式化 x 轴标签。
我们还可以使用 x 和 y 关键字来绘制一列相对于另一列。
Pandas 中可用的图表类型
Pandas 通过 kind 参数或专用绘图方法支持多种图表类型。以下是不同绘图方法的概述 −
| 图表类型 | kind 值 | 专用方法 | 使用场景 |
|---|---|---|---|
| 折线图 | 'line' | .line() | 可视化时间或序列上的趋势。 |
| 柱状图 | 'bar' | .bar() | 比较各类别间的数量。 |
| 水平柱状图 | 'barh' | .barh() | 与柱状图相同,但为水平方向。 |
| 直方图 | 'hist' | .hist() | 可视化数值数据的分布。 |
| 箱线图 | 'box' | .box() | 总结数据分布和异常值。 |
| 面积图 | 'area' | .area() | 使用累积数据突出趋势。 |
| 散点图 | 'scatter' | .scatter() | 两个变量之间的关系,仅适用于 DataFrame。 |
| 六边形分箱图 | 'hexbin' | .hexbin() | 可视化二维数据密度,仅适用于 DataFrame。 |
| 密度图 | 'kde' 或 'density' | .kde() 或 .density() | 平滑数据分布(核密度估计)。 |
| 饼图 | 'pie' | .pie() | 圆形图中的比例数据。 |
示例:使用 plot() 方法绘制柱状图
现在让我们通过创建一个柱状图来了解柱状图是什么。柱状图可以按以下方式创建 −
import pandas as pd import numpy as np import matplotlib.pyplot as plt # 创建一个随机 DataFrame df = pd.DataFrame(np.random.rand(10,4), columns=['a','b','c','d']) # 绘制柱状图 df.plot(kind='bar') plt.show()
其 输出 如下 −
要生成堆叠柱状图,请传入 stacked=True −
import pandas as pd import numpy as np import matplotlib.pyplot as plt # 创建一个随机 DataFrame df = pd.DataFrame(np.random.rand(10,4), columns=['a','b','c','d']) # 绘制堆叠柱状图 df.plot(kind='bar', stacked=True) plt.show()
其 输出 如下 −
要获取水平柱状图,请使用 barh 选项 −
import pandas as pd import numpy as np import matplotlib.pyplot as plt # 创建一个随机 DataFrame df = pd.DataFrame(np.random.rand(10,4), columns=['a','b','c','d']) # 绘制水平柱状图 df.plot(kind='barh', stacked=True) plt.show()
其 输出 如下 −
直方图
可以使用 plot() 方法的 hist 选项绘制直方图。我们可以指定 bin 的数量。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 创建一个随机 DataFrame
df = pd.DataFrame({'a':np.random.randn(1000)+1,'b':np.random.randn(1000),
'c':np.random.randn(1000) - 1}, columns=['a', 'b', 'c'])
df.plot(kind='hist', bins=20)
plt.show()
其 输出 如下 −
箱线图
可以通过为 Series 和 DataFrame 对象调用 'box' 选项来绘制箱线图,以可视化每列中的值分布。
例如,以下是一个箱线图,代表在 [0,1) 区间上均匀随机变量的 5 次试验,每次 10 个观测值。
import pandas as pd import numpy as np import matplotlib.pyplot as plt # 创建一个随机 DataFrame df = pd.DataFrame(np.random.rand(10, 5), columns=['A', 'B', 'C', 'D', 'E']) df.plot(kind='box') plt.show()
其 输出 如下 −
面积图
可以使用 plot(kind='area') 选项创建面积图。
import pandas as pd import numpy as np import matplotlib.pyplot as plt # 创建一个随机 DataFrame df = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd']) df.plot(kind='area') plt.show()
其 输出 如下 −
散点图
可以使用 plot(kind='scatter') 选项创建散点图。
import pandas as pd import numpy as np import matplotlib.pyplot as plt # 创建一个随机 DataFrame df = pd.DataFrame(np.random.rand(50, 4), columns=['a', 'b', 'c', 'd']) df.plot(kind='scatter', x='a', y='b') plt.show()
其 输出 如下 −
饼图
可以使用 plot(kind='pie') 选项创建饼图。
import pandas as pd import numpy as np import matplotlib.pyplot as plt # 创建一个随机 DataFrame df = pd.DataFrame(3 * np.random.rand(4), index=['a', 'b', 'c', 'd'], columns=['x']) df.plot(kind='pie', subplots=True) plt.show()
其 输出 如下 −
