Matplotlib 多个 Pandas 直方图
Matplotlib 是一个用于数据可视化的 Python 库。它提供了各种绘图方法,其中包含直方图。Pandas 也是一个 Python 库,通常用于数据处理和数据分析。在 Pandas 中,可以使用 .hist() 方法来绘制单个直方图。本文将介绍如何使用 Matplotlib 和 Pandas 来制作多个直方图。
阅读更多:Matplotlib 教程
加载数据
在本文中,将使用鸢尾花数据集。这个数据集记录了 3 种不同类别的鸢尾花的萼片和花瓣的长度和宽度。在 Pandas 中,可以使用 read_csv() 函数来从 CSV 文件中读取数据。在这个例子中,将使用 load_iris() 函数来加载数据:
import pandas as pd
from sklearn.datasets import load_iris
data = load_iris()
df = pd.DataFrame(data.data, columns=data.feature_names)
在代码中,首先加载了 Pandas 和 sklearn 库。然后使用 load_iris() 函数来加载鸢尾花数据集,将数据储存在名为 data 的变量中。接着,使用 pd.DataFrame() 函数来将数据转换成 Pandas Dataframe,命名为 df。
单个直方图
在 Pandas 中,可以使用 hist() 方法来绘制单个直方图。下面的示例将在 Pandas 中绘制鸢尾花萼片长度的直方图:
import matplotlib.pyplot as plt
df['sepal length (cm)'].plot.hist()
plt.show()
在代码中,使用 df['sepal length (cm)'] 选取了数据集中的 ‘sepal length (cm)’ 列。接着,将其传入 .plot.hist() 方法中,使用 plt.show() 方法来显示图表。
多个直方图
对于多个 Pandas 直方图,可以使用 Matplotlib 的子图方法来实现。子图是指在同一画布上绘制多个图表。下面的示例将在同一画布上绘制 3 个不同类别鸢尾花萼片长度的直方图:
fig, axs = plt.subplots(nrows=1, ncols=3, figsize=(10, 6))
for idx, species in enumerate(df['target'].unique()):
ax = axs[idx]
ax.hist(df[df['target'] == species]['sepal length (cm)'], bins=10)
ax.set_title('{}'.format(data.target_names[species]))
plt.show()
在代码中,fig, axs = plt.subplots(nrows=1, ncols=3, figsize=(10, 6)) 创建了一个拥有 3 列的画布,其中 fig 是画布本身,axs 是包含 3 个子图的列表。接着,在循环中使用 enumerate() 函数遍历了所有不同类别的鸢尾花。在每次循环中,使用 df[df['target'] == species]['sepal length (cm)'] 选取了特定类别的鸢尾花萼片长度的列。然后,调用 Matplotlib 的 .hist() 方法绘制直方图,并使用 ax.set_title() 方法向子图添加标题。注意,为了良好的可视化效果,在绘制直方图时指定了 bin 的数量为 10。
每个直方图的横轴表示萼片长度,纵轴表示该萼片长度所对应的频率。颜色编码不同,代表了不同的鸢尾花类别
修改直方图样式
默认情况下,Matplotlib 和 Pandas 绘制的直方图的样式都非常简单。但是,可以使用 Matplotlib 提供的多个函数和参数来修改直方图的样式以及细节。下面的示例将演示如何对之前的多个直方图进行样式修改:
fig, axs = plt.subplots(nrows=1, ncols=3, figsize=(10, 6))
# 设置不同的颜色和透明度
colors = ['#81c784', '#64b5f6', '#ffb74d']
alpha = 0.7
for idx, species in enumerate(df['target'].unique()):
ax = axs[idx]
ax.hist(df[df['target'] == species]['sepal length (cm)'],
bins=10, color=colors[idx], alpha=alpha,
edgecolor='black', linewidth=1.2)
ax.set_title('{}'.format(data.target_names[species]))
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
plt.show()
在代码中,定义了不同类别鸢尾花的颜色,并且添加了一些其他的参数,例如 alpha 表示透明度,edgecolor 表示直方图的边框颜色及宽度。使用 ax.spines 参数可以隐藏顶部和右侧的轴线,使得直方图看起来更加简洁。
总结
在这篇文章中,介绍了如何使用 Matplotlib 和 Pandas 来绘制多个直方图。通过示例演示了如何加载数据、绘制单个直方图、绘制多个直方图,以及修改直方图的样式等。希望这篇文章可以帮助你更好地理解如何使用 Matplotlib 和 Pandas 来制作直方图,以及如何根据具体需求调整直方图的样式。
极客教程