Затенение области между пересекающимися линиями по-разному с помощью ggplot - PullRequest
1 голос
/ 16 июня 2020

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

Я уже видел этот аналогичный вопрос, но хотел бы сделать это в ggplot: Аналогичный вопрос

#Break-even Chart
Q <- seq(0,50,1)
FC <- 50
P <- 7
VC <- 3.6
total_costs <- (FC + VC*Q)
total_revenues <- P*Q
BEP <- round(FC / (P-VC) + 0.5)

df_bep_chart <- as.data.frame(cbind(total_costs, total_revenues, Q))

ggplot(df_bep_chart, aes(Q, total_costs)) + 
  geom_line(group=1, size = 1, col="darkblue") + 
  geom_line(aes(Q, total_revenues), group=1, size = 1, col="darkblue") + 
  theme_bw() + 
  geom_ribbon(aes(ymin = total_revenues, ymax = total_costs), fill = "blue", alpha = .5) +
  geom_vline(aes(xintercept = BEP), col = "green") +
  geom_hline(aes(yintercept = FC), col = "red") +
  labs(title = "Break-Even Chart",
       subtitle = "BEP in Green, Fixed Costs in Red") + 
  xlab("Quanity") + 
  ylab("Money")

enter image description here

1 Ответ

3 голосов
/ 16 июня 2020

Попробуйте это. Вы должны определить цвет заливки в зависимости от того, находится ли Q слева или справа, и использовать scale_fill_manual, чтобы установить цвета заливки:

#Break-even Chart
Q <- seq(0,50,1)
FC <- 50
P <- 7
VC <- 3.6
total_costs <- (FC + VC*Q)
total_revenues <- P*Q
BEP <- round(FC / (P-VC) + 0.5)

df_bep_chart <- as.data.frame(cbind(total_costs, total_revenues, Q))

library(ggplot2)

ggplot(df_bep_chart, aes(Q, total_costs)) + 
  geom_line(group=1, size = 1, col="darkblue") + 
  geom_line(aes(Q, total_revenues), group=1, size = 1, col="darkblue") + 
  theme_bw() + 
  geom_ribbon(aes(ymin = total_revenues, ymax = total_costs, fill = ifelse(Q <= BEP, "red", "green")), alpha = .5) +
  scale_fill_manual(values = c(red = "red", green = "green")) +
  guides(fill = FALSE) +
  geom_vline(aes(xintercept = BEP), col = "green") +
  geom_hline(aes(yintercept = FC), col = "red") +
  labs(title = "Break-Even Chart",
       subtitle = "BEP in Green, Fixed Costs in Red") + 
  xlab("Quanity") + 
  ylab("Money")

Создано 16.06.2020 с помощью пакета REPEX (v0.3.0)

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