以下是兩種可能的方法,具體取決於您的需要。無論如何,我認爲geom_col
會更容易。 (這是可能的使用geom_rect
當你的x軸數據是離散的,但它不是最直接的。Example)(我切換Q3 & Q4值實驗室作爲Q3的價值
的樣本數據是較大的,這並沒有使義):
msr_type <- c('Clinic','Hospital','Lab','Office')
result <- c(10.5, 21.9, 30.5, 14.5)
sec_q <- c(9.5, 15.2, 25, 9)
third_q <- c(11, 17, 29, 20)
four_q <- c(17, 25, 34, 25)
df_check <- data.frame(msr_type, result, sec_q, third_q, four_q)
方法1(保持原始數據集的寬格式):
ggplot(df_check,
aes(x = msr_type)) +
geom_col(aes(y = four_q), fill = "slategray3") +
geom_col(aes(y = third_q), fill = "slategray2") +
geom_col(aes(y = sec_q), fill = "slategray1") +
geom_point(aes(y = result)) +
xlab("") + ylab("")
由於Q2 < = Q3 < = Q4,您可以簡單地爲每個四分位數組重新創建一組條形碼組。但是,如果你需要爲Q2/Q3/Q4一個傳奇,它不是那麼簡單......
方法2(數據集轉換爲長格式,使所有的四分位值是相同的變量):
df_check2 <- df_check %>%
tidyr::gather(quartile, quartile.value, -msr_type, -result) %>%
mutate(quartile = factor(quartile, levels = c("sec_q", "third_q", "four_q")))
ggplot(df_check2,
aes(x = msr_type)) +
geom_col(aes(y = quartile.value, fill = quartile),
position = position_dodge(0), width = 2.5) +
geom_point(aes(y = result)) +
scale_fill_manual(values = c("slategray1", "slategray2", "slategray3")) +
xlab("") + ylab("")
默認情況下使用此方法創建圖例。如果你有其他四分位數/十分位數/百分位數/等等來繪製,它也更加靈活。
什麼是'df_practice2'?您的示例數據僅創建'df_check',並且使用該數據源生成的ggplot看起來不像圖片。 –
這是一個錯字,正如我的問題所述,難點不是創建一個點 - 它是背景中堆積的四分位矩形/條。要用嚴格的詞彙來解釋我需要的東西太困難了,所以我做了一個模擬來表明總體思路。 – PinkyL