【问题标题】:Break points not behaving with scale_y_continuous()断点不符合 scale_y_continuous()
【发布时间】:2020-02-17 18:21:50
【问题描述】:

我正在尝试绘制一些 y 值较大的数据:

p <- seq(0.1, 0.9, 0.1)
cost <- 1/(p^2)^15 * 15 * 0.1
data <- data.frame(x=p, y=cost)
ggplot(data, aes(x=x, y=y)) + 
  geom_point(shape=18, color="blue")+
  scale_y_continuous(name="Cost", breaks=c(0, 1e5, 1e10, 1e15, 1e20, 1e25, 1e30))

但是,当像这样指定断点时,除了第一个和最大的 y 值之外的所有数据点都与行 y=0 对齐。

见:

建议?

【问题讨论】:

  • 切换到log10:scale_y_log10(name="Cost", breaks=c(0, 1e5, 1e10, 1e15, 1e20, 1e25, 1e30))?

标签: r ggplot2 axis-labels


【解决方案1】:

您最好的办法是重新调整您的数据,例如这里的对数。您可以在图表的标签中指出这一点,并且仍然提供未缩放的 y 轴标签。

breaks = c(0, 1e5, 1e10, 1e15, 1e20, 1e25, 1e30)

ggplot(data, aes(x=x, y=log(y))) + 
  geom_point(shape=18, color="blue")+
  scale_y_continuous(name = "Cost", 
                     breaks = log(breaks),
                     labels = breaks)

更简单,有点生疏:

ggplot(data, aes(x=x, y=y)) + 
  geom_point(shape=18, color="blue")+
  scale_y_continuous(name="Cost",
                     breaks = c(0, 1e5, 1e10, 1e15, 1e20, 1e25, 1e30),
                     trans = "log")

【讨论】:

  • 谢谢!这是一个已知的事情,您不能手动将 ggplot 中的轴缩放到某个点以上?
  • 仅调用scale_y_continuous 不会缩放轴,您对breaks 的调用只是指定它们应该在当前比例上设置的位置。但这提醒了我,您可以使用 trans 参数指定转换,因此可以使用比我最初提供的更简单的解决方案。
  • 不错!更简单的解决方案肯定很酷,但我想知道为什么我尝试设置未转换的中断失败了?
  • 仅仅是因为图表无法合理地显示1e30 和其他未缩放的。您可以在图表的左下角看到文本中的重叠,所有其他中断都被塞进其中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多