ggplot2在y轴上的对数刻度为小值

时间:2018-07-11 17:31:15

标签: r ggplot2

我正在尝试使用ggplot2来绘制图形,并在y轴上使用对数刻度来绘制较小的值,包括负值。当前看起来与此类似:

df        <- data.frame(matrix(ncol = 2, nrow = 4))
names(df) <- c("x", "y")
df$x      <- as.factor(c(1, 2, 3, 4))
df$y      <- c(0.1, 0.2, -0.3, 0.05)
ggplot(df, aes(x = x, y= y)) +
  geom_point() +
  scale_y_log10()

由此产生的情节看起来像这样:

picture log10

如您所见,缺少一个值。这是一个已知问题,我已经看到了一个类似问题的解决方案,该问题在x轴上的值较大:I need ggplot scale_x_log10() to give me both negative and positive numbers as output,可以解决以下问题:

weird <- scales::trans_new("signed_log",
                       transform=function(x) sign(x)*log(abs(x)),
                       inverse=function(x) sign(x)*exp(abs(x)))

df        <- data.frame(matrix(ncol = 2, nrow = 4))
names(df) <- c("x", "y")
df$x      <- as.factor(c(1, 2, 3, 4))
df$y      <- c(0.1, 0.2, -0.3, 0.05)
ggplot(df, aes(x = x, y= y)) +
  geom_point() +
  scale_y_continuous(trans=weird)

但是这种解决方案对我不起作用。正如该帖子所警告的那样,该解决方案不适用于小数目,因此会带来胡扯:

enter image description here

对于这些小的负值,如何使用对数刻度?在此示例中,所有值都很小,并且不需要对数刻度,但是我有几个图,其中有些值要大得多,并且需要对数刻度来区分小值。

0 个答案:

没有答案