如何使用ggplot2填充图形区域

How to fill out an area of a graph with ggplot2

我正在使用 R 为我的经济学之一绘制图表 类,我想填写图表的一个区域来表示无谓损失。

下面是我用来制作图表的代码:

rm(list = ls())
library(tidyverse)

housing_market <- ggplot(data.frame(x = c(0,3000)), aes(x = x)) +
  stat_function(fun = function(x){2.5-0.001*x}, color = "green", lwd = 1) +
  stat_function(fun = function(x){1}, color = "purple", lwd = 1) +
  stat_function(fun = function(x){0.70}, color = "blue", lwd = 1) +
  ylim(0,2.5) +
  annotate(geom = "text", label = "Inverse Demand = 2.5 - 0.001Q", x = 1250, y = 2, size = 4) +
  annotate(geom = "text", label = "MSC = 1", x = 500, y = 1.2, size = 4) +
  annotate(geom = "text", label = "MPC = 0.70", x = 500, y = 0.5, size = 4) +
  ggtitle("Housing Market") +
  labs(x = bquote(Q(ft.^2)), y = bquote(P("$"/ft.^2))) +
  geom_point(aes(1500,1), color = "black", size = 4) +
  geom_point(aes(1800,1), color = "black", size = 4) +
  geom_point(aes(1800,0.7), color = "black", size = 4)
housing_market

无谓损失是由点 (1500,1)、(1800,1) 和 (1800,0.7) 创建的三角形。我试过使用 geom_rect,但我想不出一种方法让它只填充三角形。任何帮助将不胜感激。

显然,三角形是特定的多边形(而不是矩形);)

您可以使用坐标定义数据框。我在 geom 调用中执行此操作。但是,从编码的角度来看,您可能希望在外部执行此操作。附带说明:您也可以使用此外部数据框在一个 geom_point() 调用中定义点。

housing_market + 
   geom_polygon(data = data.frame(  x = c(1500, 1800, 1800)
                                  , y = c(1,1,0.7))
               , aes(x = x, y = y)   # set aesthetic mapping for polygon
               , fill = "orange"     # put any other parameter
   )

在末尾添加 geom_polygon 层会“覆盖”您的观点。 因此,您可能希望在构建绘图时向上移动 geom_polygon() 层,或者在多边形调用之后放置 geom_point() 调用。