我正在制作一个要对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
)