我正在制作一个要对x刻度进行对数变换的点图。我在0点有一些点,ggplot可以很好地处理它,因为它不会消除它们,但是会裁剪它们。

我该怎么办才能使0的点不被裁剪?似乎xlim()和比例转换不能一起使用,只有最后一个调用才生效。

一个例子:

myData <- data.frame(x = c(rexp(5), 0), y = "category")
myBreaks <- c(.1, 1, 5)
ggplot(myData, aes(x = x, y = y)) +
scale_x_continuous(trans = "log",
                   breaks = myBreaks,
                   labels = myBreaks) +
geom_point(size = 5, legend = F)

最佳答案

由于log(0)-Inf,我怀疑如果将其保持为零,则您的0点将始终被裁剪。我尝试摆弄expand=...coord_trans和其他我能想到的东西。

这是一种解决方法:


将您的零值设置为任意小的值(例如1e-6)
在这个值上休息一下
可选地标记中断0


代码:

myData <- data.frame(x = c(rexp(5), 0), y = "category")

myData <- within(myData, x[x==0] <- 1e-6)
myBreaks <- c(1e-6, 0.1, 1, 5)
myLabels <- c(0, myBreaks[-1])
ggplot(myData, aes(x = x, y = y)) +
    geom_point(size = 5, legend = F) +
    scale_x_continuous(
        trans = "log",
        breaks = myBreaks,
        labels = myLabels
    )

08-19 23:52