我正在尝试使用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()
由此产生的情节看起来像这样:
如您所见,缺少一个值。这是一个已知问题,我已经看到了一个类似问题的解决方案,该问题在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)
但是这种解决方案对我不起作用。正如该帖子所警告的那样,该解决方案不适用于小数目,因此会带来胡扯:
对于这些小的负值,如何使用对数刻度?在此示例中,所有值都很小,并且不需要对数刻度,但是我有几个图,其中有些值要大得多,并且需要对数刻度来区分小值。