17

こんにちは、次のグラフを調整して、ゼロ未満の値が赤で塗りつぶされ、上の値が濃い青で塗りつぶされるようにしました。ggplot2でこれを行うにはどうすればよいですか?

   mydata = structure(list(Mealtime = "Breakfast", Food = "Rashers", `2002` = 9.12, 
                            `2003` = 9.5, `2004` = 2.04, `2005` = -20.72, `2006` = 18.37, 
                            `2007` = 91.19, `2008` = 94.83, `2009` = 191.96, `2010` = -125.3, 
                            `2011` = -18.56, `2012` = 63.85), .Names = c("Mealtime", "Food", "2002", "2003", "2004", "2005", "2006", "2007", "2008","2009", "2010", "2011", "2012"), row.names = 1L, class = "data.frame")
x=ggplot(mydata) +
  aes(x=colnames(mydata)[3:13],y=as.numeric(mydata[1,3:13]),fill=sign(as.numeric(mydata[1,3:13]))) +
  geom_bar(stat='identity') + guides(fill=F)
print(x)
4

1 に答える 1

26

データを構造化する方法は、データがどのようにあるべきかではありませんggplot2

require(reshape)
mydata2 = melt(mydata)

基本的な棒グラフ:

ggplot(mydata2, aes(x = variable, y = value)) + geom_bar()

ここに画像の説明を入力してください

ここでの秘訣は、値が負か正かを指定する変数を追加することです。

mydata2[["sign"]] = ifelse(mydata2[["value"]] >= 0, "positive", "negative")

..そしてそれをへの呼び出しで使用しますggplot2(色と組み合わせてscale_fill_*):

ggplot(mydata2, aes(x = variable, y = value, fill = sign)) + geom_bar() + 
  scale_fill_manual(values = c("positive" = "darkblue", "negative" = "red"))

ここに画像の説明を入力してください

于 2012-10-16T08:50:53.033 に答える