Placing donut charts side by side using plotly in R

不羁岁月 提交于 2021-02-08 10:39:05

问题


I have created donut charts from plotly from the following:

library(plotly)
library(RColorBrewer)
test<-data_frame(Score=c("Green","Green","Yellow","Yellow","Clear","Clear","Red","Red"),Lang=c(rep("Eng",4),rep("Esp",4)))

test1<-data_frame(Score=c("Green","Yellow","Yellow","Yellow","Clear","Clear","Red","Red"),Lang=c(rep("Eng",4),rep("Esp",4)))

color_order<-c("Green","Clear","Yellow","Red")
colors<-c("#31a354","#bdbdbd","#fec44f","#de2d26")

a<-test %>%
mutate(Score=factor(Score,levels=color_order))%>%
arrange(Score)%>%
group_by(Score)%>%
summarize(count = n()) %>%
plot_ly(labels = ~Score,
      values = ~count,
      hoverinfo="skip",
      text = ~count,
      marker = list(colors = colors),
      legendgroup = ~Score) %>%
add_pie(hole = 0.6) %>%
layout(title = "test chart1", showlegend = TRUE,
     font=list(family="sans serif",color="#000"),
     plot_bgcolor="#f0f0f0",
     legend = list(orientation = 'h',font=list(size=28)),
     xaxis = list(title=paste0("Total: ",nrow(test)), showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE),
     yaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE))

b<-test1 %>%
mutate(Score=factor(Score,levels=color_order))%>%
arrange(Score)%>%
group_by(Score)%>%
summarize(count = n()) %>%
plot_ly(labels = ~Score,
      values = ~count,
      hoverinfo="skip",
      text = ~count,
      marker = list(colors = colors),
      legendgroup = ~Score) %>%
add_pie(hole = 0.6) %>%
layout(title = "test chart2", showlegend = FALSE,
     font=list(family="sans serif",color="#000"),
     plot_bgcolor="#f0f0f0",
     legend = list(orientation = 'h',font=list(size=28)),
     xaxis = list(title=paste0("Total: ",nrow(test1)),showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE),
     yaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE))

I am attempting to put them side by side with the common legend from plot a, and I run the following:

subplot(a,b,nrows = 1)

However, I only see one plot which appears to be a combination of the two. I also tried the approach here: Plotly: Bar and pie charts side by side, but it just gave me inception style donut within a donut. How can I put them next to each other with the common legend? Thanks.


回答1:


According to this (https://plot.ly/r/pie-charts/), in order to create pie chart subplots, you need to use the domain attribute. You could try something like this (adjust domain for your needs):

a <- test %>%
    mutate(Score=factor(Score,levels=color_order))%>%
    arrange(Score)%>%
    group_by(Score)%>%
    summarize(count = n())

b<-test1 %>%
    mutate(Score=factor(Score,levels=color_order))%>%
    arrange(Score)%>%
    group_by(Score)%>%
    summarize(count = n())

p <- plot_ly() %>%
    add_pie(data = a, labels = ~Score, values = ~count, hole = 0.6,
            name = "a", domain = list(x = c(0, 0.4), y = c(0.4, 1))) %>%
    add_pie(data = b, labels = ~Score, values = ~count, hole = 0.6,
            name = "b", domain = list(x = c(0.6, 1), y = c(0.4, 1)))  %>%
    layout(title = "test chart1", showlegend = TRUE,
           font=list(family="sans serif",color="#000"),
           plot_bgcolor="#f0f0f0",
           legend = list(orientation = 'h',font=list(size=28)),
           xaxis = list(title=paste0("Total: ",nrow(test)), showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE),
           yaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE))


来源:https://stackoverflow.com/questions/49436546/placing-donut-charts-side-by-side-using-plotly-in-r

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!