使用geom_tile()的R ggplot热图:如何按年排序并在y轴上显示所有年份?

Slo*_*ner 8 r ggplot2

在研究了Hadley的书并在此搜索SO之后,我创建了一个由数年和数月矩阵组成的热图,其颜色根据时间序列变量的百分比变化而变化.热图和我用来获取它的代码如下所示.我还有一些我自己无法解决的问题.

1)如何对矩阵进行排序/排序,使y轴的年份从最早到最晚?在这种情况下,我希望这些年从1995年的顶部开始,并继续到2011年的y轴底部.

2)我希望每年都能在y轴上显示,而是每隔5年才显示一次.我认为我的代码中的scale_y_date会处理这个但似乎没有任何影响.如何强制y轴每年显示?

3)我怀疑这仍然是ggplot2"待办事项"列表,但有没有办法让x轴标签(在本例中为Jan,Feb,Mar,Apr等)显示在情节的顶部比在底部?

require(ggplot2)
mydf <- data.frame(date=seq(as.Date("1995/1/1"), by="month", length.out=203),yoy=runif(203, min=-1, max=1))
p_heat <- ggplot(mydf, aes(x=month(date,label=TRUE),y=year(date), fill = yoy, label = sprintf("%1.1f%%", 100*yoy),size=10)) + 
  scale_y_date(major="years", format="%Y") +
  geom_tile() + geom_text(aes(size=10)) +
  scale_fill_gradient2(low = "red", high = "green") +
  scale_x_discrete(expand=c(0,0)) +
  scale_y_continuous(expand=c(0,0)) +
  opts(title="Value (%)") +
  opts(panel.grid.minor=theme_blank()) +
  opts(axis.ticks = theme_blank()) +
  opts(panel.grid.major=theme_blank()) +
  opts(axis.title.y = theme_blank()) +
  opts(axis.title.x = theme_blank()) +
  opts(legend.position = "none")
p_heat
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Vin*_*ynd 5

对于前两点,您可以替换scale_y_continuousscale_y_reverse有早年在上面,并且明确指定的休息和标签.

p_heat +  scale_y_reverse(breaks=1995:2011, labels=1995:2011, expand=c(0,0) )
Run Code Online (Sandbox Code Playgroud)