5

我有以下数据框:

 id  variable   value
 ID1    1A      91.98473282
 ID1    2A      72.51908397
 ID1    2B      62.21374046
 ID1    2D      69.08396947
 ID1    2F      83.39694656
 ID1    2G      41.60305344
 ID1    2H      63.74045802
 ID1    9A      58.40839695
 ID1    9C      61.10687023
 ID1    9D      50.76335878
 ID1    9K      58.46183206

我正在使用 ggplot2 生成带有数据的热图:

     ggplot(data, aes(variable, id)) +
              geom_raster(aes(fill = value)) + 
              scale_fill_gradient(low = "white",
              high = "steelblue")

情节如下所示: http ://dl.dropbox.com/u/26998371/plot.pdf

我希望瓷砖填充 y 轴上的绘图空间,而不是在上方和下方留下空间。

我确信有一个简单的答案。任何帮助将不胜感激。

scale_y_discrete(expand = c(0, 0)) 不适用于 y 轴,但 scale_x_discrete(expand = c(0, 0)) 将在 x 轴上工作以填充绘图空间。

4

1 回答 1

6

更新 似乎在 ggplot2 的最新版本中已解决该问题。

这与id因素中只有一个级别有关。将因子更改id为数字,或更改id因子使其具有两个级别,然后瓷砖填充空间。此外,coord_equal()使用原始id因子会给出一个狭长的情节,但又会填满空间。

## Your data
df = read.table(text = "
id  variable   value
ID1    1A      91.98473282
ID1    2A      72.51908397
ID1    2B      62.21374046
ID1    2D      69.08396947
ID1    2F      83.39694656
ID1    2G      41.60305344
ID1    2H      63.74045802
ID1    9A      58.40839695
ID1    9C      61.10687023
ID1    9D      50.76335878
ID1    9K      58.46183206", header = TRUE, sep = "")

library(ggplot2)

 # Change the id factor
 df$id2 = 1                   # numeric
 df$id3 = c(rep("ID1", 5), rep("ID2", 6))      # more than one level

 # Using the numeric version
 ggplot(df, aes(variable, id2)) +
          geom_raster(aes(fill = value)) + 
          scale_y_continuous(breaks = 1, labels = "ID1", expand = c(0,0)) + 
          scale_x_discrete(expand = c(0,0)) +
          scale_fill_gradient(low = "white",
          high = "steelblue")

在此处输入图像描述

# Two levels in the ID factor
ggplot(df, aes(variable, id3)) +
          geom_tile(aes(fill = value)) + 
          scale_fill_gradient(low = "white",
          high = "steelblue") 

# Using coord_equal() with the original id variable
ggplot(df, aes(variable, id)) +
          geom_tile(aes(fill = value)) + 
          scale_fill_gradient(low = "white",
          high = "steelblue") +
          coord_equal()
于 2012-05-08T20:41:45.960 回答