如何创建Plotly小型多图

216 阅读9分钟

在本教程中,我将向你展示如何用Plotly Express创建小型多图。

所以我将解释如何创建Plotly小型多图的语法。

我还会给你看几个清晰的例子,这样你就可以看到它是如何完成的。

本教程有几个部分。 如果你需要特定的东西,只需点击相应的链接。

目录

好的让我们开始吧

用Plotly快速介绍小倍数图表

小型多图是数据科学家可用的最有用的数据可视化技术之一。

Sharp Sight博客的长期读者会知道,我非常喜欢小型多图。

小型多图很有用,因为它们使你能够将数据可视化分解成独立的 "面板"。 通常情况下,你会使用一个现有的图表,并通过一个额外的分类变量将其分解为多个面板。 这使你能够比较多个类别的数据。

A simple example of a small multiple chart made with Plotly, showing how the technique breaks the data out into separate panels, by category.

再次强调:小型多图对于数据分析来说是非常强大和有用的。

但是它们往往没有被充分使用,因为它们往往很难制作。 这在Python中尤其如此。

尽管如此,尽管许多Python数据可视化软件包很难制作这些图表,但用Plotly Express制作这些图表却相当容易......只要你知道正确的语法。

让我们来看看这个语法,看看我们如何用Plotly创建小型多图。

创建Plotly小型多图的语法

在这里,我将向你展示如何用Plotly创建小型多图的语法。

要明确的是:没有一个单一的函数可以用来创建小型多图。

相反,你通过使用现有的Plotly表达函数的特殊参数来创建小型多图。

例如,你可以使用特殊的参数来创建小的多张图表。

以及其他几个 plotly express 工具。

要做到这一点,你需要在那些现有的 plotly 函数里面使用facet_rowfacet_col 参数。

An image that explains the syntax to create a Plotly small multiple, using Plotly express functions in Python.

因此,例如,如果你想创建一个小的多头柱状图,那么你可以调用px.histogram() ,并在函数调用里面使用facet_row= 参数(我将在例子部分向你展示这个例子)。

再次强调:Plotly的小倍数没有单一的函数。 你通过在现有的Plotly Express函数中使用一些参数来创建它们。

Plotly小倍数的参数

有几个参数可以控制Plotly express的小倍数图表的创建。

其中最重要的3个是

  • facet_row
  • facet_col
  • facet_col_wrap

同样,这些参数也适用于px.scatterplot, px.line, px.histogram, px.imshow以及其他大多数Plotly express函数。 这些参数在所有这些工具的上下文中的作用是一样的。

让我们快速看一下这些参数的作用。

facet_row

facet_row= 参数控制的是将可视化分成不同面板的变量,垂直方向(即行方向)。

这通常是一个分类变量。

facet_col

facet_col= 参数控制变量,将可视化分成不同的面板,在水平方向上(即在列方向上)。

这通常是一个分类变量。

facet_col_wrap

facet_col_wrap= 参数控制水平方向(即 "列 "方向)上的面板数量。

这个参数的参数应该是一个整数。

因此,例如,如果你设置facet_col_wrap = 3 ,该函数将垂直地绘制新的面板,将有3个 "列 "的面板。 任何额外的面板将被 "包裹 "到一个新的面板行中。

像这样解释这些参数可能有些难以理解,所以了解它们如何工作的最好方法是通过清晰的例子。

例子:如何创建Plotly小的多个图表

现在我们已经看了与Plotly小型多图相关的语法和参数,让我们看一下一些例子。

例子

先运行这段代码

在你运行这些例子之前,你需要导入一些包并运行一些初步代码。

导入软件包

首先,我们需要导入几个Python包。

import seaborn as sns
import plotly.express as px

我们显然需要plotly.express 来创建我们的Plotly图表和Plotly小倍数。

我们还将使用Seaborn来获取数据集。

获取数据

在这些例子中,我们将使用Seaborn包中的diamonds 数据框架。

你可以通过以下代码获得它。

diamonds = sns.load_dataset('diamonds')

设置图像渲染

最后,在你运行Plotly之前,你可能需要改变一些设置,以便正确地渲染可视化。

默认情况下,Plotly被设置为在浏览器窗口渲染图像。

如果你使用像Spyder这样的集成开发环境来开发你的Python数据科学程序,你需要设置它来渲染Plotly的图。

注意,如果你使用的是Jupyter,你可以跳过这段代码!

要设置Plotly在你的IDE中把你的图画渲染成svg图片,你可以运行下面的代码。

import plotly.io as pio
pio.renderers.default = 'svg'

一旦你运行了所有这些初步的代码,你就应该可以运行这些例子了。

(如果你在设置上有任何问题,请在页面底部的评论区留言)。

例子1:创建一个简单的Plotly直方图

