geom_point和coord_polar - 未知美学的警告

时间:2017-10-09 15:16:35

标签: r ggplot2

我知道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())

1 个答案:

答案 0 :(得分:0)

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

scale_y_reverse(limits=c(100, 0))

(100首先是因为你正在扭转你的y轴。)

如果您在不使用 yminymax参数的情节中添加该更改,那么您将获得所需的图表。

现在,如果yminymax没有映射,为什么他们会更改你的情节?我认为原因是几何图形(如geom_point)不会删除他们不了解的美学映射。这些映射将被传递到图层,如果图层了解映射,它将使用它们。基本上&#34; hacks&#34; y轴限制在图中,而没有正确指定它们。