【问题标题】:geom_point and coord_polar - Warning for unknown aestheticsgeom_point 和 coord_polar - 未知美学警告
【发布时间】:2017-10-09 15:16:34
【问题描述】:

我知道 geom_point 没有 ymin 和 ymax 的映射,但是当我不使用它们时,它并没有给出我期望的数字。尽管如此,当使用 ymin 和 ymax 时,我得到了我想要的数字,但我收到“忽略未知美学:ymin,ymax”的警告。我不知道应该怎么做才能避免警告但得到我想要的情节。

这是示例数据集:

ab <- data.frame(a = seq(50,100,by=10), b=LETTERS[1:6])

没有 ymin 和 ymax 但不是我期望的数字:

library("ggplot2")

ggplot(ab) +
  scale_x_discrete() +
    scale_y_reverse() +
  geom_rect(xmin=Inf, xmax = -Inf, ymin = 0 - 50, ymax = 0, fill="lightblue") +
  geom_rect(xmin=Inf, xmax = -Inf, ymin = 0 - 82, ymax = 0 - 50, fill="lightgreen") +
  geom_rect(xmin=Inf, xmax = -Inf, ymin = -100, ymax = 0 - 80, fill="darkgreen") +
  geom_vline(xintercept=1:6, size=1.5, color="white") +
  geom_hline(yintercept=c(50, 80, 100), size=0.1, color="white") +
  geom_point(aes(x=b, y=a),
             shape=21, fill="#FF9933", size=10, position="identity") +
  ggtitle("Test") +
  coord_polar() +
  theme(
    plot.title=element_text(face = "bold", color = "black", size = 17, ),
    panel.background=element_rect(fill = c("white")),
    panel.grid=element_blank(),
    panel.grid.major=element_line(size=2),
    panel.grid.minor.y=element_blank(),
    axis.text.x=element_text(vjust=5),
    axis.text=element_text(size = 12, color = "black", face = "bold"),
    axis.text.y=element_blank(),
    axis.title.x=element_blank(),
    axis.title.y=element_blank(),
    axis.ticks=element_blank())

geom_point 中的 ymin 和 ymax(带有警告的预期输出):

ggplot(ab) +
  scale_x_discrete() +
    scale_y_reverse() +
  geom_rect(xmin=Inf, xmax = -Inf, ymin = 0 - 50, ymax = 0, fill="lightblue") +
  geom_rect(xmin=Inf, xmax = -Inf, ymin = 0 - 82, ymax = 0 - 50, fill="lightgreen") +
  geom_rect(xmin=Inf, xmax = -Inf, ymin = -100, ymax = 0 - 80, fill="darkgreen") +
  geom_vline(xintercept=1:6, size=1.5, color="white") +
  geom_hline(yintercept=c(50, 80, 100), size=0.1, color="white") +
  geom_point(aes(x=b, y=a, ymin = 0, ymax = 100),
             shape=21, fill="#FF9933", size=10, position="identity") +
  ggtitle("Test") +
  coord_polar() +
  theme(
    plot.title=element_text(face = "bold", color = "black", size = 17, ),
    panel.background=element_rect(fill = c("white")),
    panel.grid=element_blank(),
    panel.grid.major=element_line(size=2),
    panel.grid.minor.y=element_blank(),
    axis.text.x=element_text(vjust=5),
    axis.text=element_text(size = 12, color = "black", face = "bold"),
    axis.text.y=element_blank(),
    axis.title.x=element_blank(),
    axis.title.y=element_blank(),
    axis.ticks=element_blank())

【问题讨论】:

  • 我不太确定为什么会这样,但以某种方式添加 ymin=0ymax=100 可以确保 y 比例从 100 变为 0,即使 geom_point 不占用ymaxymin 美学。如果您删除这些参数并将scale_y_reverse() 更改为scale_y_reverse(limits=c(100,0)),您将获得相同的结果而不会发出警告。这将是设置绘图 y 轴范围的“标准”方式。

标签: r ggplot2


【解决方案1】:

在 ggplot2 中,您绘制的数据决定了绘图区域,除非您明确更改绘图范围。您的 a 变量(您在 y 轴上绘制)仅涵盖从 50 到 100 的范围。因此,除非您指定要在图中使用的不同 y 范围,否则默认情况下您会看到这些范围。简而言之,解决此问题的正确方法是将limits 参数传递给scale_y_reverse 调用——这告诉绘图绘制与数据覆盖范围不同的范围。它看起来像:

scale_y_reverse(limits=c(100, 0))

(100 排在第一位,因为您正在反转 y 轴。)

如果您将更改添加到您的绘图中没有yminymax 参数,您将获得您期望的图表。

现在,如果 yminymax 没有映射,他们为什么要改变你的情节?我认为原因是几何(如geom_point)不会删除他们不理解的美学映射。这些映射将被传递到层,如果层理解映射,它将使用它们。这实质上是在没有以正确的方式指定它们的情况下将 y 轴限制“破解”到图中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-02
    • 2018-03-18
    • 1970-01-01
    • 1970-01-01
    • 2021-09-16
    • 2017-05-31
    • 1970-01-01
    • 2018-04-10
    相关资源
    最近更新 更多