如何解决在R中绘制plot_ly图的子图
我有一个数据框,可以通过以下方式创建:
x = data.frame(metrics=c("type1","type1","orders","mean","mean"),hr=c(6,7,8,6,8),actual=c(14,20,34,56,12,78,89))
我试图使用plot_ly函数绘制散点图。我为此编写了一个函数(我需要将其作为一个函数):
plot <- function(df){
gp <- df %>%
plot_ly(
x = ~ hr,y = ~ actual,group = ~ metrics,hoverinfo = "text",hovertemplate = paste(
"<b>%{text}</b><br>","%{xaxis.title.text}: %{x:+.1f}<br>","%{yaxis.title.text}: %{y:+.1f}<br>","<extra></extra>"
),type = "scatter",mode = "markers",marker = list(
size = 18,color = "white",line = list(color = "black",width = 1.5)
),width = 680,height = 420
)
gp
}
如您所见,所有三个指标都是一对一的图。我如何使用子图将它们分别放在单独的图上?
解决方法
您必须使用subplot
为每个图形创建一个单独的绘图对象。我们可以使用循环来做到这一点:
library(plotly)
x = data.frame(
metrics = rep(c("type1","orders","mean"),each = 3),hr = c(6,7,8,6,8),actual = c(14,20,34,56,12,78,89)
)
plot <- function(df) {
subplotList <- list()
for(metric in unique(df$metrics)){
subplotList[[metric]] <- df[df$metrics == metric,] %>%
plot_ly(
x = ~ hr,y = ~ actual,name = metric,hoverinfo = "text",hovertemplate = paste(
"<b>%{text}</b><br>","%{xaxis.title.text}: %{x:+.1f}<br>","%{yaxis.title.text}: %{y:+.1f}<br>","<extra></extra>"
),type = "scatter",mode = "markers",marker = list(
size = 18,color = "white",line = list(color = "black",width = 1.5)
),width = 680,height = 420
)
}
subplot(subplotList,nrows = length(subplotList),margin = 0.1)
}
plot(x)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。