R饼图只有前三个部分

时间:2018-04-23 12:13:36

标签: r pie-chart 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() 

有人有想法吗?

1 个答案:

答案 0 :(得分:0)

无需从数据框中删除这些行,您只需在数据的子集上运行ggplot命令即可。顺便说一句,我认为你的意思是某些操作系统的份额低于1%,不低于0%?另外,请不要说出名字  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() 

enter image description here

百分比现在不能达到100%,但如果你想要,你可以将percent()命令中的参数除以0.99(因为具有最高百分比的3 OS的总百分比是99%)。