如何从 Pandas DataFrame 创建直方图?

如何从 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 创建直方图的方法,并能够根据自己的需求进行进一步的优化。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程