85

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

 5 years ago
source link: http://www.10tiao.com/html/403/201806/2650629731/1.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.


笔者邀请您,先思考:

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)

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

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')
)

布局命令用于定义图的标题,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')
)

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

  • 放大图

  • 重置轴

  • 做盒子选择,套索选择

  • 将图下载为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')
)

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

折线图和时间序列

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

attach(airquality)
glimpse(airquality)
head(airquality)

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

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')
)

直方图

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

hist <- plot_ly(
 x = ~Sepal.Length,
 type = 'histogram'
)
layout(
 hist,
 title = 'Histogram',
 xaxis = list(title = 'Sepal length'),
 yaxis = list(title = 'count')
)

条形图

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

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')

带散点图的折线图

因为我们已经分别创建了折线图和散点图。 现在是时候添加这两个以创建一个包含这两个图表的图表。 为了完成这个,我们需要使用命令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'
 )

箱子图

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

attach(mtcars)
glimpse(mtcars)
box <- plot_ly(
 y = ~hp,
 type = 'box'
)
layout(
 box,
 title = 'Box Plot',
 yaxis = list(title = 'Horse Power')
)

热图

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

data(volcano)
glimpse(volcano)
dim(volcano)
plot_ly(z = ~volcano,type = 'heatmap')

3D散点图

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

plot_ly(
 x = ~Sepal.Length,
 y = ~Sepal.Width,
 z = ~Petal.Length,
 type="scatter3d",
 mode = 'markers',
 size = ~Petal.Width,
 color = ~Species
)

结论

通过阅读文章,您现在应该熟悉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
)

作者:
Rohit, 
Vishnu Reddy, 
Saneesh Veetil 
and Chaitanya Sagar
原文链接:
http://www.data-mania.com/blog/interactive-data-visualizations/

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

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

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


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


公众号推荐:

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

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



About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK