我有一个在y轴上有标签的图(在使用coord_flip之后)
Names <- c("ExampleA","ExampleB","ExampleC","ExampleD", "ExampleE", "ExampleF","ExampleG", "ExampleH")
Counts <- c(4,3,2,1,-1,-2,-3,-4)
Type <- c("X","X","X","X", "Y","Y","Y","Y")
df <-data.frame(Names,Counts, Type)
ggplot(df, aes(x=reorder(Names,Counts), y=Counts, fill=Type))+
geom_col()+
coord_flip()+
theme_minimal()
我希望标签写在酒吧旁边。意味着“示例A/B/C/D”等应该写在条形旁边,而不是列在y轴上。或者在视觉上:我所拥有的
我想要什么
(Credit Li et al. 2021 https://doi.org/10.3389/fimmu.2021.694801)
我试过了:ggplot: put axis text inside plot,没有用。
这
geom_label(label=Names, parse=TRUE)
是接近的,但不是我真正想要的(而且对于真实的数据,只有当我将每个名字都输入到一个向量中时才有效,如果不是必要的话,我想避免)。我希望你能告诉我
geom_label(label=Names, position="inside")
或
scale_x_discrete(position = "inside")
这是可能的,但到目前为止,我什么也没找到。
3条答案
按热度按时间gdrx4gfi1#
更新以匹配OP所需的输出和长名称。
我们重新排列了原始的x和y主题,这样我们就可以避免
coord_flip
并按原样阅读图表,而不是将x和y转置。使用
hjust
和nudge_x
使文本定位更加健壮,前者对齐文本,后者在文本和栏的末尾之间提供填充。至于长文本,这是通过在调用
scale_x_continuous
时使用expansion
在图的两侧创建额外空间并在调用geom_text
时将文本大小设置为3来管理的。另一种方法是编辑文本以包含换行符,但在有许多条的情况下,这可能会有问题。创建于2023-06-26带有reprex v2.0.2
67up9zun2#
或者,您可以创建新变量
x2
和y2
,并在annotate
函数中使用它们来生成预期的图w1e3prcc3#
如果
Names
的大小很长,那么我们可以按如下方式减少annotate()
中标签的大小