格式化ggplot中的数字

时间:2016-10-19 09:32:48

标签: r ggplot2

我使用ggplot2库创建了一个饼图,如下所示:

ggplot(dat,
       aes(x = factor(""), fill = workers) ) +
       geom_bar() +
       coord_polar(theta = "y") +
       scale_x_discrete("")

问题是数字(count)显示为2e+05。如何将其显示为20000

更新

dat <- data.frame(workers=c("Q8","A2","S1","A2","A2","S1"))

1 个答案:

答案 0 :(得分:4)

您可以使用scales::comma来处理此问题(即使有大量数据,也可轻松制作可重现的示例):

library(ggplot2)

dat <- data.frame(
  workers = c(
    rep("Q8", 100000),
    rep("A2", 200000),
    rep("S1", 200000)
  )
)

ggplot(dat, aes(x = factor(""), fill = workers) ) +
  geom_bar() +
  coord_polar(theta = "y") +
  scale_x_discrete(name="") +
  scale_y_continuous(label=scales::comma) +
  theme_bw() +
  theme(panel.grid=element_blank()) +
  theme(panel.border=element_blank()) +
  theme(axis.ticks=element_blank())

产生这种怪异:

请注意,您确实不应该显示“y”轴编号,因为它们在此上下文中没有意义,应该直接标记饼图切片或将值#s添加到实际图例标签。

但是,我可以建议转向另一种观点:

library(waffle)
library(dplyr)

count(dat, workers) %>% 
  mutate(trim=n/10000) -> df2

parts <- setNames(unlist(df2$trim), df2$workers)  

waffle(parts, rows=4, title="Count", xlab="Each square represents 10,000 workers")

enter image description here

如果您正在使用ggublot版本的ggplot2,则需要执行以下操作:

waffle(parts, rows=4, title="Count", xlab="Each square represents 10,000 workers") +
  scale_fill_manual(name="workers",
                    values=c(Q8="#e41a1c", A2="#377eb8", S1="#4daf4a"), 
                    na.translate=FALSE)

因为它有一些不同于CRAN版本的行为(当新的ggplot2在CRAN上时,waffle pkg将被更新。