如何从 Pandas DataFrame 创建直方图?
直方图是一种用来表示数据分布的图形。在数据可视化过程中,直方图被广泛应用。在 Python 中,Pandas 是处理和分析数据的一种非常流行的工具,它提供了很多便捷的操作,包括创建直方图。
在本文中,我将会向大家介绍如何使用 Pandas DataFrame 创建直方图。接下来,我将会从以下几个方面讲解。
准备数据
首先,我们需要准备一些数据,作为创建直方图的原料。在本文中,我将使用 Pandas DataFrame 创建直方图。具体来说,我们可以使用 Pandas 的 DataFrame.hist() 函数来创建直方图。
为了让大家更好地理解,下面是一份样例数据,你可以将其保存为 sample_data.csv 文件。数据中包括了 Pandas DataFrame 的两列数据。
Column_A Column_B
0 36 153
1 53 171
2 38 175
3 31 159
4 27 176
5 30 157
6 49 173
7 21 164
8 37 169
9 34 163
我们使用 Pandas 的 read_csv() 函数读取该文件。代码如下:
import pandas as pd
df = pd.read_csv('sample_data.csv')
创建直方图
有了数据之后,我们接下来就可以使用 DataFrame.hist() 函数来创建直方图。该函数的参数中,bibs 参数表示将数据分成多少个区间(即柱子的个数),range 参数表示绘制直方图时的数据的范围。代码如下:
df.hist(bins=10, range=(0, 200))
上述代码将形成两张直方图,分别是 Column_A 和 Column_B 的直方图。其中,bins=10 表示将数据分成 10 个区间,range=(0, 200) 表示绘制直方图时的数据范围是 0 到 200。
优化直方图
我们创建了直方图之后,可以发现,当前的直方图还有一些不足之处。比如:
- 两张直方图重叠在了一起;
- 每张直方图中柱子的颜色相同,难以区分各个柱子。
接下来,我们将尝试通过代码来解决这些问题。
各个直方图分离
首先,我们需要让两张直方图分离开来,这样才能更清晰地看到每张直方图所表示的含义。有两种常见的方法可以将两张直方图分离。
方法一:使用 matplotlib 子图
我们可以使用 matplotlib 这个 Python 绘图库,在同一幅图中创建两个子图,分别绘制 Column_A 和 Column_B。代码如下:
import matplotlib.pyplot as plt
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(10, 5))
df['Column_A'].plot(ax=axes[0], kind='hist', bins=10, range=(0, 200))
df['Column_B'].plot(ax=axes[1], kind='hist', bins=10, range=(0, 200))
在上述代码中,我们使用 subplot() 函数创建了两个子图。参数 nrows=1, ncols=2 表示创建 1 行 2 列的图形。figsize=(10, 5) 表示图形的大小。接下来,我们在每个子图中绘制 DataFrame 的直方图,通过 kind=’hist’ 参数来告诉 Pandas 我们要绘制直方图。
方法二:使用 Pandas 的 hist() 函数
我们也可以使用 Pandas 自带的 hist() 函数来分离两张直方图,这个函数默认将 DataFrame 中的每一列绘制成一张直方图。代码如下:
df.hist(bins=10, range=(0, 200), figsize=(10, 5))
在上述代码中,我们添加了 figsize=(10, 5) 参数,用来控制图形的大小。
调整柱子的颜色
我们将两张直方图分离出来之后,还需要在直方图中区分各个柱子的颜色,以更清晰地看到数据的分布情况。这可以通过在绘图时传入 color 参数来实现,代码如下:
import numpy as np
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(10, 5))
colors = ['#E69F00', '#56B4E9']
labels = ['Column A', 'Column B']
alpha = 0.7
for i, (col, ax) in enumerate(zip(df.columns, axes)):
data = df[col]
n, bins, patches = ax.hist(data, bins=10, range=(0, 200), color=colors[i], alpha=alpha)
ax.set_xlabel(col)
ax.set_ylabel('Frequency')
ax.legend([labels[i]])
plt.show()
在上述代码中,我们使用了 zip() 函数遍历 DataFrame 的每一列。接下来,我们对每一列数据进行了绘制,并通过 color 参数来指定柱子的颜色,alpha 参数则用于控制柱子的透明度。最后,我们使用 legend() 函数来添加图例,以供用户区分每个柱子表示的数据列。
结论
在本文中,我们学习了如何使用 Pandas DataFrame 创建直方图。具体来说,我们了解了如何准备数据,并使用 Pandas 的 hist() 函数创建单个直方图,以及使用 matplotlib 和 Pandas 的 hist() 函数分别绘制多个直方图,并优化了直方图的颜色和可读性。
通过本文的学习,相信大家已经掌握了使用 Pandas DataFrame 创建直方图的方法,并能够根据自己的需求进行进一步的优化。