簡體   English   中英

Plot 2 個不同的 dataframe 到 1 個 plot 並使用 Z64B2ZCB1477DA41349166DZ 設置自定義 x 軸

[英]Plot 2 different dataframe into 1 plot and set custom x-axis with ggplot2

我想從 2 個不同的 df 創建一個 plot

我的代碼:

ggplot() +
  geom_boxplot(data=df.temp1, aes(x = sample2, y=delta_rn)) +
  theme_bw() +
  theme(plot.title = element_text(hjust = 0.5), axis.title = element_text(size=20),axis.text=element_text(size=15),
        axis.text.x=element_text(angle = -40, hjust = 0))+
  geom_boxplot(data=df.temp2, aes(x = 'rn',y=delta_rn))

df1:

structure(list(sample2 = c("p10_065", "p10_065", "p10_065", "p10_065", 
"p10_065", "p10_065", "p10_065", "p10_065", "p10_065", "p39_080", 
"p39_080", "p39_080", "p39_080", "p39_080", "p39_080", "p39_080", 
"p39_080", "p39_080", "s36_068", "s36_068", "s36_068", "s36_068", 
"s36_068", "s36_068", "s36_068", "s36_068", "s36_068", "s32_066", 
"s32_066", "s32_066", "s32_066", "s32_066", "s32_066", "s32_066", 
"s32_066", "s32_066", "s43_078", "s43_078", "s43_078", "s43_078", 
"s43_078", "s43_078", "s43_078", "s43_078", "s43_078", "s29_083", 
"s29_083", "s29_083", "s29_083", "s29_083", "s29_083", "s29_083", 
"s29_083", "s29_083", "p1_065", "p1_065", "p1_065", "p1_065", 
"p1_065", "p1_065", "p1_065", "p1_065", "p1_065", "p2_080", "p2_080", 
"p2_080", "p2_080", "p2_080", "p2_080", "p2_080", "p2_080", "p2_080", 
"s21_077", "s21_077", "s21_077", "s21_077", "s21_077", "s21_077", 
"s21_077", "s21_077", "s21_077", "p41_072", "p41_072", "p41_072", 
"p41_072", "p41_072", "p41_072", "p41_072", "p41_072", "p41_072", 
"s22_066", "s22_066", "s22_066", "s22_066", "s22_066", "s22_066", 
"s22_066", "s22_066", "s22_066"), delta_rn = c(7588L, 15153L, 
22729L, 30292L, 37867L, 45444L, 53017L, 60585L, 68154L, 6319L, 
12628L, 18929L, 25238L, 31545L, 37853L, 44159L, 50463L, 56773L, 
9066L, 18123L, 27179L, 36233L, 45292L, 54341L, 63398L, 72453L, 
81513L, 11135L, 22266L, 33392L, 44514L, 55641L, 66770L, 77898L, 
89018L, 100148L, 8014L, 16020L, 24018L, 32021L, 40029L, 48030L, 
56032L, 64029L, 72036L, 8175L, 16331L, 24492L, 32649L, 40808L, 
48959L, 57123L, 65275L, 73440L, 18334L, 36667L, 54985L, 73309L, 
91636L, 109959L, 128290L, 146607L, 164931L, 18969L, 37923L, 56882L, 
75830L, 94789L, 113745L, 132695L, 151652L, 170608L, 14462L, 28915L, 
43369L, 57820L, 72276L, 86727L, 101185L, 115632L, 130091L, 18758L, 
37518L, 56268L, 75018L, 93772L, 112529L, 131280L, 150029L, 168782L, 
18311L, 36609L, 54908L, 73206L, 91505L, 109800L, 128099L, 146395L, 
164695L)), class = "data.frame", row.names = c(102L, 103L, 104L, 
105L, 106L, 107L, 108L, 109L, 110L, 72L, 73L, 74L, 75L, 76L, 
77L, 78L, 79L, 80L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 
22L, 23L, 24L, 25L, 26L, 27L, 28L, 29L, 30L, 2L, 3L, 4L, 5L, 
6L, 7L, 8L, 9L, 10L, 32L, 33L, 34L, 35L, 36L, 37L, 38L, 39L, 
40L, 92L, 93L, 94L, 95L, 96L, 97L, 98L, 99L, 100L, 82L, 83L, 
84L, 85L, 86L, 87L, 88L, 89L, 90L, 52L, 53L, 54L, 55L, 56L, 57L, 
58L, 59L, 60L, 62L, 63L, 64L, 65L, 66L, 67L, 68L, 69L, 70L, 42L, 
43L, 44L, 45L, 46L, 47L, 48L, 49L, 50L))

