在R中排列4个图形饼图

在R中排列4个图形饼图,r,ggplot2,plotly,legend,pie-chart,R,Ggplot2,Plotly,Legend,Pie Chart,我有四个单独的饼图,所有饼图都具有相同的指定颜色方案(除了数据帧之外,代码是相同的) 指定颜色是因为我想在4个网格图中与一个图例组合,使用5个组中每个组的相同指定颜色(即,如果未指定颜色,则会根据组的大小自动分配颜色) 示例数据: # Data g = c("D","L","X","A","N","B") v = c(49,14,9,7,6,5) df1 = data.frame(group = g, value = v) set.seed(9) # Just for reproductibi

我有四个单独的饼图,所有饼图都具有相同的指定颜色方案(除了数据帧之外,代码是相同的)

指定颜色是因为我想在4个网格图中与一个图例组合,使用5个组中每个组的相同指定颜色(即,如果未指定颜色,则会根据组的大小自动分配颜色)

示例数据:

# Data
g = c("D","L","X","A","N","B")
v = c(49,14,9,7,6,5)

df1 = data.frame(group = g, value = v)
set.seed(9) # Just for reproductibility
df2 = data.frame(group = sample(g,size = nrow(df1),replace = F),
                 value = sample(v,size = nrow(df1),replace = F)
                 )

set.seed(8) 
df3 = data.frame(group = sample(g,size = nrow(df1),replace = F),
                 value = sample(v,size = nrow(df1),replace = F)
)

set.seed(7)
df4 = data.frame(group = sample(g,size = nrow(df1),replace = F),
                 value = sample(v,size = nrow(df1),replace = F)
)

守则:

BC <- 

       plot_ly(b_c, labels = ~group, values = ~value, marker = list(colors = c(  '#2ca02c',  '#d62728','#9467bd', '#FF7F0E', '#1F77B4')), type = 'pie',textposition = 'outside',textinfo = 'label+percent') %>%
       layout(title = 'b_c',autosize = F, width = 690, height = 690, margin = m,
              xaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE),
              yaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE))
     BC   
BC%
布局(标题='b_c',自动大小=F,宽度=690,高度=690,边距=m,
xaxis=list(showgrid=FALSE,zeroline=FALSE,showticklabels=FALSE),
yaxis=list(showgrid=FALSE,zeroline=FALSE,showticklabels=FALSE))
卑诗省
我已经审阅了这些帖子,但还不能确定从这些帖子中梳理情节的答案

我正在寻找类似ggplot中ggarrange的东西

我有四组数据,其中一些具有相同的组(即相同的行名称)。对于这些,我想使用相同的颜色


我真的不介意颜色方案(即,可以是任何颜色),但希望有一个统一的颜色图例为所有4个图形

Hi@sar看看它是否解决了您的问题:

library(plotly)
library(dplyr)

# Data
g = c("D","L","X","A","N","B")
v = c(49,14,9,7,6,5)

df1 = data.frame(group = g, value = v)
set.seed(9) # Just for reproductibility
df2 = data.frame(group = sample(g,size = nrow(df1),replace = F),
                 value = sample(v,size = nrow(df1),replace = F)
                 )

set.seed(8) 
df3 = data.frame(group = sample(g,size = nrow(df1),replace = F),
                 value = sample(v,size = nrow(df1),replace = F)
)

set.seed(7)
df4 = data.frame(group = sample(g,size = nrow(df1),replace = F),
                 value = sample(v,size = nrow(df1),replace = F)
)


#Plot

plot_ly(labels = ~group, values = ~value, legendgroup = ~group,
        textposition = 'outside',textinfo = 'label+percent') %>%
  add_pie(data = df1, name = "DF1", domain = list(row = 0, column = 0))%>%
  add_pie(data = df2, name = "DF2", domain = list(row = 0, column = 1))%>%
  add_pie(data = df3, name = "DF3", domain = list(row = 1, column = 0))%>%
  add_pie(data = df4, name = "DF4", domain = list(row = 1, column = 1))%>%
  layout(title = "Pie Charts in Grid", showlegend = T,
         grid=list(rows=2, columns=2),
         xaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE),
         yaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE))

输出:

EDIT1: 要为您可以使用的每个饼图显示“字幕”,还可以更改位置。注释的drawnback是您必须指定位置(在本例中是手动的)

为了避免重叠,我建议删除
textposition='outside'

您可以使用绘图右上角的按钮将绘图下载为.png

#Plot

