Saya memiliki data ini:

structure(list(diff = structure(c(113, 6, 0, -18, -4, -3, -3, 
-6, -6, -250, -7, -27, -8, 0, 0, -4, 0, 2, -1, -3, 0, -5, -5, 
-5, -5, -8, -8, -8, -1, -1, 0, -1, -11, 0, 0, 0, 0, -1, -7, -8, 
-3, -11, -60, -1, 0, 0, 0, 0, -124, -123), class = "difftime", units = "days")), row.names = c(NA, 
50L), class = "data.frame")

Yang menghasilkan boxplot ini

ggplot(df) +
  geom_boxplot(
    aes(
      x = diff
    )
  ) +
  theme_light()

enter image description here

Saya ingin mewarnai sisi kiri panel (kiri ke median) dengan warna. Dan sisi kanan panel dalam warna lain.

Saya hanya tidak tahu bagaimana mendapatkannya mis. nilai x minimum panel (mungkin sekitar ~2700) dan ketiga nilai lainnya (xmax, ymin, ymax), untuk mendapatkan estetika yang tepat dalam panggilan ggplot kira-kira seperti ini:

m = median(df$diff)
ggplot(df) +
  geom_boxplot(
    aes(
      x = diff
    )
  ) +
  geom_rect( # the left side
   aes(
     xmin = <xmin_of_panel>,
     xmax = m,
     ymax = <ymax_of_panel>,
     ymin = <ymin_of_panel>
   ) 
  ) +
  geom_rect( # the right side
   aes(
     xmin = m,
     xmax = <xmax_of_the_panel>,
     ymax = <ymax_of_panel>,
     ymin = <ymin_of_panel>
   ) 
  ) +
  theme_light()

Mungkin saya bisa menyimpan objek ggplot sebagai variabel dan mendapatkan batas koordinat seperti yang dijelaskan di sini:

Bagaimana saya bisa mengekstrak rentang sumbu plot untuk objek ggplot2?

Tapi saya tidak begitu yakin bagaimana melakukan ini dengan benar

0
Lenn 11 Mei 2021, 18:44

1 menjawab

Jawaban Terbaik

Anda bisa menggunakan Inf alih-alih batas yang sebenarnya. Kliping akan mengurus sisanya:

ggplot(df) +
  geom_rect(aes(xmin = -Inf, xmax = median(diff), ymin = -Inf, ymax = Inf,
                fill = "A"), show.legend = FALSE) + 
    geom_rect(aes(xmin = median(diff), xmax = Inf, ymin = -Inf, ymax = Inf,
                fill = "B"), show.legend = FALSE) + 
  scale_fill_manual(values = c("firebrick3","forestgreen")) +
  geom_boxplot(aes(diff)) +
  theme_light()

enter image description here

1
Ian Campbell 11 Mei 2021, 16:09