scale_x_log10中的百分比标签

时间:2015-03-04 01:06:36

标签: r ggplot2

我正在尝试使用ggplot绘制R中的密度图。一个细微差别是我的x轴是对数的,使用scale_x连续。以下代码效果很好:

ggplot(MELTCOMP,aes(x=value)) + geom_density(aes(fill=variable), alpha = 0.1) + 
                            scale_fill_manual(
                                              name = "Spend", 
                                              values = c("blue","red","green"), 
                                              labels = c("A","B","C")
                                              ) +
                            scale_x_log10(breaks = c(0.00001,0.0001,0.001,0.01,0.1,1,10,100),labels = percent) +
                            geom_vline(aes(xintercept = c(0.00001,0.0001,0.001,0.01,0.1,1,10,100)), color = "grey") + 
                            theme(axis.ticks = element_blank(), panel.background = element_blank(), panel.grid = element_blank(),
                                  axis.text.y = element_blank())

问题在于如何显示x轴。当我使用时:

 scale_x_log10(breaks = c(0.00001,0.0001,0.001,0.01,0.1,1,10,100),label = percent)

来自scale包,我的轴有标签:

0% - 0% - 0% - 0% - 10% - 100% - ...

注意重复" 0%"。我很困惑,这可能与比例百分比函数有关,以

给出
function (x) 
{
x <- round_any(x, precision(x)/100)
paste0(comma(x * 100), "%")
}

尝试编码我的&#34;拥有&#34;没有舍入的函数:

NRPercent <- function(x) {
    paste0(comma(x * 100), "%")
}

scale_x_log10(breaks = c(0.00001,0.0001,0.001,0.01,0.1,1,10,100),label = NRpercent)

给出:

0.001% - 0.010% - 0.100% - 1.000% - 10.000% - ...

现在我对每个数字强制使用三位小数,这通常会导致重叠。我希望的是:

0.001% - 0.01% - 0.1% - 1% - 10% - 100% - 1000%.....

但我似乎无法复制这一点。这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

替换

paste0(comma(x * 100), "%")

paste0(sapply(x * 100, comma), "%")

问题是comma认为其整个输入确定了一个常用的有效位数 - 但这正是你想要的。不幸的是,功能文档没有提到这一点。相关部分可以在format中找到,comma来电:

  

数字向量使用最小十进制数进行编码    将所有元素显示为至少“数字”所需的位置    有效数字。