2017-09-04 84 views
0

我想在ggplot中繪製一個條形圖,但我不斷只有網格。這顯然是關於draw nothinghere的演示,但我想了解如何以最簡單的方式獲取值。爲什麼這個ggplot只繪製沒有值的網格?

enter image description here

library(ggplot2) 
    testData<-data.frame(x=c("a","b","c","d","e","f"), y=c(10,6,9,28,10,17)) 
    bar <- ggplot(data=testData, aes(x=c("a","b","c","d","e","f"), y=c(10,6,9,28,10,17), fill = "#FFCC00")) 

的一種方式,我可以得到該地塊是geom_bar

enter image description here

bar <- ggplot(data=testData, aes(x=c("a","b","c","d","e","f"), y=c(10,6,9,28,10,17), fill = "#FFCC00")) + geom_bar(stat="identity") 

爲什麼值不是第一線圖上繪製,以及如何解決這是最簡單的方法嗎?這種與+作圖的方式背後有什麼想法,它叫什麼?

回答

5

隨着ggplot2包,調用ggplot()只打算調用基本網格;這就像繪製圖表之前拿出一張方格紙。無論哪種情況,準備好網格與繪製圖表無關。這就是爲什麼運行以下命令將導致空網格在你的第一個例子:

ggplot(data=testData, aes(x=x, y=y, fill = "#FFCC00")) 

這是不一樣的使用類似的情節)的函數(或HIST(),這預習電網並繪製在數據同時:

plot(x=x,y=y,data=testData) 

hist(x=x,data=testData) 

中ggplot「+」只是一種方式說,有涉及到我們要包含在第一個空白格柵頂部的ggplot多個參數。這就是爲什麼每個由「+」分隔的行通常稱爲圖層。

所以,如果我們想要做一個簡單的散點圖,我們在網格上添加點:

testData<-data.frame(x=c(1:6), y=c(10,6,9,28,10,17)) 

ggplot(data=testData,aes(x=x,y=y)) + 
    geom_point() 

輸出:

enter image description here

如果我們想要添加行到scatterplot,我們只需添加一行代碼:

ggplot(data=testData,aes(x=x,y=y)) + 
    geom_point() + 
    geom_line() 

輸出:

enter image description here

我們可以不斷加入這樣的層,如果我們想。只要注意,他們將在訂單打印您鍵入他們(即頭幾行會後,他們印製的線下):

ggplot(data=testData,aes(x=x,y=y)) + 
    geom_bar(stat="identity",fill="#00BFC4") + 
    geom_point() + 
    geom_line() 

輸出:

enter image description here

另外,還要注意建議不要在ggplot調用中多次調用您的數據;這可能導致錯誤。

不要使用:

ggplot(data=testData, aes(x=c("a","b","c","d","e","f"), 
         y=c(10,6,9,28,10,17), fill = "#FFCC00")) + 
    geom_bar(stat="identity") 

#or 

ggplot(data=testData, aes(x=testData$x, y=testData$x, fill = "#FFCC00")) + 
    geom_bar(stat="identity") 

而是使用:

ggplot(data=testData, aes(x=x, y=y, fill="#FFCC00")) + 
    geom_bar(stat="identity") 

如果你想從數據幀(或多個)第一ggplot()行內不叫積數據,然後一個簡單的數據參數添加到使用不同的數據幀中的「層」,像這樣:

ggplot(data=testData,aes(x=x,y=y)) + 
    geom_bar(stat="identity",fill="#00BFC4") + 
    geom_point(data=differentDf, aes(x=x,y=y)) + 
    geom_line(data=differentDf, aes(x=x,y=y)) 
+0

是否有可能做comboplots其中兩個differen哪些部分定義了兩套不同的數據,以便在圖層之間進行繪圖? – hhh

+0

當然。這是ggplot最擅長的事情之一。請參閱我爲解決此問題所做的上述編輯。 – www