数据故事使用R进行交互式数据可视化

Posted R语言

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据故事使用R进行交互式数据可视化相关的知识,希望对你有一定的参考价值。


笔者邀请您,先思考:

1 交互式可视化有什么应用场景?

2 您会用R工具做交互式可视化?

数据可视化与科学一样是一门艺术。 有很多工具可用于在R中生成可视化。一些受欢迎的工具是ggplot和ggvis。 虽然ggplot是创建静态可视化的惊人工具,但当您需要创建交互式数据可视化时,它的性能往往不足。 ggvis也是如此。 这是Plotly积极派上用场的地方。 Plotly可以轻松创建丰富的交互式数据可视化,而无需掌握CSS或javascript的知识。

什么是Plotly?

Plotly是建立在可视化库(如html,D3.js和CSS)之上的数据可视化工具。 它是使用Django框架创建的。 它与多种语言兼容。 由plotly生成的图表可以使用plotly的API在线托管。

Plotly的优点:

  • 在不知道D3.js的语言的情况下,使用D3.js轻松构建可视化

  • 兼容多种语言

  • Plotly生成的图表可以在线托管,以便其他人可以访问它们

  • 使用Chart Studio创建的图表不需要编码,因此非编码人员可以轻松使用它们

  • Plotly的语法很简单

  • Plotly与R上的ggplot2兼容

Plotly的缺点:

  • 使用社区版Plotly创建的图表可供所有人访问

  • 限制每日API调用

在R中使用Plotly构建交互式数据可视化

正如我们已经看过Plotly的优点和缺点一样。 我们开始构建交互式数据可视化。 首先要做的是安装Plotly

if(!require(plotly))
{
 install.packages("plotly")
 require(plotly)
}

在创建图表之前,让我们看看用于创建可视化的语法
plot_ly( x, y, type, mode, color, size)

这里 -

  • x = x轴的值

  • y = y轴的值

  • type =指定需要创建的图的类型。 例如 - 'scatter','box'或'histogram'

  • mode =绘图需要表示的模式

  • color =表示数据点的颜色

散点图

让我们从交互式数据可视化选项中创建一个散点图类型开始。 我们将使用iris数据集(驻留在R中,无需加载外部文件)创建散点图。 我们附上iris数据集并查看前几行。 此外,我们将使用glimpse函数查看数据的结构。

library(dplyr)
attach(iris)
head(iris)
glimpse(iris)
【数据故事】使用R进行交互式数据可视化

查看数据,我们可以观察到有四个连续的变量,而物种是分类的。 创建散点图的语法是

sca <- plot_ly(
 x = ~ Sepal.Length,
 y = ~ Petal.Length,
 type = "scatter"
)
layout(
 sca,
 title = "Scatter Plot",
 xaxis = list(title = 'Sepal length'),
 yaxis = list(title = 'Petal length')
)
【数据故事】使用R进行交互式数据可视化

布局命令用于定义图的标题,x轴和y轴。
让我们通过添加颜色添加更多图层,以便区分物种彼此。

sca <- plot_ly(
 x = ~Sepal.Length,
 y = ~Petal.Length,
 type = 'scatter',
 color = ~Species
)
layout(
 sca,
 title = 'Scatter Plot',
 xaxis = list(title = 'Sepal length'),
 yaxis = list(title = 'Petal length')
)
【数据故事】使用R进行交互式数据可视化

现在图已经形成,我们可以 -

  • 放大图

    【数据故事】使用R进行交互式数据可视化
  • 重置轴

  • 做盒子选择,套索选择

【数据故事】使用R进行交互式数据可视化
  • 将图下载为png

让我们尝试添加大小变量以使散点图显示Sepal长度的读数。

sca <- plot_ly(
 x = ~Sepal.Length,
 y = ~Petal.Length,
 type = 'scatter',
 color = ~Species,
 size = ~Sepal.Length
)
layout(
 sca,
 title = 'Scatter Plot',
 xaxis = list(title = 'Sepal length'),
 yaxis = list(title = 'Petal length')
)
【数据故事】使用R进行交互式数据可视化

从上图可以看出,随着萼片长度的读数趋于增加,标记趋于增加。

折线图和时间序列

为了创建折线图,我们将使用空气质量数据集

attach(airquality)
glimpse(airquality)
head(airquality)
【数据故事】使用R进行交互式数据可视化

查看数据的结构,可以看出所有变量都是比率/间隔类型。 我们将用时间序列绘制Solar.R值。

