我已经编写了这个函数(灵感来自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轴的末端获得了额外的空白区域。以下是示例输出。
如何摆脱x轴上的额外空白?似乎x轴总是使用scale_x_discrete
参数扩展到breaks
中指定的点之外一点。
答案 0 :(得分:4)
您可以使用coord_cartesian
摆脱空白区域。我还对您的功能进行了其他两项更改。首先,函数将矩阵列绘制为图形行,将矩阵行绘制为图形列。我已经改变了这一点(通过反转函数中的Var1
和Var2
),以便图中的行(列)对应于矩阵中的行(列)。其次,我已经删除了函数的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
将其删除。