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

时间:2012-01-09 04:56:57

标签: r ggplot2

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

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

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

enter image description here

1 个答案:

答案 0 :(得分:5)

对于前两点,您可以将scale_y_continuous替换为scale_y_reverse以使最早的年份处于最佳状态,并明确指定中断和标签。

p_heat +  scale_y_reverse(breaks=1995:2011, labels=1995:2011, expand=c(0,0) )