ggplot2中x轴上的额外空白区域

时间:2014-11-10 19:57:36

标签: r ggplot2

我已经编写了这个函数(灵感来自this Learning R post)来显示矩阵:

library(ggplot2)

tile_matrix_plot <- function(M, breaks) {

M.m <- melt(M) 
base_size <- 9
p <- ggplot(M.m, aes(Var1, Var2)) + 
  geom_tile(aes(fill=value), colour="white", size=.2) +
  scale_fill_gradient(low="blue", high="green") +
  theme_grey(base_size = base_size) +
  labs(x = "", y = "") +
  scale_x_discrete(expand=c(0,0), breaks=breaks) +
  scale_y_reverse(expand=c(0,0), breaks=breaks) +
  theme(legend.position = "none",
        axis.ticks = element_blank(),
        axis.text = element_text(size=base_size*.8, angle=90,
                                 hjust=0, colour="grey50"),
        panel.background = element_blank()) 

  return(p)
}

当我尝试使用它时,就像这样说

tile_matrix_plot(
 matrix(c(.7,.4,.05,.2,
          .4,.6,.05,.2,
          .05,.05,.1,.05,
          .2,.2,.05,.4), ncol=4),
 1:4)

我在x轴的末端获得了额外的空白区域。以下是示例输出Example of the image

如何摆脱x轴上的额外空白?似乎x轴总是使用scale_x_discrete参数扩展到breaks中指定的点之外一点。

1 个答案:

答案 0 :(得分:4)

您可以使用coord_cartesian摆脱空白区域。我还对您的功能进行了其他两项更改。首先,函数将矩阵列绘制为图形行,将矩阵行绘制为图形列。我已经改变了这一点(通过反转函数中的Var1Var2),以便图中的行(列)对应于矩阵中的行(列)。其次,我已经删除了函数的breaks参数,因为可以根据矩阵中的行/列数在函数内部设置。

tile_matrix_plot <- function(M) {                         # breaks argument removed

  M.m <- melt(M) 
  base_size <- 9
  p <- ggplot(M.m, aes(Var2, Var1)) +                     # Reversed Var1 and Var2
    geom_tile(aes(fill=value), colour="white", size=.2) +
    scale_fill_gradient(low="blue", high="green") +
    theme_grey(base_size = base_size) +
    labs(x = "", y = "") +
    scale_x_discrete(expand=c(0,0), breaks=1:ncol(M)) +   # Set x-breaks here
    coord_cartesian(xlim=c(0.5, ncol(M)+0.5)) +           # To get rid of white space 
    scale_y_reverse(expand=c(0,0), breaks=1:nrow(M)) +    # Set y-breaks here
    theme(legend.position = "none",
          axis.ticks = element_blank(),
          axis.text = element_text(size=base_size*.8, angle=90,
                                   hjust=0, colour="grey50"),
          panel.background = element_blank()) 

  return(p)
}

我实际上不确定为什么ggplot2会在右边添加额外的空格,但是coord_cartesian将其删除。