2016-04-14 67 views
-1

我想在ggplot中創建一個圖表,根據不同的性別,治療方法,時間段和季節顯示動物的平均家庭範圍大小。我得到R中的錯誤說ggplot2錯誤:美學必須是長度爲1或與數據相同(24)

Error: Aesthetics must be either length 1 or the same as the data (24): x, y, colour, shape"

我看了一下這個錯誤類似的職位,但我一直沒能弄明白呢。這些列中沒有NA,我的數值變量正在被視爲這樣。不知道這個錯誤是否與需要設置數據的問題有關,但我不明白我該怎麼做。我的代碼運行正常,直到ggplot的一部分,它是:

library("ggplot2") 
library("dplyr") 

lion_HR_size <- read.csv(file = "https://dl.dropboxusercontent.com/u/23723553/lion_sample_data.csv", 
      header= TRUE, row.names=1) 

# Mean of home range size by season, treatment, sex and time 
Mean_HR <- lion_HR_size %>% 
group_by(season, treatment, sex, time) %>% 
summarize(
mean_HR = mean(Area_HR_km), 
se_HR = sd(Area_HR_km)/sqrt(n()), 
lwrHR = mean_HR - se_HR, 
uprHR = mean_HR + se_HR) 

limitsHR <- aes(ymin = lwrHR, ymax= uprHR) 

ggplot(Mean_HR, 
aes(x=season, 
y= Mean_HR, 
colour=season, 
shape= season)) + 
geom_point(size = 6, alpha = 0.5)+ 
facet_grid(sex ~ treatment+time)+ 
geom_errorbar(limitsHR, width = 0.1, col = 'red', alpha = 0.8)+ 
theme_bw() 

按照要求,dput(Mean_HR)輸出如下:

dput(Mean_HR) structure(list(season = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("Early_dry", "Late_dry", "Wet"), class = "factor"), treatment = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L ), .Label = c("C", "E"), class = "factor"), sex = structure(c(1L, 1L, 2L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 2L), .Label = c("F", "M"), class = "factor"), time = structure(c(1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L), .Label = c("A", "B"), class = "factor"), mean_HR = c(141.594090181, 138.327188493, 509.287443507692, 345.296845642381, 157.634028930833, 184.202160663125, 252.464096340667, 255.078012825, 59.8485325981818, 143.158189516522, 439.990400912593, 175.410885601333, 221.338774452381, 100.942251723636, 127.961533612727, 167.199563142143, 120.60363022375, 142.351764574211, 249.03854219, 330.018734301176, 123.992902995714, 219.886321226667, 307.869373359167, 296.019550844286), se_HR = c(18.6245437612391, 29.2548378154774, 127.987824704623, 78.9236194797204, 20.8897993194466, 43.1314245224751, 57.6327505533691, 32.1129054260719, 9.383853530199, 38.7678333459788, 130.348285186224, 31.707304307485, 29.1561478797825, 15.4038723326613, 18.1932127432015, 37.791782522185, 32.7089231722616, 33.2629181623941, 46.1500408067739, 88.8736578370159, 15.8046627788777, 36.9665360444972, 70.1560303348504, 87.1340476758794), lwrHR = c(122.969546419761, 109.072350677523, 381.29961880307, 266.373226162661, 136.744229611387, 141.07073614065, 194.831345787298, 222.965107398928, 50.4646790679828, 104.390356170543, 309.642115726369, 143.703581293848, 192.182626572598, 85.5383793909751, 109.768320869526, 129.407780619958, 87.8947070514884, 109.088846411816, 202.888501383226, 241.145076464161, 108.188240216837, 182.91978518217, 237.713343024316, 208.885503168406), uprHR = c(160.218633942239, 167.582026308477, 637.275268212315, 424.220465122101, 178.52382825028, 227.3335851856, 310.096846894036, 287.190918251072, 69.2323861283808, 181.9260228625, 570.338686098816, 207.118189908818, 250.494922332163, 116.346124056298, 146.154746355929, 204.991345664328, 153.312553396012, 175.614682736605, 295.188582996774, 418.892392138192, 139.797565774592, 256.852857271164, 378.025403694017, 383.153598520165)), class = c("grouped_df", "tbl_df", "tbl", "data.frame"), row.names = c(NA, -24L), vars = list( season, treatment, sex), drop = TRUE, .Names = c("season", "treatment", "sex", "time", "mean_HR", "se_HR", "lwrHR", "uprHR" ))

有人能幫助我理解這個錯誤,如何解決它在我的代碼?非常感謝!

+0

在您的示例中,您將數據集的名稱命名爲「size」,但是總結了一個名爲'lion_HR_size'的數據集。你能否將'dput(Mean_HR)'的結果複製並粘貼到你的問題中? – aosmith

+0

dropbox鏈接已經死了。 – Axeman

+0

對不起,我修復了文件的名稱,並且保管箱鏈接再次運行。我還在我的問題aosmith中包含了dput(Mean_HR)。先謝謝您的幫助! – AnnK

回答

0

不完全確定自己爲什麼/如何limitsHR <- ...聲明工作。我預料它會停止不能在工作區中找到lwrHRuprHR對象。

無論如何,ggplot有一個很好的函數mean_se(),這將幫助你巨大。

ggplot(data = lion_HR_size, mapping = aes(x = season, y = Area_HR_km, 
              colour=season, shape= season)) + 
    stat_summary(fun.data = mean_se) + 
    facet_grid(sex ~ treatment+time)+ 
    theme_bw() 
+0

完美運作!謝謝,那個mean_se()確實有很多幫助! – AnnK

相關問題