Python中的直方图和密度图

2025年1月5日 | 阅读6分钟

直方图

直方图是一种显示数据集分布的图表。它将数据分成组,并显示每组的观测数量。Python 提供了几个用于创建直方图的库,但最常用的库之一是 Matplotlib。

密度图

密度图是提供连续变量分布平滑近似的图表。它们对于可视化数据集的概率密度函数特别有用。Seaborn 是一个强大的 Python 库,构建在 Matplotlib 之上,使得创建密度图更加容易。

Histograms and Density Plots in Python

使用 Seaborn 绘制直方图

为了绘制直方图,我们考虑 Python 内置的 iris 数据集。

这是加载 iris 数据的方法:

示例

让我们看看如何使用 iris 数据绘制直方图:

程序

输出

Histograms and Density Plots in Python

说明

我们导入了两个库:seaborn 和 matplotlib,它们有助于进行可视化。要创建直方图,我们加载了 Python 中默认可用的 iris 数据集。接下来,我们创建了一个宽度为 12 个单位,高度为 6 个单位的图形。然后,我们绘制了两个直方图,第一个用于 sepal_length(在前半部分),第二个用于 petal_width(在后半部分)。`plt.tight_layout()` 命令调整子图之间的间距以防止重叠。最后,我们使用 `plt.show()` 显示包含两个直方图的整个图形。

使用 Matplotlib 库

Matplotlib 的 `hist()` 函数用于创建直方图。让我们看下面的例子来说明这一点:

程序

输出

Histograms and Density Plots in Python

说明

我们导入了两个 Python 库:用于数据可视化的 matplotlib 和用于加载 iris 数据集的 sklearn。接下来,我们加载了 iris 数据集并使用 matplotlib 创建了一个直方图。我们将 bin 的数量设置为 30,选择蓝色作为颜色,黑色作为边缘颜色。之后,我们为绘图添加了标签和标题。最后,我们使用 `plt.show()` 显示了绘图。

使用 Plotly Express

Plotly Express 是一个 Python 库,可简化交互式数据可视化的创建。它为生成散点图、折线图、条形图、直方图等图表提供了简洁的语法。该库构建在数据可视化工具 Plotly 之上。

示例 1

让我们考虑使用 plotly.express 绘制直方图:

程序

输出

Histograms and Density Plots in Python

说明

我们导入了 Plotly Express 库,并将 Iris 数据集加载到“iris”变量中。然后,我们通过指定“sepal_length”列来绘制直方图。我们使用 `update_layout` 方法调整了图形大小,最后使用 `show()` 方法显示了交互式直方图。

示例 2

这是一个使用 plotly express 创建出色密度图的示例程序。

程序

输出

Histograms and Density Plots in Python

说明

首先,我们导入了 plotly.express 库,然后加载了 iris 数据。接下来,我们使用 `plotly.express.histogram()` 方法创建了一个直方图。此直方图基于“sepal_length”和“sepal_width”列,而“species”列用于颜色区分。我们还使用 `marginal="rug"` 参数在 x 和 y 轴上添加了 rug 图。我们还通过使用 `hover_data=iris.columns` 将更多数据包含在悬停工具提示中。

使用 Seaborn 绘制密度图

Seaborn 有一个名为 `seaborn.kdeplot` 的方法,可以轻松创建密度图。

示例

这是一个使用 Seaborn 库创建密度图的示例程序:

程序

输出

Histograms and Density Plots in Python

说明

我们导入了两个库:seaborn 和 matplotlib,用于进行数据可视化。已加载 iris 数据集,并使用 `seaborn.kdeplot` 函数创建了名为“sepal_length”的列的密度图。最后,我们使用 `plt.title()`、`plt.xlabel()` 和 `plt.ylabel()` 函数为绘图添加了标题和轴标签。

使用 Matplotlib 库

程序

输出

Histograms and Density Plots in Python

说明

我们导入了 Matplotlib 库用于创建密度图,Seaborn 库用于附加绘图,以及 Scikit-learn 库用于加载 iris 数据集和核密度估计。我们加载了 iris 数据集,并使用高斯核密度估计函数计算 KDE。然后,我们使用 `np.linspace()` 函数创建了一个平滑曲线,并使用 Matplotlib 的 `plot()` 函数绘制了密度曲线。最后,我们设置了标签并显示了创建的绘图。

一起绘制直方图和密度图

使用 Seaborn

程序

输出

Histograms and Density Plots in Python

说明

此代码使用 Seaborn `load_dataset` 函数加载 Iris 数据集,特别是“sepal_length”列。然后,它使用 `distplot` 创建一个直方图和 KDE 图的组合。直方图为蓝色,KDE 图为红色。相应地设置了 x 轴、y 轴和标题的标签,并使用 `plt.show()` 显示了绘图。

使用 Plotly 库

程序

输出

Histograms and Density Plots in Python

说明

我们导入了两个库:`figure_factory` 和 `plotly.express`,以帮助我们创建分布图和操作数据。导入库后,我们加载了 iris 数据集并选择了第一个特征:sepal length。使用 `create_distplot` 函数,我们生成了一个包含选定特征的密度图和直方图的分布图。`group_labels` 参数用于设置绘图的标签,而颜色则用于设置颜色。最后,我们使用 `fig.show()` 函数显示了创建的图形。

结论

总而言之,您可以使用多种 Python 库来创建密度图和直方图,这些库提供了数据可视化的灵活性和定制性。Matplotlib、Seaborn 和 Plotly 等库提供了用于生成信息丰富且具有视觉吸引力的密度图和直方图的工具。

密度图通常用于可视化数据的底层分布,这可以通过核密度估计技术来创建。Python 库使此过程变得易于访问且高效。此外,集成直方图可以全面了解数据分布。

根据具体需求和偏好,用户可以从各种选项中进行选择,每个选项都提供独特的功能和特性。总的来说,Python 丰富的可视化库生态系统使用户能够通过密度图和直方图有效地探索和传达见解。