首先,我们将从创建一个简单的Plotly直方图开始。

我们将创建一个简单的直方图,因为这将作为我们以后创建的小型多图的基础。

让我们来看看。

px.histogram(data_frame = diamonds
             ,x = 'price'
             )

下面是输出结果

An image of a simple histogram made with Plotly.

解释

这里,我们正在绘制来自diamonds 数据框的数据。

具体来说,我们在X轴上绘制price 变量,并通过绘制直方图来显示其分布。

例子2:在1个变量上,按列绘制面图

现在我们有了例子1中的简单直方图,让我们通过一个分类变量来 "分面 "这个图。

具体来说,我们将沿着 "cut"变量的列进行分面。

让我们看一下。

px.histogram(data_frame = diamonds
             ,x = 'price'
             ,facet_col = 'cut'
             )

输出

An example of a small multiple chart, made with plotly, faceted along the columns by a categorical variable.

解释

注意,输出结果与例1中的输出结果非常相似。 具体来说,这个新图中的每个小 "面板 "都像是原始直方图的一个小版本。

所以在这里,我们对cut 这个变量进行了分面。 为了做到这一点,我们使用了facet_col 参数。 具体来说,我们设置了facet_col = 'cut' 。(注意,这个变量的名字是有引号的)。

在输出中,每个面板都是原始数据的一个小版本。 cut 变量的每个值都有一个面板。

这就是为什么我们称它为 "小倍数 "图表。 原始图表有多个小版本;面状变量的每一级都有一个小版本。

例子3:按行对1个变量进行分面分析

接下来,我们将对一个单一的变量进行分面,按行排列。

让我们看一下。

px.histogram(data_frame = diamonds
             ,x = 'price'
             ,facet_row = 'cut'
             )

输出

An image of a Plotly small multiple chart, faceted by row on a categorical variable.

解释

这与例子2非常相似。

但在这里,我们不是按列切面,而是按行切面。

为了做到这一点,我们设置了facet_row = 'cut'cut 变量是diamonds 数据框架中的一个分类变量。

由此产生的图包含了原始直方图的5个小版本,被组织成行。

实例4:按列包裹面板

接下来,我们将通过一个分类变量clarity ,沿列进行分面。

但是在这个例子中,分面变量clarity ,有太多的类别,不能很好地适应单行的面板。

因此,我们将使用facet_col_wrap ,在超过最大的面板数量后,将面板 "包裹 "到一个新的行中。

让我们看一下,然后我会进一步解释。

px.histogram(data_frame = diamonds
             ,x = 'price'
             ,facet_col = 'clarity'
             ,facet_col_wrap = 4
             )

输出

解释

那么这里发生了什么?

在这个例子中,我们在clarity 变量上进行了分面。 我们是按列进行分面的。

这个变量有8个独特的值,这可以说是太多了,无法在水平方向上适应。

因此,为了使面板在绘图区域内更合适,我们设置了facet_col_wrap = 4 。 这指定了我们最多希望有4个面板列(即4个面板的横向)。

在列方向达到4个面板后,facet_col_wrap 参数使Plotly将下一个面板 "包裹 "到一个新的行。

An explanation of the col_facet_wrap parameter in Plotly Express.

这就是它的全部作用。facet_col_wrap ,设置最大的面板跨度,并强制系统为额外的面板开始一个新行。

例子5:通过对两个变量进行切面处理来创建一个 "切面网格"

接下来,我们将对两个变量进行分面。

我们将在cut 变量上按列分面,在color 变量上按行分面。

px.histogram(data_frame = diamonds
             ,x = 'price'
             ,facet_col = 'cut'
             ,facet_row = 'color'
             )

输出

An example of a two-variable "facet grid" plot made with Plotly.

解释

在这里,我们对两个分类变量,cutcolor ,进行了分面处理。

为了做到这一点,我们使用了两个分面参数:facet_colfacet_row

具体而言,我们设置了facet_col = 'cut'facet_row = 'color'

正如你在输出图中所看到的,这已经将原始直方图分成了多个板块,由列中的cut 的值和行中的color 的值来划分。

这种类型的图对多变量数据分析非常有用。 你需要学习这种技术!

最后说明:你可以在不同的plotly可视化中使用这种技术

在我们结束之前,有一个最后的说明。

在本教程中,我已经用Plotly直方图演示了这些Plotly小多的技术。

但是,你可以用其他各种Plotly表达图来使用这个技术,例如。

  • plotly 散点图
  • plotly 柱状图
  • plotly 线形图
  • plotly imshow
  • ...和其他

这些参数对这些可视化的效果和对直方图的效果是一样的。 试试吧!


在这篇文章中,我已经向你展示了如何用Plotly Express创建小型多图。但要真正掌握用Plotly进行Python数据可视化,还有很多东西需要学习。