R饼图只有前三个部分

R Pie Chart with only top three segments

我对 R 中的饼图有疑问。 我想要一个使用过的操作系统的饼图。但是,有许多系统的份额低于 1%,我想将它们从图表中排除。当然我可以在绘图之前从数据框中删除它们,但我想知道在 ggplot 函数中是否有更好的选择来仅绘制前三个操作系统。

在下面的数据框中作为输入和我使用的代码:

数据框:

operatingSystem | sessionsPercent
Android         | 0.620
iOS             | 0.360
Windows         | 0.010
Blackberry      | 0.001
...

代码:

p <- ggplot(df, aes(x="", y=sessions, fill = operatingSystem)) 
p + geom_bar(width = 1, stat = "identity") +
  geom_text(aes(label = percent(data$sessions)), position = position_stack(vjust = 0.5), color = "white", size = 8) +
  coord_polar(theta="y", direction = -1) +
  theme_void() 

有人有想法吗?

无需从您的数据框中删除这些行,您只需 运行 您的 ggplot 命令对数据的一个子集执行。顺便说一句,我想你的意思是一些 OS 的份额可能低于 1%,而不是低于 0%?另外,请不要点名 a data.frame "data",因为它可能会破坏 utils 包中的某些功能。例如,最好使用 df。

我想你可以试试这个:

library(ggplot2)
library(scales)

df <- read.table(text = 'operatingSystem  sessionsPercent
             Android          0.620
             iOS              0.360
             Windows          0.010
             Blackberry       0.001', header = TRUE)

p <- ggplot(df[df$sessionsPercent %in% head(df$sessionsPercent, 3),], aes(x="", y=sessionsPercent, fill = operatingSystem)) 

p + geom_bar(width = 1, stat = "identity") +
  geom_text(aes(label = percent(head(df$sessionsPercent, 3))), position = position_stack(vjust = 0.5), color = "white", size = 8) +
  coord_polar(theta="y", direction = -1) +
  theme_void() 

百分比现在加起来不等于 100%,但如果你想这样,你可以将 percent() 命令中的参数除以 0.99(因为 3 OS 的总百分比最高的百分比是 99 %).