R语言 用Plotly创建交互式ggplot2图形
“一图胜千言”,如果用户能与之互动,这幅图就更有表现力了。因此,有了 “交互式图表 “的概念。交互式图表让演示者和听众都有更多的自由,因为它们允许用户放大和缩小,悬停和阅读与标记有关的信息,获得工具提示信息等。R提供了很多制作交互式图表的软件包。在这篇文章中,我们将重点介绍 plotly 和 ggplot。
Ggplot 是Tidyverse在R中的一个包。它基于Leland Wilkinson的Grammar of Graphics。ggplot使用Grammar of Graphics中列出的原则创建了复杂而繁琐的图。用户可以使用所有类型的数据,如单变量、多变量或分类数据,来创建数据。它是作为R中基本图形包的替代品,现在是R中最流行的数据可视化包之一。
然而,ggplot不能制作交互式图表。为了帮助ggplot创建交互式绘图,我们可以使用一个叫做plotly的包。
Plotly 是R语言中的一个开源包,它是基于同名的JavaScript,即plotly.js。Plotly包有助于创建交互式的、直观的绘图和图表。它还提供了将这些图形嵌入网页并保存在电脑上的能力。它与ggplot包一起被广泛用于制作复杂、错综复杂和有吸引力的数据可视化。
Plotly提供了一个名为ggplotly的包,它有助于将ggplot图表和图画转换为交互式图画和图形。
一旦R和RStudio设置好了,我们需要在Rstudio中安装以下软件包。
- Plotly
- Ggplot
- Dplyr
- car
- babynames
- Gapminder
为了安装这些软件包,我们使用以下命令。
我们还需要在RStudio会话中加载它们,如下所示。
现在我们已经在RStudio中安装并加载了所有需要的包,我们将使用不同的图来看看一些例子。
散点图
散点图通常显示两个数字变量之间的关系。每个点代表横轴和纵轴上的一个值。为了生成散点图,我们将使用R中的虹膜数据集。为了使用ggplot生成散点图,我们使用 geom_point 函数。
然而,该图不是互动的。我们使用ggplotly函数来使其具有交互性,并将绘图作为一个参数传递给该函数。Ggplotly提供了诸如放大、缩小、套索选择等选项。
另一个例子是汽车数据集中的距离与速度的散点图。
为了使其具有互动性,我们使用以下代码
条形图
条形图也被称为条形图,以垂直或水平方式绘制分类数据。为了使用 “mpg “数据集创建一个非交互式条形图,我们使用 geom_bar 函数。
为了使同样的图形用ggplotly进行互动,我们这样做。
面积图
面积图或面积图是直线图的延伸。面积图是填入其下面积的线图。为了绘制一个区域图,我们将使用babynames数据集。
我们只从数据集中过滤了最低数量的名字用于我们的可视化。我们使用geom_area函数创建面积图。
为了使上述图表具有互动性,我们使用ggplotly函数,如下所示。
泡沫图
泡沫图是散点图的延伸。泡泡图是你的数据的三维视觉表示,其中两个轴定义了点,而第三个维度代表了泡泡的大小。
我们将使用R中的空气质量数据集创建一个气泡图。我们使用geom_point()创建一个气泡图,将大小作为第三维添加。
然而,当气泡图是互动的时候,它就更有洞察力了。工具提示是为了指定我们要在图上显示的具体信息。
动画图表
有时,即使是交互式图表,画面也是不完整的。为复杂的图表添加动作可以帮助使变量之间的关系更加透明,并为图表添加更多的意义。为了达到这个目的,我们使用动画。
使用ggplotly包,我们可以添加动画,如范围滑块、动画帧、按钮等,在运动中显示变量之间的关系。动画通常对显示随时间变化的趋势的数据很有效。为了演示一个动画例子,我们将使用txhousing数据集。在第一个使用txhousing数据集的例子中,我们将画一个简单的图,显示每个城市多年来每月的房价中值。该年的中值被标记为一条红线。该图的非交互式版本仅使用ggplot,如下所示。
使用animation_opts函数,我们可以逐年显示中位线的移动。我们还可以放大并看到一部分数据,如下所示。
我们还可以显示每个城市的住房价值中位数的逐年增长。 要做到这一点,我们首先需要对数据集进行变异,以获得每个城市一年的住房价值中值。
然后,我们可以使用ggplot对这些数据进行绘制,如下所示。
上面的代码输出了一个非交互式的图形版本。为了使之成为动画,我们可以使用以下代码。
输出