Построение частичного равновесия с помощью ggplot2 (две функции на одной фигуре) - PullRequest
0 голосов
/ 16 мая 2018

Я хотел бы создать график с использованием ggplot2 для визуализации проблемы частичного равновесия. Я искал решение для этого, но не мог найти.

Я хочу построить две функции на одном рисунке, предпочтительно используя ggplot2. Я хочу построить график обратной функции спроса и дискретной кривой предельных издержек с Q на оси X и P на оси Y.

  1. Кривая предельных затрат выглядит следующим образом:

    • P = 0,794 для всех Q в [0,70]
    • P = 0,956 для всех Q in (70,140)
    • P = 2,802 для всех Q in (140, infty)

Тогда

  1. Обратная кривая спроса описывается следующей функцией:
    • P = (199 / Q) ^ (1 / 0,14)

Я могу построить кривую предельных издержек, но я не знаком с графикой пользовательских функций с использованием ggplot2. Мне удалось построить функцию отдельно без использования команды * function = *, но я не смог исправить видимую область (xlim = c (0,300)) и не смог объединить ее с кривой предельных издержек.

Заранее спасибо.

EDIT

Код, который у меня есть, следующий:

        # Graphic representation
#T1 is the discrete MgC curve
    T1 <- as.data.table(c(0,75, 75,140, 140,300))
    T1$P <- c(0.793,0.793,
              0.956,0.956,
              2.802,2.802)
    setnames(T1, c("V1"),c("Q"))
#D0 is the inverse demand curve    
    D0 <- data.table(c(1,2,3,4,5))
    setnames(D0,c("V1"),c("P"))
    D0$Q <- ((D0$P)^(-0.14))*199.01

# Q1 and Q2 are quantities demanded when P=2.802 and 1.9 respectively     
    Q1 <- data.table(c(rep(199.01*(2.802)^-0.14,3)),c(0,2.5,5))
    Q2 <- data.table(c(rep(199.01*(1.9)^-0.14,3)),c(0,2.5,5))
    setnames(Q1,c("V1","V2"),c("Q","P"))
    setnames(Q2,c("V1","V2"),c("Q","P"))


    ggplot(mapping = aes(x = Q, y = P)) +
      geom_line(data = T1, color = "red", size = 1) + 
      geom_path(data = D0, color = "blue", size = 1) +
      geom_line(data = Q1, color = "green") +
      geom_line(data = Q2, color = "green")

1 Ответ

0 голосов
/ 16 мая 2018

Вы можете использовать ggplot2::stat_function для построения произвольных функций.Я думаю, что в вашем посте была опечатка - дайте мне знать, если это выглядит правильно.

library(ggplot2)

df = data.frame(Q = 0:200,
                MC = c(rep(.794, 71),
                       rep(.956, 70),
                       rep(2.802, 60)))

ggplot(df, aes(x = Q)) + 
  geom_path(aes(y = MC)) +
  stat_function(fun = function(Q) {(Q/199)^-0.14})

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...