使用cowplot将x轴切换到顶部时左对齐的轴标签
Posted
技术标签:
【中文标题】使用cowplot将x轴切换到顶部时左对齐的轴标签【英文标题】:Left-aligned axis labels when using cowplot to switch x axis to top 【发布时间】:2016-05-29 13:56:21 【问题描述】:我正在尝试使用 cowplot::switch_axis_position
将 x 轴移动到顶部的相关热图。我有不同长度的轴标签,我希望标签左对齐(或者更确切地说是底部对齐,因为它们旋转了 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'))
然后我使用与上面相同的代码,但使用 hjust = 0
代替左对齐 x 轴文本。它确实对齐了文本,但是文本奇怪地远离图形,因此变量名称被截断:
关于如何解决这个问题的任何想法?
【问题讨论】:
【参考方案1】:请注意:此错误不再存在于 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'))
【讨论】:
不错。我刚刚用 padded_out 列名完成了我的回答,并将字体系列更改为“mono”....但这要好得多。 哈哈,但不知道为什么会这样。我正在提交一个 github 问题。 你应该把它作为一个bug提交,我认为你可以参考这篇文章。 谢谢。这很奇怪。有没有办法让标签以刻度线为中心?可能不会? 您可以使用略低于 1 的vjust
值来让它们更接近,但似乎您必须权衡居中和与轴的距离。确实是非常不可预测的行为!以上是关于使用cowplot将x轴切换到顶部时左对齐的轴标签的主要内容,如果未能解决你的问题,请参考以下文章
R语言ggplot2可视化水平条形图(horizontal bar plot)设置水平条形图的轴文本标签左对齐(axis lables left align in horizontal bar)
R语言ggplot2可视化水平条形图(horizontal bar plot)设置水平条形图的轴文本标签左对齐(axis lables left align in horizontal bar)