plot_ly(labels = ~group, values = ~value, legendgroup = ~group, 
        textinfo = 'label+percent') %>%
  add_pie(data = df1, name = "DF1", domain = list(row = 0, column = 0))%>%
  add_pie(data = df2, name = "DF2", domain = list(row = 0, column = 1))%>%
  add_pie(data = df3, name = "DF3", domain = list(row = 1, column = 0))%>%
  add_pie(data = df4, name = "DF4", domain = list(row = 1, column = 1))%>%
  layout(title = "Pie Charts in Grid", showlegend = T,
         grid=list(rows=2, columns=2),
         xaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE),
         yaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE),
         legend = list(y = 0.5),
         annotations = list(x = c(.08, .62, .08, .62),
                            y = c(.78, .78, .22, .22),
                            text = c("Pie 1","Pie 2","Pie 3","Pie 4"),
                            xref = "papper",
                            yref = "papper",
                            showarrow = F
                          )
         )
新的产出是:

EDIT2: 看一眼或看一眼

您可以使用鼠标更改文本和悬停文本

这里有一个编辑建议去掉标签以获得更多的百分比空间,并将百分比四舍五入到1个小数位数:

#Plot

plot_ly(labels = ~group, values = ~value, legendgroup = ~group, textinfo = 'label+percent',
        texttemplate = "%{percent:.1%}",
        hovertemplate = "%{label} <br> %{percent:.1%} <br> %{value}") %>%
  add_pie(data = df1, name = "DF1", domain = list(row = 0, column = 0))%>%
  add_pie(data = df2, name = "DF2", domain = list(row = 0, column = 1))%>%
  add_pie(data = df3, name = "DF3", domain = list(row = 1, column = 0))%>%
  add_pie(data = df4, name = "DF4", domain = list(row = 1, column = 1))%>%
  layout(title = "Pie Charts in Grid", showlegend = T,
         grid=list(rows=2, columns=2),
         xaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE),
         yaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE),
         legend = list(y = 0.5),
         annotations = list(x = c(.08, .62, .08, .62),
                            y = c(.78, .78, .22, .22),
                            text = c("Pie 1","Pie 2","Pie 3","Pie 4"),
                            xref = "papper",
                            yref = "papper",
                            showarrow = F
                          )
         )
#绘图
绘图(标签=~group,值=~value,legendgroup=~group,textinfo='label+percent',
texttemplate=“%{percent:.1%}”,
hovertemplate=“%{label}
%{percent:.1%}
%{value}”)%%>% 添加饼图(data=df1,name=“df1”,domain=list(行=0,列=0))%>% 添加饼图(data=df2,name=“df2”,domain=list(行=0,列=1))%>% 添加饼图(data=df3,name=“df3”,domain=list(行=1,列=0))%>% 添加饼图(data=df4,name=“df4”,domain=list(行=1,列=1))%>% 布局(title=“网格中的饼图”,showlegend=T, 网格=列表(行=2,列=2), xaxis=list(showgrid=FALSE,zeroline=FALSE,showticklabels=FALSE), yaxis=list(showgrid=FALSE,zeroline=FALSE,showticklabels=FALSE), 图例=列表(y=0.5), 注释=列表(x=c(.08、.62、.08、.62), y=c(.78.78.22.22), text=c(“饼图1”、“饼图2”、“饼图3”、“饼图4”), xref=“papper”, yref=“papper”, 显示箭头=F ) )
新产出:


您能否提供一些数据@sar?如果可能的话,画出的图应该是什么样子,现在看起来是什么样子。嗯,我在另一台计算机上打开了这个,现在我得到了这个错误。现在不推荐在布局()中指定宽度/高度。请在ggplotly()或plot_ly()@vpz中指定我已添加的数据示例。我想将4个图形排列在一个2x2的正方形中,其中一个图例显示相同组的相同颜色。我添加了一个答案建议。这对你有帮助吗?嗨@sar我现在做了一个编辑。我希望它能帮助你,我真的不知道侯把脚笔记和ommit低百分比组。但您可以根据需要调整文本格式和文本格式。看一看编辑2Hi@sar对不起,我没有理解你说的“线在图表外”是什么意思。你能在评论中放一张图片吗?对于图例,可以在代码行中调整位置
legend=list(…)
。我相信你也可以为图例调整
文本字体
。@sar保存图像的另一个解决方案是在控制台上运行代码并在Viwer窗格中生成绘图(通常在Rstudio的右下方)。然后单击导出并将图像另存为.PNG。在这里,您可以指定标注方式。修改标签的另一种方法是在每个
data.frame
中使用所需的标签构建另一列。类似于:
df1=df1%>%mutate(new\u lab=case\u when(…)