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

让我们看一个有关钻石数据的简单示例:

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

这里的问题并不严重,但我希望您能想象为什么我希望看到log10刻度的值。让我们尝试一下:
m + geom_boxplot() + coord_trans(y = "log10")

如您所见,y轴是log10比例缩放的,看起来不错,但x轴存在问题,这使绘图非常奇怪。
scale_log不会发生此问题,但这不是我的选择,因为我无法以这种方式使用自定义格式化程序。例如。:
m + geom_boxplot() + scale_y_log10()

我的问题:有谁知道一种在y轴上绘制log10比例尺的箱线图的解决方案,该标签可以使用thread这样的formatter函数自由格式化?

编辑问题以根据答案和评论帮助回答者:

我真正追求的是:一个没有科学标签的log10转换轴(y)。我想将其标记为美元(formatter=dollar)或任何自定义格式。

如果尝试@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轴标签不变:

最佳答案

最简单的方法就是给'trans'(以前的'formatter'参数)指定log函数的名称:

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()

编辑2和3:
进一步的实验(在丢弃成功将“$”符号放在记录的值之前的尝试之后):
fmtExpLg10 <- function(x) paste(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)

注意在2017年中添加了有关软件包语法更改的注释:

关于r - 使用ggplot2仅将一个轴转换为log10比例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4699493/

10-12 13:59