2016-04-28 29 views
0

我是一個相對新手到R,我正在編寫代碼使用ggplot2從一些漂亮的基本數據創建圖表。我的繪圖代碼目前看起來是這樣的:在ggplot需要第二個傳說geom_hline的

chart1_data = read.csv(data_file, as.is=T) 
chart1_means = read.csv(means_file, as.is=T) 

p = ggplot(data=chart1_data, aes(x=entity, y=usage, fill=medicine)) + 
geom_bar(stat="identity", position=position_dodge()) + 
geom_hline(data=chart1_means, aes(yintercept=value), show.legend=FALSE) 

這就使人們的跨越代表平均值條黑色水平線分組豎條圖表和具有顯示垂直條的顏色編碼的傳奇人物。

我想要做幾件事情:在顏色

  1. 顯示水平線(geom_hline)(默認集合,R具有的色彩,映射到不同數目的在chart1_means表的行)

  2. 顯示第二個圖例,顯示這些線條顏色和地圖到chart1_means文件中列1的值,這是文本標籤。

爲了清楚起見,chart1_means CSV文件看起來像這樣:

label,value 
USA Codeine mean, 14.2 
Canada Codeine mean, 12.7 
etc. 

而且chart1_data CSV文件看起來像這樣:

year,medicine,entity,usage,units 
2006,Codeine,Mexico,0.8,mg/capita 
2006,Codeine,Cuba,NA,mg/capita 
etc. 

我有這個失敗谷歌搜索。似乎有很多方法可以做類似的事情,但沒有我能找到的,這是非常適用的。

更新的版本?

我設計的東西是更接近正確的,但還是錯了bethanyP的建議。代碼目前看起來像這樣:

chart1_data = read.csv(data_file, as.is=T) 
chart1_means = read.csv(means_file, as.is=T) 

means_labels = chart1_means$label 
colors = rainbow(length(means_labels)) 

p = ggplot(data=chart1_data, aes(x=entity, y=usage, fill=medicine)) + 
geom_bar(stat="identity", position=position_dodge(), show.legend=TRUE) + 
geom_hline(data=chart1_means, aes(yintercept=value), color=colors) + 
scale_fill_manual("means", values=colors, guide=guide_legend(override.aes = list(colors))) 

結果是覆蓋彩條(好)但仍然只有一個圖例的彩色線條。圖例的標題爲「手段」(面向行的數據),但顯示「藥品」(酒吧導向數據)的顏色和標籤。

我想我可能能夠做到這一點,而不是:

scale_fill_manual("means", values=colors, labels=means_labels) 

但這填寫標題爲「手段」單一的傳說,這是一個子集與酒吧有關的顏色和標籤「 means_labels「(因爲條數線比條數線少)。

我幾乎陷入僵局。仍然需要來自兩個不同數據系列的兩個傳說。還有其他建議嗎?

回答

1

show_guide = TRUE添加到geom_bar美學,明確告訴它爲您的主要legendpurple的情節內容製作圖例。

+ geom_bar(stat="identity", position=position_dodge(), show_guide = TRUE) 

你可以簡單地通過添加參數,color = "red"geom_hline得到的hline的顏色。當你在它的時候,添加一個fill="some text here"參數來標記你的第二個圖例中的行,特別是如果你要添加多行不同的顏色。

+ geom_hline(data=chart1_means, aes(yintercept=value), fill="mean", color="red") 
+ geom_hline(data=chart1_sd, aes(yintercept=value), fill="Standard Deviation", color="pcreateurple") 

然後你可以使用可以使用scale_fillguide=guide_legend,讓你在回家的路上休息。

+ scale_fill_manual("Means & SD", guide=guide_legend(override.aes = list(color=c('purple", "red"))) 

您還可以創建一個變量來保存的顏色列表,並通過使用變量名和一個整數來指定,如果你要使用的每一個顏色列表中指定其中使用調色板作爲容器。

如果您的顏色和線條不符合您的期望,並且圖例中有錯誤的東西,請查看您的ggplot函數行的順序。

如果您在geom_hline之前有scale_fill_manual,它可能會着色併爲您的酒吧創建錯誤審美的圖例。剪切並粘貼,直到您將它們放在正確的位置。

ggplot非常強大,完全不直觀。我隨時都會隨身攜帶一張備忘單來幫助解決這個問題。它沒有羞恥。 Rstudio有一個很好的。

+0

我已經更新了我的代碼到它的當前窗體。 – Barry

相關問題