[英]Add legend to “geom_bar” using the ggplot2 package
我是R的新手,所以請原諒我的無知。 我制作了一個偽堆疊的條形圖,其中我使用geom_bar在彼此的頂部繪制了4組條形圖。 三種橡樹(QUAG,QUKE,QUCH)有4種健康狀況類別(活着,死亡,感染和死亡)。
我的代碼如下:
x <- as.data.frame(list(variable=c("QUAG", "QUKE", "QUCH"), alive = c(627,208,109), infected = c(102,27,0), dead = c(133,112,12), sod.dead=c(49,8,0)))
x.plot = ggplot(x, aes(variable, alive)) + geom_bar(fill="gray85") +
geom_bar(aes(variable,dead), fill="gray65") +
geom_bar(aes(variable, infected), fill="gray38") +
geom_bar(aes(variable, sod.dead), fill="black")+
opts(panel.background = theme_rect(fill='gray100'))
x.plot
現在我想制作一個傳說,顯示哪個灰色陰影與樹狀態有關,即“灰色65”是“死樹”等等。我一直在嘗試過去一小時而無法讓它工作。
我看到@Brandon Bertelsen發布了一個很好的答案。 我想添加一些代碼來解決原帖中提到的其他細節:
fill
,ggplot將自動創建圖例。 scale_fill_manual()
來獲得原始帖子中提到的確切灰色。 theme_bw()
是一個方便的功能,可以快速為您的情節獲得黑白外觀。 factor()
的levels
參數指定所需的順序來控制因子級別/顏色的繪制順序。 library(reshape2)
library(ggplot2)
x <- as.data.frame(list(variable=c("QUAG", "QUKE", "QUCH"),
alive=c(627, 208, 109), infected=c(102, 27, 0),
dead=c(133, 112, 12), sod.dead=c(49, 8, 0)))
# Put data into 'long form' with melt from the reshape2 package.
dat = melt(x, id.var="variable", variable.name="status")
head(dat)
# variable status value
# 1 QUAG alive 627
# 2 QUKE alive 208
# 3 QUCH alive 109
# 4 QUAG infected 102
# 5 QUKE infected 27
# 6 QUCH infected 0
# By manually specifying the levels in the factor, you can control
# the stacking order of the associated fill colors.
dat$status = factor(as.character(dat$status),
levels=c("sod.dead", "dead", "infected", "alive"))
# Create a named character vector that relates factor levels to colors.
grays = c(alive="gray85", dead="gray65", infected="gray38", sod.dead="black")
plot_1 = ggplot(dat, aes(x=variable, y=value, fill=status)) +
theme_bw() +
geom_bar(position="stack") +
scale_fill_manual(values=grays)
ggsave(plot=plot_1, filename="plot_1.png", height=5, width=5)
# You may also want to try a dodged barplot.
plot_2 = ggplot(dat, aes(x=variable, y=value, fill=status)) +
theme_bw() +
geom_bar(position="dodge") +
scale_fill_manual(values=grays)
ggsave(plot=plot_2, filename="plot_2.png", height=4, width=5)
您需要重塑數據。
library(reshape)
library(ggplot2)
x <- as.data.frame(list(variable=c("QUAG", "QUKE", "QUCH"), alive = c(627,208,109), infected = c(102,27,0), dead = c(133,112,12), sod.dead=c(49,8,0)))
x <- melt(x)
colnames(x) <- c("Type","Status","value")
ggplot(x, aes(Type, value, fill=Status)) + geom_bar(position="stack")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.