2013-02-05 87 views
1

我是一名本科研究人員,在過去幾個月裏我一直在教自己R.我剛開始嘗試ggplot,並遇到了一些麻煩。我製作了一系列的箱子圖,在不同的聲音接收站觀察魚的深度。我想添加一個散點圖來顯示接收站的深度。這是我到目前爲止有:ggplot與散點圖疊加(相同的變量)箱形圖

data <- read.csv(".....MPS.csv", header=TRUE) 
df  <- data.frame(f1=factor(data$Tagging.location), #$ 
         f2=factor(data$Station),data$Detection.depth) 
df2  <- data.frame(f2=factor(data$Station), data$depth) 
df$f1f2 <- interaction(df$f1, df$f2) #$ 
plot1 <- ggplot(aes(y = data$Detection.depth, x = f2, fill = f1), data = df) + #$ 
        geom_boxplot() + stat_summary(fun.data = give.n, geom = "text", 
        position = position_dodge(height = 0, width = 0.75), size = 3) 
        plot1+xlab("MPS Station") + ylab("Depth(m)") + 
        theme(legend.title=element_blank()) + scale_y_reverse() + 
        coord_cartesian(ylim=c(150, -10)) 
plot2 <- ggplot(aes(y=data$depth, x=f2), data=df2) + geom_point() 
        plot2+scale_y_reverse() + coord_cartesian(ylim=c(150,-10)) + 
        xlab("MPS Station") + ylab("Depth (m)") 

不幸的是,因爲我在這個論壇新用戶,我不能上傳這些兩個地塊的圖像。我的x軸是「Stations」(有12個選項),我的y軸是「Depth」(0-150 m)。箱形圖通過標記網站(有2個選項)進行顏色編碼。深度來自電子表格中的兩個不同列,並且它們不能合併爲一個。

我的目標是將「plot2」(站深度散點圖)添加到「plot1」箱形圖(檢測深度)中來組合這兩個圖。他們都在查看相同的變量(深度和站點),並且必須是相同的y軸比例。

我想我可以弄清楚一個混亂的解決方法,如果我使用的R基礎程序,但我想正確學習ggplot,如果可能的話。任何幫助是極大的讚賞!

+0

將其標記爲要遷移到StackOverflow。 – TMS

+1

您對'aes(y = data $ Depth)'的使用可能是問題。您不需要以這種硬編碼的方式引用變量。這個問題需要示例數據! – mnel

+0

Maryanne,如果您正在學習R,您可能需要爲以下兩個網站添加書籤:Quick-R(http://statmethods.net/)和R-Bloggers(http://www.r-bloggers.com/ )。 – Dinre

回答

2

更新:我對原文中使用的語言感到困惑,並且寫了一個比必要的更復雜的答案。這是清理版本。

第1步:設置。在這裏,我們確保兩個數據幀中的深度值具有相同的變量名稱(爲了便於閱讀)。

df <- data.frame(f1=factor(data$Tagging.location), f2=factor(data$Station), depth=data$Detection.depth) 

df2 <- data.frame(f2=factor(data$Station), depth=data$depth) 

步驟2:現在可以用「ggplot」函數繪製此並且通過使用`COL = f1``參數分割數據。我們將單獨繪製探測數據,因爲這需要一個盒形圖,然後我們將用彩色點繪製臺站的深度(假設每個臺站只有一個深度)。我們通過引用'geom'函數內的數據來指定兩個不同的圖,而不是指定主'ggplot'函數內的數據。它應該是這個樣子:

ggplot()+geom_boxplot(data=df, aes(x=f2, y=depth, col=f1)) + geom_point(data=df2, aes(x=f2, y=depth), colour="blue") + scale_y_reverse() 

在該圖示例中,我們使用箱線圖來表示的檢測數據,並通過該網站標籤顏色的盒形圖。但是,我們使用特定顏色的點分別繪製站點,所以我們將能夠清楚地看到它們與箱形圖的關係。

您應該可以從這裏調整繪圖以適應您的需求。

我創建了一些虛擬數據並加載到圖表中以向您展示它的外觀。請記住,這純粹是隨機數據,並沒有真正意義。

Depth Chart

+0

非常感謝!這正是我想要的,你解釋它的方式非常合理。真的很感謝幫助! – Maryanne

+0

出於某種原因,我無法再讓我的樣本大小顯示出來(它們沿着圖的頂部)。我使用了下面的代碼,但它不起作用。有任何想法嗎? 'stat_summary(fun.data = give.n,geom =「text」,position = position_dodge(height = 0,width = 0.75),size = 3)' – Maryanne

+0

@Maryanne,實際上,我想我可以節省一些時間指向你的'geom_text'功能。你可以使用像這樣的東西:'geom_text(data = count(df,vars =「f2」),aes(x = f2,y = 0,label = freq),size = 3)'。 – Dinre