2017-10-18 57 views
0

我有以下問題:我想使用ggplot創建一個圖表,顯示不同處理的兩個變量(貽貝中的微彈性量化,表示爲MP和Lipofuscin累積表示爲Lip)之間的關係暴露時間的獨立性。如何管理ggplot中的4個不同參數

我的數據是這樣的: enter image description here

這裏是我的代碼:

ggplot(Catrv_all,aes(Lip,MP,color=treatment))+ 
    geom_smooth(method="lm", se=FALSE)+ 
    geom_point(size = 2)+ 
    theme(legend.position = "bottom")+ 
    theme(plot.title = element_text(hjust = 0.5))+ 
    labs(x = "Lipofuscin accumulation [% area]", 
     y = "Microplastic quantification [% area]", 
     title = "Lipofuscin accumulation vs. Microplastic quantification") 

情節是這樣的: enter image description here

我認識到,ggplot顯然沒有訂購值以正確的方式曝光時間,因爲這些值不一致(例如,它不以0 h的值開始)。

我的問題是:我怎麼能告訴ggplot按暴露時間順序重新排列MP和Lip的順序?我應該創建第二個X軸嗎?如果是的話,我該如何在ggplot中做到這一點?

我在SO中看到了很多討論,這很難在ggplot中創建第二個x/y座標軸,但我不知道如何以另一種方式顯示我的數據。

更新我的問題:我聽從sconfluentus的意見,發現一個非常有趣的奔Bolker的答案在下面的帖子: How can I plot with 2 different y-axes?

我適應所提供的代碼:

## add extra space to right margin of plot within frame 
par(mar=c(5, 4, 4, 6) + 0.1) 

## split data set for treatment groups 
MP_Ko<-Catrv_all$MP[1:8] 
exp<-Catrv_all$expTime[1:8] 
Lip_Ko<-Catrv_all$Lip[1:8] 

## Plot first set of data and draw its axis 
plot(exp, MP_Ko, pch=16, axes=FALSE, xlab="", ylab="", 
    type="b",col="black", main="Microplastic quantification vs. Lipofuscin accumulation in Controls") 
axis(2,col="black",las=1) ## las=1 makes horizontal labels 
mtext("Microplastic quantification [% area]",side=2,line=2.5) 
box() 

## Allow a second plot on the same graph 
par(new=TRUE) 

## Plot the second plot and put axis scale on right 
plot(exp,Lip_Ko, pch=15, xlab="", ylab="", 
    axes=FALSE, type="b", col="red") 
## a little farther out (line=4) to make room for labels 
mtext("Lipofuscin accumulation [% area]",side=4,col="red",line=4) 
axis(4, col="red",col.axis="red",las=1) 

## Draw the time axis 
axis(1,pretty(range(Catrv_all$expTime, 672))) 
mtext("Time (Hours)",side=1,col="black",line=2.5) 

## Add Legend 
legend("topright",legend=c("Microplastic quantification","Lipofuscin accumulation"), 
     text.col=c("black","red"),pch=c(16,15),col=c("black","red")) 

...並得到以下圖: enter image description here

費時,但這種方法是非常有幫助的。

+0

請將您的數據粘貼爲文本,而不是圖片。 – zx8754

+3

當你說「以正確的方式爲曝光時間命令數值」時,你的意思是什麼?您的情節不包含任何曝光時間。 您也可以使用'dput(Catrv_all)'並複製/粘貼輸出以使您的數據可用於社區。 – brettljausn

+2

您分配給x/y軸(MP&Lip)的變量似乎是數值型的,因此根據增加的MP/Lip值對點進行排序是有意義的。如果你想按暴露時間排序,你的意思是你想把expTime分配給x軸嗎?請包含您所需輸出的圖示。這會讓其他人更容易理解你的要求。 –

回答

-1

謝謝大家的意見!我現在用dput(Catrv_all),這裏是我的數據的輸出:

structure(list(treatment = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L), .Label = c("Co", "CoP", "HDPE"), class = "factor"), 
    expTime = c(0L, 3L, 6L, 24L, 96L, 168L, 336L, 672L, 0L, 3L, 
    6L, 24L, 96L, 168L, 336L, 672L, 0L, 3L, 6L, 24L, 96L, 168L, 
    336L, 672L), MP = c(0.056481655, 0.098508038, 0.097108112, 
    0.056848278, 0.082198187, 0.052261369, 0.022911461, 0.023901656, 
    0.056481655, 0.124866733, 0.125732967, 0.07986102, 0.071233133, 
    0.128376543, 0.331948, 0.121689155, 0.056481655, 0.186735799, 
    0.137477095, 0.41251914, 0.093364945, 0.085760245, 0.249371764, 
    0.187693319), Lip = c(9.848221569, 11.62875399, 9.530378924, 
    12.67745734, 14.14610784, 11.44140636, 11.55310567, 12.37321851, 
    9.848221569, 8.889567938, 12.5142123, 13.79770638, 11.26698845, 
    14.67064904, 14.56027915, 15.24772977, 9.848221569, 12.22424265, 
    13.05104725, 12.96830215, 12.10175574, 14.66505958, 13.67550035, 
    11.65168387), Cat = c(6.681571728, 7.321681629, 4.939885929, 
    7.73812502, 6.85066487, 9.317238053, 8.309505248, 9.33338377, 
    6.681571728, 7.517468479, 7.151607966, 9.074518192, 6.350614893, 
    9.749092742, 9.335634354, 11.43658695, 6.681571728, 6.164473371, 
    9.416062149, 9.19813927, 8.041328941, 8.736550013, 9.788258534, 
    10.55471537), CI = c(120.5252336, 110.1709456, 112.9077575, 
    110.9032308, 101.0274926, 101.1970679, 107.1464111, 97.42950278, 
    120.5252336, 101.7284063, 132.6162567, 108.7251954, 107.2199383, 
    102.9096767, 100.9637646, 101.6655302, 120.5252336, 102.1888777, 
    111.9139996, 113.7840225, 104.4767637, 103.1984161, 96.67797683, 
    95.59369834)), .Names = c("treatment", "expTime", "MP", "Lip", 
"Cat", "CI"), class = "data.frame", row.names = c(NA, -24L)) 

希望這將有助於重建我的代碼。 再次回答我的問題:是的,我想在一個軸上顯示曝光時間(如果可能的話)。其次,我想展示一種「時間序列」(從0h到672h)以及MP和Lip對於所有治療組的行爲。所以我的第一個想法是:y軸:MP,x軸底部:脣,頂部的x軸:曝光時間 - >以正確的順序爲曝光時間(從0到672)的所有治療組的標繪值。嘗試繪製趨勢線。事實上,我想要一個視覺證據,即MP的行爲(隨着時間的推移)導致不同治療組的脂褐素累積的變化。

@Jake Kaupp:我不確定,如何在ggplot中facet_wrap。你可以指定一下嗎?

+0

請編輯您的問題,而不是張貼它作爲答案。 – useR

相關問題