和df2:

structure(list(sample2 = c("p10_065", "p39_080", "s36_068", "s32_066", 
"s43_078", "s29_083", "p1_065", "p2_080", "s21_077", "p41_072", 
"s22_066"), delta_rn = c(5121066L, 6585801L, 2955395L, 0L, 4636924L, 
4271671L, 2699432L, 1884355L, 4851650L, 1846467L, 1588973L)), class = "data.frame", row.names = c(101L, 
71L, 11L, 21L, 1L, 31L, 91L, 81L, 51L, 61L, 41L))

這是我的 plot: 在此處輸入圖像描述

問題是我的“rn”label 在中間,我無法自定義這個 x 軸。 它按字母順序排序,但我希望來自我的第二個 df 的 label 位於我的 plot 的最左側或最右側。 所以更清楚地說,我想通過 df 訂購我的 label...

您可以簡單地創建labels並使用scale_x_discrete(labels= xlabs)axis進行手動注釋:

xlabs <- c("rn", levels(factor(df1$sample2)))

ggplot() +
  geom_boxplot(data=df1, aes(x = sample2, y=delta_rn)) +
  theme_bw()+
  theme(plot.title = element_text(hjust = 0.5), axis.title = element_text(size=20),axis.text=element_text(size=15),
        axis.text.x=element_text(angle = -40, hjust = 0))+
  geom_boxplot(data=df2, aes(x = '',y=delta_rn)) +  scale_x_discrete(labels= xlabs)

Output

sample_out_manual

我建議您必須將兩個數據框組合在一起,然后設置級別,將“rn”保留在第一個或最后一個。

test = rbind(df1,df2 %>% mutate(sample2='rn'))
test$sample2 = factor(test$sample2,levels=c(unique(df1$sample2),'rn'))

ggplot(data=test,aes(x = sample2, y=delta_rn)) +
  geom_boxplot() +
  theme_bw() +
  theme(plot.title = element_text(hjust = 0.5), axis.title = element_text(size=20),axis.text=element_text(size=15),
        axis.text.x=element_text(angle = -40, hjust = 0))

在此處輸入圖像描述

我首先將數據綁定在一起,將第二個 df 的sample2列設置為“rn”。

library(dplyr)
df <- 
  bind_rows(
    df.temp1,
    mutate(df.temp2, sample2 = "rn")
  )


count(df, sample2)

#> # A tibble: 12 x 2
#>    sample2     n
#>    <chr>   <int>
#>  1 p1_065      9
#>  2 p10_065     9
#>  3 p2_080      9
#>  4 p39_080     9
#>  5 p41_072     9
#>  6 rn         11
#>  7 s21_077     9
#>  8 s22_066     9
#>  9 s29_083     9
#> 10 s32_066     9
#> 11 s36_068     9
#> 12 s43_078     9

“rn”確實按字母順序在中間,但是我們可以將此列轉換為因子並設置自己的順序。

library(forcats)

df <- 
  df %>% 
  mutate(sample2 = fct_relevel(sample2, "rn", after = 0))

levels(df$sample2)

#>  [1] "rn"      "p1_065"  "p10_065" "p2_080"  "p39_080" "p41_072" "s21_077" "s22_066" "s29_083" "s32_066" "s36_068"
#> [12] "s43_078"

這會將“rn”放在開頭。 如果您希望它位於最后,請after = Inf設置。

現在 ggplot2 將使用我們定義的順序。

library(ggplot2)

ggplot(df) +
  geom_boxplot(aes(sample2, delta_rn)) +
  theme_bw() +
  theme(
    plot.title = element_text(hjust = 0.5),
    axis.title = element_text(size=20),
    axis.text=element_text(size=15),
    axis.text.x=element_text(angle = -40, hjust = 0)
  )

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM