R 记录刻度x,数据为x=0

R 记录刻度x,数据为x=0,r,ggplot2,R,Ggplot2,,当使用对数刻度和以下代码时,是否有方法扩展左边距以显示x=0处的数据点,以便完全绘制x=0处的数据点,而不是如图左侧所示的一半 x <- c(0, 0, 0, 0, 0, 0, 0.0095, 0.0095, 0.0095, 0.03, 0.03, 0.03, 0.095, 0.095, 0.095, 0.3, 0.3, 0.3) y <- c(23975, 16852, 18924, 21086, 15940, 16308, 17443, 24729, 13513, 30260,

,当使用对数刻度和以下代码时,是否有方法扩展左边距以显示x=0处的数据点,以便完全绘制x=0处的数据点,而不是如图左侧所示的一半

x <- c(0, 0, 0, 0, 0, 0, 0.0095, 0.0095, 0.0095, 0.03, 0.03, 0.03, 0.095, 0.095, 0.095, 0.3, 0.3, 0.3)
y <- c(23975, 16852, 18924, 21086, 15940, 16308, 17443, 24729, 13513, 30260, 31883, 35960, 55485, 58366, 35607, 58119, 52414, 53990)
data <- as.data.frame(cbind(x, y))

p <-  ggplot(data.frame(x=c(min(data$x), max(data$x))), aes(x=x)) + 
      geom_point(data, mapping=aes(x=x, y=y))  +
      scale_x_log10(breaks = trans_breaks("log10", function(x) 10^x),
                    labels = trans_format("log10", math_format(10^.x)))
p

x一个快速的“n”脏、不太理想的解决方法:关闭剪裁并删除y轴

library(ggplot2)
library(grid)

x <- c(0, 0, 0, 0, 0, 0, 0.0095, 0.0095, 0.0095, 0.03, 0.03, 0.03, 0.095, 0.095, 0.095, 0.3, 0.3, 0.3)
y <- c(23975, 16852, 18924, 21086, 15940, 16308, 17443, 24729, 13513, 30260, 31883, 35960, 55485, 58366, 35607, 58119, 52414, 53990)
data <- as.data.frame(cbind(x, y))

p <-  ggplot(data.frame(x=c(min(data$x), max(data$x))), aes(x=x)) + 
  geom_point(data, mapping=aes(x=x, y=y))  +
  scale_x_log10(breaks = trans_breaks("log10", function(x) 10^x),
                labels = trans_format("log10", math_format(10^(.x)))) + 
  theme(axis.line.y = element_blank())

p <- ggplotGrob(p)
i <- which(p$layout$name == 'panel')
p$layout[i,'clip'] <- 'off'
grid.draw(p)
库(ggplot2)
图书馆(网格)

x将以下内容添加到
ggplot
并运行

coord_cartesian(xlim = c(-0.2, 0.5), expand = TRUE)

请微调
xlim
,以获得更好的结果

log(0)
返回
-Inf
,ggplot将
-Inf
视为“绘图的左边缘”。你所能做的就是给你的0(或你所有的数据)加上一个小值,把它们放在你想要的相对于其他数据的任何地方。正如@Gregor所说,你可以通过人为地改变点来伪造它,但这样做反而会歪曲数据。特别是如果你继续通过数据绘制回归。零和日志刻度不能很好地结合在一起,因此,请考虑另一种表示数据的方式,或者如果您真的需要日志刻度,请将x=0数据与其他数据分开显示。我实际上绘制了你的数据,没有多少数量级的跨度,所以线性x比例很好。我的建议-不要使用对数刻度