在ggplot中格式化数字

Fio*_*anS 1 r ggplot2

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

ggplot(dat,
       aes(x = factor(""), fill = workers) ) +
       geom_bar() +
       coord_polar(theta = "y") +
       scale_x_discrete("")
Run Code Online (Sandbox Code Playgroud)

问题是数字 ( count) 显示为2e+05。我怎样才能将它们显示为20000

更新:

dat <- data.frame(workers=c("Q8","A2","S1","A2","A2","S1"))
Run Code Online (Sandbox Code Playgroud)

hrb*_*str 5

您可以使用它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())
Run Code Online (Sandbox Code Playgroud)

产生这种怪物:

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

但是,我可以建议转向不同的vis:

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")
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

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

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)
Run Code Online (Sandbox Code Playgroud)

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