使用牛皮图将x轴切换到顶部时左对齐轴标签

时间:2016-02-17 17:40:18

标签: r ggplot2 cowplot

我尝试制作相关热图,其中x轴使用cowplot::switch_axis_position移动到顶部。我有不同长度的轴标签,我希望标签左对齐(或者更确切地说是底部对齐,因为它们旋转了90度)。虽然我设法对齐标签,但它们会远远超出情节。

library(reshape2)
library(ggplot2)
library(cowplot)

# some toy data
set.seed(1)
mydata <- mtcars[, c(1, 3, 4, 5, 6, 7)]

# to show difference in justification better, make names of unequal length 
names(mydata) = paste0(sample(c("mtcars_", ""), 6, replace = TRUE), names(mydata))
cormat <- round(cor(mydata), 2)

melted_cormat <- melt(cormat)
head(melted_cormat)

首先是x轴移动到顶部,标签垂直居中的图:

plot <- ggplot(data = melted_cormat, aes(x=Var1, y=Var2, fill=value)) + 
        geom_tile() +
        theme_bw(base_size=20) + xlab("") + ylab("") +
        theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 0.5))
ggdraw(switch_axis_position(plot, 'x'))

link

然后我使用与上面相同的代码,但使用hjust = 0代替左对齐x轴文本。它确实使文本对齐,但文本远离图形移动很远,因此变量名称被截断:link

有关如何解决此问题的任何想法?

1 个答案:

答案 0 :(得分:6)

请注意:CRAN上最新版本的cowplot中不再出现此错误。

旧答案:

对于angle = 90的特殊情况,这似乎是一个错误。我们可以通过向angle添加任意小的值来避免这种情况。

plot <- ggplot(data = melted_cormat, aes(x=Var1, y=Var2, fill=value)) + 
  geom_tile() + theme_bw(base_size=20) + xlab("") + ylab("")+
  theme(axis.text.x=element_text(angle=90 + 1e-09, hjust = 0, vjust=1)) +
  coord_equal(expand = 0)
ggdraw(switch_axis_position(plot, 'x'))

enter image description here