ti <- plot_ly(
 y = ~Solar.R,
 type = 'scatter',
 mode = 'lines'
)
layout(
 ti,
 title = 'Time Series',
 yaxis = list(title = 'Solar Reading')
)
【数据故事】使用R进行交互式数据可视化

让我们在上面的图表中添加标记

ti <- plot_ly(
 y = ~Solar.R,
 type = 'scatter',
 mode = 'lines+markers'
)
layout(
 ti,
 title = 'Time Series',
 yaxis = list(title = 'Solar Reading')
)
【数据故事】使用R进行交互式数据可视化

直方图

接下来我们从iris数据集创建直方图。 我们使用Sepal长度来创建计数。

hist <- plot_ly(
 x = ~Sepal.Length,
 type = 'histogram'
)
layout(
 hist,
 title = 'Histogram',
 xaxis = list(title = 'Sepal length'),
 yaxis = list(title = 'count')
)
【数据故事】使用R进行交互式数据可视化

条形图

用iris数据我们创建一个条形图。

bar <- plot_ly(
 x = ~Sepal.Length,
 type = 'bar'
)
layout(
 bar,
 title = 'Bar Plot',
 xaxis = list(title = 'Species'),
 yaxis = list(title = 'count')
)
【数据故事】使用R进行交互式数据可视化

这只是一个普通的条形图,我们可以创建堆积的条形图。 为此我们创建一些自定义数据。

Animals <- c("giraffes", "orangutans", "monkeys")
SF_Zoo <- c(20, 14, 23)
LA_Zoo <- c(12, 18, 29)
data <- data.frame(Animals, SF_Zoo, LA_Zoo)
p <- plot_ly(
 data,
 x = ~Animals,
 y = ~SF_Zoo,
 type = 'bar',
 name = 'SF Zoo'
) %>%
 add_trace(y = ~LA_Zoo, name = 'LA Zoo')
layout(p,yaxis = list(title = 'Count'), barmode = 'stack')
【数据故事】使用R进行交互式数据可视化

带散点图的折线图

因为我们已经分别创建了折线图和散点图。 现在是时候添加这两个以创建一个包含这两个图表的图表。 为了完成这个,我们需要使用命令add_trace。 首先让我们创建一些数据。

  • trace_1从均值为0的正态分布中创建100个随机值

  • trace_2从均值为-5的正态分布中创建100个随机值

数据框的头部

head(data)
plot_ly(
 data,
 x = ~x,
 y = ~trace_1,
 type = 'scatter',
 mode = 'lines+markers', name = 'trace1'
) %>%
 add_trace(
   y = ~trace_2,
   mode = 'markers',
   name = 'trace2'
 )
【数据故事】使用R进行交互式数据可视化

箱子图

Plotly也可以用来创建出色的箱子图。 使用来自mtcars的数据,我们为马力值创建一个箱形图。

attach(mtcars)
glimpse(mtcars)
box <- plot_ly(
 y = ~hp,
 type = 'box'
)
layout(
 box,
 title = 'Box Plot',
 yaxis = list(title = 'Horse Power')
)
【数据故事】使用R进行交互式数据可视化

热图

让我们开始创建一些更高级的交互式数据可视化,Plotly从热图开始。对于这个特定练习,我们将使用volcano数据集。

data(volcano)
glimpse(volcano)
dim(volcano)
plot_ly(z = ~volcano,type = 'heatmap')
【数据故事】使用R进行交互式数据可视化

3D散点图

这是迄今为止Plotly中最酷的交互式数据可视化技巧之一。 对于这张图表,我们将再次使用iris数据集。 并定义三个轴的值。

plot_ly(
 x = ~Sepal.Length,
 y = ~Sepal.Width,
 z = ~Petal.Length,
 type="scatter3d",
 mode = 'markers',
 size = ~Petal.Width,
 color = ~Species
)
【数据故事】使用R进行交互式数据可视化

结论

通过阅读文章,您现在应该熟悉R中Plotly的工作情况。Plotly广泛用于仪表板以创建交互式数据可视化。 它在交互方面具有超过ggplot的优势,但可以与ggplot一起使用来创建要推送到云中的图。 那么,现在是时候让你们继续前进,并开始用Plotly创建出色的可视化效果。

完整代码

