前文回顾:R语言ggplot基本语法介绍
在R语言中,除ggplot外,plotly也是一大常用的绘图包,其与ggplot的区别在于它的可交互性,本文主要整理其基本绘图命令。
plotly插件包绘图方式主要分两种:一是将ggplot对象直接转为plotly对象;二是直接使用初始化plotly函数进行绘制
library(ggplot2)
library(plotly)
p<-ggplot(data=iris,
aes(x=Sepal.Length,
y=Petal.Length,
colour=Species))+
geom_point()
ggplotly(p)
交互式体现:可通过鼠标查看数据标签、点击右侧的图例可控制散点显隐
plot_ly(data=iris,
x = ~Sepal.Length,
y = ~Petal.Length,
type='scatter')%>%
layout(title='iris scatter',
yaxis=list(zeroline=FALSE),
xaxis=list(zeroline=FALSE))
R语言环境下R语言代码转为plotly包图形的关键在于plotly.js所需的json格式数据的转换,主要经历以下三个步骤:
1、使用plotly_build()
函数将R语言代码转为R语言列表
2、使用plotly_json()
函数将R语言列表转换为JSON格式数据传给plotly.js
3、由plotly.js
根据输入的数据生成plotly
插件包图形
plotly主要参数 | 含义 |
---|---|
type | 绘图类型 |
mode | 绘图名称 |
name | 图例名称 |
iris_data<-data.frame(Species=names(tapply(iris$Sepal.Length,
iris$Species,mean)),
Sepal.Length=c(tapply(iris$Sepal.Length,
iris$Species,mean)),
Petal.Length=c(tapply(iris$Sepal.Length,
iris$Species,mean)))
#绘制单组条形图
p1<-plot_ly(data=iris,
x=~Species,
y=~Sepal.Length,
name="Sepal.Length",
type='bar')
p1
#多组条形图
p2<-p1%>%
add_bars(y=~Petal.Length,
name="Petal.Length")%>%
layout(yaxis=list(title='Length'),
barmode='group')
p2
#堆积柱形图
p3<-p1%>%
add_bars(y=~Petal.Length,
name="Petal.Length")%>%
layout(yaxis=list(title='Length'),
barmode='stack')
p3
data_0<-rnorm(100,mean=15)
data_1<-rnorm(100,mean=10)
data_2<-rnorm(100,mean=5)
id<-c(1:100)
data<-data.frame(id,data_0,data_1,data_2)
plot_ly(data,
x=~id,
y=~data_0,
name='lines',
type='scatter',
mode='lines')%>%
add_trace(y=~data_1,
name='lines+points',
mode='lines+markers')%>%
add_trace(y=~data_2,
name='points',
mode='markers')
data<-data.frame(category=c("类别1","类别2","类别3","类别4","类别5"),
values=c(0.35,0.25,0.2,0.15,0.05),
stringsAsFactors=T)
#饼图
plot_ly(data=data,
labels=~category,
values=~values)%>%
add_pie()
#圆环
plot_ly(data=data,
labels=~category,
values=~values)%>%
add_pie(hole=0.5)
#箱线图
plot_ly(x=~iris$Sepal.Length,
name="Sepal.Length",
type="box")%>%
add_trace(x=~iris$Sepal.Width,
name="Sepal.Width")%>%
add_trace(x=~iris$Petal.Length,
name="Petal.Length")%>%
add_trace(x=~iris$Petal.Width,
name="Petal Width")%>%
layout(xaxis=list(title=""))
#直方图
plot_ly(x=rnorm(1000),
type='histogram',
marker=list(
color="rgb(159,202,225)",
line=list(
color="rgb(8,48,107)",
width=1.5))
)
plot_ly(type='scatterpolar',
mode='markers',
fill="toself")%>%
add_trace(r=c(data$values_1,data$values_1[1]),
theta=c(data$x,data$x[1]),
name="类别1")%>%
add_trace(r=c(data$values_2,data$values_2[2]),
theta=c(data$x,data$x[1]),
name="类别2")%>%
layout(
polar=list(
radialaxis=list(
visible=T,
range=c(0,100)
)),
showlegend=T
)
library(gapminder)
plot_ly(gapminder,
x=~gdpPercap,
y=~lifeExp,
size=~pop,
color=~continent,
frame=~year,
text=~country,
hoverinfo="text",
type="scatter",
mode="markers")%>%
layout(
xaxis=list(title="人均GDP",type="log"),
yaxis=list(title="预期寿命"))%>%
animation_slider(
currentvalue=list(prefix="当前年度",font=list(color="red")))%>%
animation_button(label="播放")%>%
animation_opts(1000,easing="elastic",redraw=T)
以上则是本文分享的全部内容