当前位置:  开发笔记 > 编程语言 > 正文

如何用长标签维护ggplot的大小

如何解决《如何用长标签维护ggplot的大小》经验,为你挑选了1个好方法。

我有一个情节,它是每种事件类型的简单条形图.我需要情节的标签在情节之下,因为一些事件有很长的名字并且横向压扁了情节.我试图在标题下面移动标签,但是当有很多事件类型时,它现在会被压扁.有没有办法有一个静态的地块大小(即条形图),以便长传说不会压缩情节?

我的代码:

ggplot(counts_df, aes(x = Var2, y = value, fill - Var1)+
    geom_bar(stat = "identity") +
    theme(legend.position = "bottom") +
    theme(legen.direction = "vertical") +
    theme(axis.text.x = element_text(angle = -90)

结果:

在此输入图像描述

我认为这是因为图像尺寸必须是静态的,因此曲线会因轴而牺牲.当我在情节下面放置一个传奇时,同样的事情发生了.



1> Uwe..:

有几种方法可以避免标记的过度绘制或挤压绘图区域或提高可读性.所提出的哪种解决方案最合适将取决于标签的长度和条的数量以及许多其他因素.所以,你可能不得不玩.

虚拟数据

不幸的是,OP没有包含可重复的示例,因此我们必须编制自己的数据:

V1 <- c("Long label", "Longer label", "An even longer label",
        "A very, very long label", "An extremely long label",
        "Long, longer, longest label of all possible labels", 
        "Another label", "Short", "Not so short label")
df <- data.frame(V1, V2 = nchar(V1))
yaxis_label <- "A rather long axis label of character counts"

"标准"条形图

x轴上的标签直立打印,相互叠加:

library(ggplot2)  # version 2.2.0+
p <- ggplot(df, aes(V1, V2)) + geom_col() + xlab(NULL) +
  ylab(yaxis_label) 
p

请注意,最近添加 geom_col()而不是geom_bar(stat="identity")正在使用.

在此输入图像描述

OP的方法:旋转标签

x轴上的标签旋转90°,挤压绘图区域:

p + theme(axis.text.x = element_text(angle = 90))

在此输入图像描述

水平条形图

所有标签(包括y轴标签)都是直立打印的,提高了可读性,但仍然挤压了绘图区域(但在较小程度上,图表是横向格式):

p + coord_flip()

在此输入图像描述

垂直条形图与标签包装

标签是直立印刷的,避免过度绘图,减少了绘图区域的挤压.你可能不得不玩width参数来stringr::str_wrap.

q <- p + aes(stringr::str_wrap(V1, 15), V2) + xlab(NULL) +
  ylab(yaxis_label)
q

在此输入图像描述

包含标签的水平条形图

我最喜欢的方法:所有标签都是直立打印的,提高了可读性,减少了绘图区域的挤压.同样,您可能必须使用width参数stringr::str_wrap来控制标签分割成的行数.

q + coord_flip()

在此输入图像描述

附录:缩写标签使用 scale_x_discrete()

为了完整起见,应该提到ggplot2能够缩写标签.在这种情况下,我发现结果令人失望.

p + scale_x_discrete(labels = abbreviate)

在此输入图像描述

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有