# 加载R包
if(!require(plotly))
{
 install.packages("plotly")
 require(plotly)
}
library(dplyr)
# 数据查看
attach(iris)
head(iris)
glimpse(iris)
# 散点图
sca <- plot_ly(
 x = ~ Sepal.Length,
 y = ~ Petal.Length,
 type = "scatter"
)
layout(
 sca,
 title = "Scatter Plot",
 xaxis = list(title = 'Sepal length'),
 yaxis = list(title = 'Petal length')
)
sca <- plot_ly(
 x = ~Sepal.Length,
 y = ~Petal.Length,
 type = 'scatter',
 color = ~Species
)
layout(
 sca,
 title = 'Scatter Plot',
 xaxis = list(title = 'Sepal length'),
 yaxis = list(title = 'Petal length')
)
attach(airquality)
glimpse(airquality)
head(airquality)
ti <- plot_ly(
 y = ~Solar.R,
 type = 'scatter',
 mode = 'lines'
)
layout(
 ti,
 title = 'Time Series',
 yaxis = list(title = 'Solar Reading')
)
ti <- plot_ly(
 y = ~Solar.R,
 type = 'scatter',
 mode = 'lines+markers'
)
layout(
 ti,
 title = 'Time Series',
 yaxis = list(title = 'Solar Reading')
)
# 直方图
hist <- plot_ly(
 x = ~Sepal.Length,
 type = 'histogram'
)
layout(
 hist,
 title = 'Histogram',
 xaxis = list(title = 'Sepal length'),
 yaxis = list(title = 'count')
)
# 条形图
bar <- plot_ly(
 x = ~Sepal.Length,
 type = 'bar'
)
layout(
 bar,
 title = 'Bar Plot',
 xaxis = list(title = 'Species'),
 yaxis = list(title = 'count')
)
Animals <- c("giraffes", "orangutans", "monkeys")
SF_Zoo <- c(20, 14, 23)
LA_Zoo <- c(12, 18, 29)
data <- data.frame(Animals, SF_Zoo, LA_Zoo)
p <- plot_ly(
 data,
 x = ~Animals,
 y = ~SF_Zoo,
 type = 'bar',
 name = 'SF Zoo'
) %>%
 add_trace(y = ~LA_Zoo, name = 'LA Zoo')
layout(p,yaxis = list(title = 'Count'), barmode = 'stack')
trace_1 <- rnorm(100, mean = 0)
trace_2 <- rnorm(100, mean = -5)
x <- c(1:100)
data <- data.frame(x, trace_1, trace_2)
head(data)
plot_ly(
 data,
 x = ~x,
 y = ~trace_1,
 type = 'scatter',
 mode = 'lines+markers', name = 'trace1'
) %>%
 add_trace(
   y = ~trace_2,
   mode = 'markers',
   name = 'trace2'
 )
# 箱子图
attach(mtcars)
glimpse(mtcars)
box <- plot_ly(
 y = ~hp,
 type = 'box'
)
layout(
 box,
 title = 'Box Plot',
 yaxis = list(title = 'Horse Power')
)
# 热图
data(volcano)
glimpse(volcano)
dim(volcano)
plot_ly(z = ~volcano,type = 'heatmap')
plot_ly(
 x = ~Sepal.Length,
 y = ~Sepal.Width,
 z = ~Petal.Length,
 type="scatter3d",
 mode = 'markers',
 size = ~Petal.Width,
 color = ~Species
)

版权声明:作者保留权利,严禁修改,转载请注明原文链接。

数据人网是数据人学习、交流和分享的平台http://shujuren.org 。专注于从数据中学习到有用知识。
平台的理念:人人投稿,知识共享;人人分析,洞见驱动;智慧聚合,普惠人人。
您在数据人网平台,可以1)学习数据知识;2)创建数据博客;3)认识数据朋友;4)寻找数据工作;5)找到其它与数据相关的干货。
我们努力坚持做原创,聚合和分享优质的省时的数据知识!
我们都是数据人,数据是有价值的,坚定不移地实现从数据到商业价值的转换!

加入数据人圈子或者商务合作,请添加笔者微信。

【数据故事】使用R进行交互式数据可视化


点击阅读原文,进入数据人网,获取数据知识。


公众号推荐:

链达君,专注于分享区块链内容。

脚印英语,专注于分享英语口语内容。


以上是关于数据故事使用R进行交互式数据可视化的主要内容,如果未能解决你的问题,请参考以下文章

如何用故事型思维打造交互式数据可视化产品

数据故事使用ggplot2进行数据可视化

利用R语言进行交互数据可视化(转)

拓端tecdat|R语言编程指导时间序列数据指数平滑法分析交互式动态可视化

R语言时间序列数据指数平滑法分析交互式动态可视化

R语言GEO数据挖掘-功能富集分析