2016-11-25 61 views
0

我開始學習使用R兩天前,所以這可能是一個真正的輕鬆修復!ggplot2(R):錯誤味精:'錯誤:美學必須是長度1或與數據相同(1093):x,y'

我開始製作這個非常簡單的表格,顯示我的數據(我正在從事社會語言學工作)中'g'和't'的百分比年齡。

---g--- | ---t--- 
    0.936871 | 0.063129 

我想把它變成一個使用ggplot2的條形圖。我希望X軸有兩個類別,一個代表'g',一個代表't',並排排列而不是堆疊。我想要Y軸顯示兩個%年齡。

我試過各種不同的腳本,但我不斷收到錯誤消息'美學必須是長度1或數據相同'。 這個錯誤信息是什麼意思,我該如何解決它?

謝謝! Sadie

+0

嘗試張貼產生錯誤的代碼:HTTPS: //stackoverflow.com/help/mcve –

回答

0

由於沒有以正確的格式存儲數據集,因此出現此錯誤。有了你的數據,你有一個t變量和g變量。 ggplot想要接收描述該軸/特徵的所有元素的aes值。

您擁有的數據是寬格式(多列)。 ggplot2更好地利用長格式數據(鍵值對)。要將寬數據轉換爲長數據,請使用tidyr包(具體爲gather函數)將值收集到一列變量和一列值中。在你的情況下,變量是g和t,值是你的百分比。

然後,您會將轉換的數據傳遞到ggplot,指定x軸爲變量,y軸爲百分比。您想將它繪製爲條形碼,geom_bar()設置爲stat = "identity",因爲您正在提供值。最後一步是通過scale_y_continuous將y軸上的標籤設置爲百分比。

library(tidyr) 
library(ggplot2) 
library(scales) 

df <- data.frame(g = 0.936871, 
       t = 0.063129) 

df <- gather(df, variable, value) 

ggplot(df, aes(x = variable, y = value)) + 
    geom_bar(stat = "identity") + 
    scale_y_continuous(labels = percent) 

結果看起來是這樣的:

enter image description here

至於您的評論的請求:

df <- data.frame(
    category = c(1, 2), 
    g = c(0.8070175, 0.97099768), 
    t = c(0.1929825, 0.029000232) 
) 

df <- gather(df, variable, value, -category) 

ggplot(df, aes(x = category, y = value)) + 
    geom_col(aes(fill = variable), position = position_dodge()) + 
    scale_y_continuous(labels = percent) + 
    scale_x_discrete(limits = c(1,2), breaks = c(1,2), labels = c("Category 1", "Category 2")) 

enter image description here

+0

謝謝你這麼多,這真的很有幫助!如果我想在同一個圖表上比較兩個或更多類別的g和t百分比,那麼呢?所以我有這些結果:在類別1中,g = 0.8070175,t = 0.1929825。在類別2中,g = 0.97099768,t = 0.029000232。我會如何去請ggplot在圖表中顯示這些結果? –

+0

編輯我的答案。你應該在網上搜索一些ggplot2教程。有很多很好的幫助教你基本知識的人。 –

+0

輝煌,謝謝! –

相關問題