【问题标题】:R ggplot heatmap using geom_tile(): how to sort by year and show all years in y-axis?使用geom_tile()的R ggplot热图:如何按年份排序并在y轴上显示所有年份?
【发布时间】:2012-02-05 17:34:52
【问题描述】:

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

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

【问题讨论】:

  • 请避免使用红绿色配色方案,因为约 10% 的男性很难区分正负值。

标签: r ggplot2


【解决方案1】:

对于前两点,您可以将 scale_y_continuous 替换为 scale_y_reverse 以将最早的年份放在首位,并明确指定中断和标签。

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

【讨论】:

  • 谢谢文森特,这对我有用。有人在同一时区很有用!
  • 顺便说一句,有没有人知道我应该把“大小”参数放在这个代码片段中的什么位置,以最好地控制热图中字体的大小?它应该在 ggplot 语句、geom_tile、geom_text 部分还是...?
  • 大小应在“aes”之外,否则将被解释为 1 值因子且无效:geom_text(size=10) 应该可以工作。
  • 啊,当然是设置而不是映射。是的,它有所作为。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多