我有以下问题:我想把一个离散变量和一个连续变量想象成一个箱线图,其中后者有几个极高的值.这使得箱线图变得毫无意义(图中的点甚至"主体"都太小),这就是为什么我想在log10刻度上显示这一点.我知道我可以从可视化中忽略极值,但我不打算这样做.

我们来看一个钻石数据的简单示例:

m <- ggplot(diamonds, aes(y = price, x = color))

alt text

这里的问题并不严重,但我希望你们能想象为什么我希望看到log10标度的值.让我们试试:

m + geom_boxplot() + coord_trans(y = "log10")

alt text

正如你所看到的,y轴是log10比例的,看起来很好,但x轴有一个问题,这使得绘图非常奇怪.

这个问题不会出现在scale_log上,而是this is not an option for me上,因为我不能以这种方式使用自定义格式化程序.例如.:

m + geom_boxplot() + scale_y_log10() 

alt text

我的问题:有人知道用log10比例在y轴上绘制箱线图的解决方案吗?哪些标签可以用formatter函数自由格式化,比如thread


Editing the question to help answerers based on answers and comments:

我真正想要的是:一个log10变换的轴(y),没有科学的标签.我想给它贴上(formatter=dollar)美元或任何定制格式的标签.

如果我try @hadley的建议,我会得到以下警告:

> m + geom_boxplot() + scale_y_log10(formatter=dollar)
Warning messages:
1: In max(x) : no non-missing arguments to max; returning -Inf
2: In max(x) : no non-missing arguments to max; returning -Inf
3: In max(x) : no non-missing arguments to max; returning -Inf

y轴标签不变时:

alt text

推荐答案

最简单的方法是只给scale_x_continuousscale_y_continuous的"trans"(以前的"formatter")参数指定所需日志(log)函数的名称:

library(ggplot2)  # which formerly required pkg:plyr
m + geom_boxplot() + scale_y_continuous(trans='log10')

编辑:

m <- ggplot(diamonds, aes(y = price, x = color), log="y")
m + geom_boxplot() 
m <- ggplot(diamonds, aes(y = price, x = color), log10="y")
m + geom_boxplot()

EDIT2&;三:

# Need a function that accepts an x argument
# wrap desired formatting around numeric result
fmtExpLg10 <- function(x) paste(plyr::round_any(10^x/1000, 0.01) , "K $", sep="")

ggplot(diamonds, aes(color, log10(price))) + 
  geom_boxplot() + 
  scale_y_continuous("Price, log10-scaling", trans = fmtExpLg10)

alt text

2017年年中,在关于软件包语法更改的 comments 中添加了注释:

scale_y_continuous(格式化程序='log10')现在是scale_y_continuous(trans='log10')(ggplot2 v2.2.1)

R相关问答推荐

如果R上的不同时期之间的值发生了变化,则创建假人

使用gggplot 2在R中正确表示翻转堆叠条形图中的数据

使用map()内的公式()创建多个公式

将R data.frame转换为json数组(源代码)

为什么stat_bin在R中的ggplot中显示错误的数字?

将模拟变量乘以多个观测结果中的模拟变量

在R中列表的结尾添加数字载体

R中的子集文件—读取文件名索引为4位数字序列,例如0001到4000,而不是1到4000)

如何在modelsummary中重命名统计数据?

将多列合并为单独的名称—值对

在RStudio中堆叠条形图和折线图

如何将R中数据帧中的任何Nas替换为最后4个值

展开对数比例绘图的轴(添加填充)

给定开始日期和月份(数字),如何根据R中的开始日期和月数创建日期列

如何将使用rhandsontable呈现的表值格式化为百分比,同时保留并显示完整的小数精度?

如何根据R中其他变量的类别汇总值?

将标识符赋给事件序列,避免错误观察

如何将一些单元格的内容随机 Select 到一个数据框中?

使用gt_summary是否有一种方法来限制每个变量集进行配对比较?

计算使一组输入值最小化的a、b和c的值