R 在饼图中设置标签的位置

R 在饼图中设置标签的位置,r,plotly,r-plotly,R,Plotly,R Plotly,我试图找出如何更改饼图中标签的文本位置或使其更具可读性(?)。 下面是示例和可复制代码的屏幕截图: df% 布局(showlegend=FALSE,分隔符=',.)%>%config(displayModeBar=F) 我的问题(我想实现的目标): 如果标签无法水平匹配其所在的空间,则应将其放置在饼图之外 谢谢你的帮助 [!!]由@Saurabh Chauhan建议的方法非常好,但不幸的是,它不会每次都匹配,下面是一个屏幕截图,它可以显示问题,即使在高频情况下,一些标签也不是水平的: 最简单

我试图找出如何更改饼图中标签的文本位置或使其更具可读性(?)。 下面是示例和可复制代码的屏幕截图:

df%
布局(showlegend=FALSE,分隔符=',.)%>%config(displayModeBar=F)
我的问题(我想实现的目标):

如果标签无法水平匹配其所在的空间,则应将其放置在饼图之外

谢谢你的帮助

[!!]由@Saurabh Chauhan建议的方法非常好,但不幸的是,它不会每次都匹配,下面是一个屏幕截图,它可以显示问题,即使在高频情况下,一些标签也不是水平的:


最简单的方法是检查
频率。如果
freq
小于某个值,例如
小于5%
,则标签应位于外部,如下所示:

plot_ly(df, labels=~Gruppierung,values=~freq, marker = list(line = list(color = '#FFFFFF', width = 1)), type="pie",
    textposition = ifelse(df$freq<5,"outside","inside"),textinfo = 'text',
    hoverinfo = 'text',source = "subset",
    text=~paste(sub(" ","<br>",Gruppierung),":","<br>",paste0(freq,"%") ),
    insidetextfont = list(color = '#FFFFFF')) %>%
    layout(showlegend = FALSE,separators = ',.') %>% config(displayModeBar = F)
plot_-ly(df,labels=~Gruppierung,values=~freq,marker=list(line=list(color='#FFFFFF',width=1)),type=“pie”,
textposition=ifelse(df$freq%
布局(showlegend=FALSE,分隔符=',.)%>%config(displayModeBar=F)
工作演示的屏幕截图:

已更新


还有一个结果(当
freq时,感谢您提出了一个伟大而简单的想法!然而,这种方法并不总是有效。请参阅我的附加说明。)comments@Mal_a:我有更新的答案。请检查更新的部分好吗?我认为这是您的查看器的问题。请尝试在外部窗口中打开可视化,您可以看到上面的视图。请随时更正我!如果你是指查看器的话,我实际上是故意这么做的。最初我的plotly在shiny应用程序中,只占用很小的空间。@Mal_a:你可以通过使用
fixedRow(第10列,plotlyOutput(“plot”))
增加shiny中的空间,这样它就可以占用更多的空间。你可以将它增加到第12或15列(根据您的要求)占用更多的空间。是的,我知道我可以增加饼图的空间,但是我故意将其缩小,因此在我的情况下不可能增加空间
plot_ly(df, labels=~Gruppierung,values=~freq, marker = list(line = list(color = '#FFFFFF', width = 1)), type="pie",
    textposition = ifelse(df$freq<5,"outside","inside"),textinfo = 'text',
    hoverinfo = 'text',source = "subset",
    text=~paste(sub(" ","<br>",Gruppierung),":","<br>",paste0(freq,"%") ),
    insidetextfont = list(color = '#FFFFFF')) %>%
    layout(showlegend = FALSE,separators = ',.') %>% config(displayModeBar = F)