更改ggplot中的千位分隔符

34

使用ggplot制作条形图时,我遇到了获取首选千位分隔符的问题。我希望千位数用点号而不是逗号分隔。像这样它不会给出分隔符:

require(ggplot2)
require(scales) 
options(scipen=10)
D = data.frame(x=c(1,2),y=c(1000001,500000))
p = ggplot(D,aes(x,y)) + geom_bar(stat="identity") 
p

就像这样,它会给出一个逗号:

p + scale_y_continuous(labels=comma)

如何在千位数上使用小数点作为分隔符?我找不到有关其他标签类型的文档,除了一些示例在http://docs.ggplot2.org/0.9.3.1/scale_continuous.html上。

提前致谢,

Forza


labels=comma 中的 comma 是什么?它是一个未定义的变量,就是这样... - Spacedman
@Spacedman 这个程序可以正常工作,且定义良好。你也可以在官方文档中看到其使用示例。你是否有最新的ggplot版本?顺带一提,你需要使用library(scales)。 - Forzaa
1
这是scales包中的内容。我现在看到您的编辑了。 - Spacedman
4个回答

52
p + scale_y_continuous(labels=function(x) format(x, big.mark = ".", scientific = FALSE))

非常好用,谢谢!我不知道你也可以将函数传递给标签,这很有用。 - Forzaa
1
如果您键入“逗号”,您会发现它与给出的答案非常相似。也许建议“scales”包的作者添加一个“dottedThousands”函数? - Spacedman
查找scales的github仓库(如果存在),添加新问题。否则,发送电子邮件给维护者。 - Spacedman
2
我想补充一点,通常需要在函数的x轴上添加修剪选项(请参见这里:https://dev59.com/vm3Xa4cB1Zd3GeqPk_6o),因为格式可能会将轴值向右移动。因此,它们不再对齐。 - Bouncner

19

这也可以工作:

p + scale_y_continuous(labels = scales::comma)

12

非常好的答案。由于您正在定义千位分隔符,最好也将小数分隔符定义为逗号,以避免错误。

p + scale_y_continuous(labels=function(x) format(x, big.mark = ".", decimal.mark = ",", scientific = FALSE))

0
一个比提供的答案更简单的解决方案是:
p + scale_y_continuous(labels = scales::comma_format(big.mark = '.'))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接