2017-08-25 142 views
1

我有一個結構類似這樣的數據:GGPLOT2 geom_rect積四分位數堆放着數據點和離散x軸

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, 34, 20) 
four_q <- c(17, 25, 29, 25) 
df_check <- data.frame(msr_type, result, sec_q, third_q, four_q) 

這是很容易繪製結果作爲點:

ggplot() + geom_point(data=df_check, aes(x=msr_type, y=result), colour="blue") 

enter image description here

但是有沒有一種方法可以使用geom_rect根據msr_type繪製四分位數,因爲它是一個堆疊在一起的離散變量?

+0

什麼是'df_practice2'?您的示例數據僅創建'df_check',並且使用該數據源生成的ggplot看起來不像圖片。 –

+0

這是一個錯字,正如我的問題所述,難點不是創建一個點 - 它是背景中堆積的四分位矩形/條。要用嚴格的詞彙來解釋我需要的東西太困難了,所以我做了一個模擬來表明總體思路。 – PinkyL

回答

1

以下是兩種可能的方法,具體取決於您的需要。無論如何,我認爲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一個傳奇,它不是那麼簡單......

Approach 1

方法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("") 

默認情況下使用此方法創建圖例。如果你有其他四分位數/十分位數/百分位數/等等來繪製,它也更加靈活。

Approach 2

+0

榮譽。我甚至不知道有geom_col,這太棒了! – PinkyL

相關問題