删除网格线后,ggplot2更改y轴值的位置

时间:2020-01-22 09:49:48

标签: r ggplot2

我想在没有网格线的ggplot2中创建一个热图。我使用主题函数和panel.grid参数删除了它们,但是在y轴值和绘图之间留有空间: enter image description here

我尝试使用主题函数的axis.text参数弥合此差距,但它使值不对齐: enter image description here

请问有人可以提出一种解决方案,使该图看起来像这样: enter image description here

可复制代码下方:

library(ggplot2)
tmp<-data.frame(cbind(rep(c("Sun", "Sat", "Fri", "Thu", "Wed", "Tue", "Mon"), 24),
                      rep(0:23, 7),
                      runif(168, 0, 3)))
tmp$X1<-factor(tmp$X1, levels= c("Sun", "Sat", "Fri", "Thu", "Wed", "Tue", "Mon"))
tmp$X2<-as.numeric(tmp$X2)
tmp$X3<-as.numeric(tmp$X3)
ggplot(tmp, aes(X2, X1, fill=X3, label=round(X3,2))) +
  geom_tile() +
  theme_minimal() +
  scale_fill_gradient(low="springgreen", high="darkgreen") +
  scale_x_continuous(breaks=0:23) +
  geom_text() +
  theme(panel.grid.major.x = element_blank(),
        panel.grid.major.y = element_blank(),
        panel.grid.minor.x = element_blank(),
        panel.grid.minor.y = element_blank(),
        axis.title.x = element_blank(),
        axis.title.y = element_blank(),
        #axis.text.y = element_text(hjust = 3.2),
        legend.position = "none")

1 个答案:

答案 0 :(得分:1)

你想要那样的东西吗?

ggplot(tmp, aes(factor(X2 - 1), X1, fill = X3, label = round(X3, 2))) +
  geom_tile() +
  geom_text() +
  scale_fill_gradient(low = "springgreen", high = "darkgreen") +
  coord_fixed(.5) +
  theme(
    panel.grid.major.x = element_blank(),
    panel.grid.major.y = element_blank(),
    panel.grid.minor.x = element_blank(),
    panel.grid.minor.y = element_blank(),
    panel.background   = element_blank(),
    axis.title.x       = element_blank(),
    axis.title.y       = element_blank(),
    axis.ticks         = element_blank(),
    legend.position    = "none"
  )

heatmap

y-lab间距的问题是由于您的X2 var是连续的。因此geom_tile()将图块的中心定位在1,2,3 ... 23,图块的宽度==1。第一个图块的左侧从1-.5 = 0.5开始,即这就是为什么-.5和.5之间没有空白的地方(没有中心为0的图块)。将X2转换为因数,即可对其进行修正,而无需进行任何其他调整。

想着,您可能想固定图解的边缘。