【问题标题】:R ggplot2 scale_y_continuous : Combining breaks & limitsR ggplot2 scale_y_continuous :结合中断和限制
【发布时间】:2016-07-11 17:52:42
【问题描述】:

问题:我找不到任何方法来组合ggplot2 中的中断和限制命令。 y 轴应始终包含 0-40 和 breaks=c(5,10,15,20,25,30,35) 的范围。 x 轴应为 0-100,breaks=c(10,20,30,40,50,60,70,80,90,100)。我不想显示超出此范围的数据。

我试过+ ylim,但这会覆盖我的休息时间。 我试过+ expand,但这也显示了我想要的范围之外的数据(1-100)。 我尝试在第二步中添加中断和限制范围,但如果我这样做,我的第一步的 y 轴会被简单地覆盖。

plot_Tili_Age_VS_Height <- ggplot(Tili, aes(x = Age, y = Height)) + geom_point() + 
  geom_smooth(method = "lm", se = FALSE, color = "black", formula = y ~ x) + 
  scale_y_continuous(trans = "log10", breaks = c(5, 10, 15, 20, 25, 30, 35)) + 
  expand_limits(y = c(0, 35), x = c(0, 100)) + 
  scale_x_continuous(trans = "log10", breaks = c(10, 20, 30, 40, 50, 60,70, 80, 90, 100)) +
  theme_bw(base_size = 15) + 
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank())

df <- data.frame(x = log(Tili$Age), y = log(Tili$Height))
lm_eqn = function(df) {
  m = lm(y ~ x, df)
  eq <- substitute(ln(italic(y)) == a + b %*% ln(italic(x)) * "," ~ ~italic(r)^2 ~ 
                     "=" ~ r2, list(a = format(coef(m)[1], digits = 2), 
                                    b = format(coef(m)[2], digits = 2), 
                                    r2 = format(summary(m)$r.squared, digits = 2)))
  as.character(as.expression(eq))
}

plot_Tili_Age_VS_Height <- plot_Tili_Age_VS_Height + 
  annotate("text", x = 30, y = 5, label = lm_eqn(df), hjust = 0, 
           size = 3, family = "Times", parse = TRUE)
plot_Tili_Age_VS_Height 

知道怎么解决吗?

【问题讨论】:

  • Tili 是内置数据集吗?你能让其他人重现吗?
  • 您是否尝试过使用limits 参数,例如scale_x_continuous
  • 去掉expand_limits(),不要使用ylimxlim,只使用scale_y_continuousscale_x_continuous,它们同时接受breakslimits参数。
  • @JasonAizkalns 我尝试制作一个可重现的示例,但我的代码不再适用于其他数据。对不起! :(但是,我认为在我的示例中数据是什么并不重要,问题是ggplot语法不允许我结合limits =和breaks =,所以我认为没有数据应该没问题
  • @aosmith 是的,我做到了。它还会覆盖中断。

标签: r ggplot2 limit axis break


【解决方案1】:

正如 JasonAizkalns 所说,如果没有可重现的示例,您的问题将无法解决。下面的代码可以对虹膜数据执行您想要的操作,并且也应该适用于您的示例。

library(ggplot2)

df <- iris


## all data, default breaks
ggplot(df, aes(Sepal.Length, Sepal.Width)) +
  geom_point()

## subset of data is seen in plot, breaks changed
ggplot(df, aes(Sepal.Length, Sepal.Width)) +
  geom_point() + 
  scale_x_continuous(breaks = c(5.5,6.5), limits = c(5,7)) +
  scale_y_continuous(breaks = c(3.5,2.5), limits = c(2,4))

【讨论】:

  • 谢谢,突然间它结合了中断和限制,即使我运行了与昨天相同的代码(并且在其间重新启动了程序)。可能重新启动计算机就可以了。所以scale_x_continuous(breaks = c(5.5,6.5), limits = c(5,7)) 是解决方案!如果您像我一样使用对数转换的数据,您可能需要记住的是,如果您简单地输入 c(0,40) 或类似的,您的数据可能看起来非常小,因为从 0 到第一次休息的距离(我的 10 case) 很大,最好使用数据的真正下限(在我的情况下为 4.4)。
  • 在编辑 y 轴以显示 log 10 刻度时,这将如何工作?我正在指定反式、中断和标签,但也想稍微增加它自己绘制的 y 轴范围。我希望我的 y 轴范围从 0.5 到 3.5(在 log10 中)。如何将限制合并到这段代码中? scale_y_continuous(trans = log10_trans(), breaks = trans_breaks('log10', function(x) 10^x), labels = trans_format('log10', math_format(.x)))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-25
  • 2022-10-21
  • 1970-01-01
  • 1970-01-01
  • 2011-10-02
相关资源
最近更新 更多