gpt4 book ai didi

r - ggplot中的躲避/位移/排斥轴刻度标签?

转载 作者:行者123 更新时间:2023-12-04 14:06:31 25 4
gpt4 key购买 nike

如果没有大量工作,我想要的可能是不可能的,但也许有人有解决方案。我有一个像下面这样的图(这当然是一个过于简单的例子),其中我的刻度标签彼此非常接近:

dd <- data.frame(x=1:4, y=c(-10,10.5,10.6,10.7),
z = LETTERS[1:4])
library(ggplot2)
gg1 <- ggplot(dd, aes(x,y)) +
geom_point() +
geom_segment(x=0, aes(xend=x, y=y, yend=y)) +
scale_y_continuous(breaks=dd$y, labels=dd$z)
plot with three tick labels (B, C, D) overlapping
如果我真的想要,我可以导出为 SVG,将其转储到 Inkscape,并手动将标签分开(甚至添加连接标签与精确 y 轴位置的小指示线):
picture with B, C, D manually displaced
能够以编程方式/自动方式做这样的事情会很好。我想过:
  • ggrepel包(仅适用于绘图 AFAIK 中的标签/文本)
  • directlabels包(它有一些放置选项,如“first.bumpup”,可能适用于这种情况/可破解)
  • n.dodgecheck.overlap guide_axis 的参数如图 here看起来有用和有趣,他们几乎处理这个案例,但是n.dodge水平躲避标签,如果标签长于几个字符,这将变得难看...

  • 我会很高兴有 label.pos.nudge可以手动指定的参数,以将标签沿轴的位置与其对应的位置

    最佳答案

    感谢建议看this question (和 this question 让我知道 coord_cartesian(clip = "off") ,我做了以下工作( 注意 我必须在上面的基本示例中将 geom_segment(x=0, ...) 更改为 geom_segment(x=-Inf, ...) ,以便关闭剪辑不要把事情搞砸)。

    gg1 + coord_cartesian(clip = "off") +
    theme(axis.text.y = element_blank(),
    plot.margin = margin(t=5.5, r=5.5, b=5.5, l=30, unit="pt")) +
    geom_text_repel(x = 0.85, aes(label = z, y = y),
    direction = "y",
    force_pull = 100,
    hjust = -7,
    xlim = c(0.8,1))
    graph with repelled points
    请注意,这可能需要对情节边缘和 geom_text_repel 的论点进行大量的处理。 ( forceforce_pullhjustxlim 等)让它看起来正确......我仍然没有按照我想要的方式得到我的真实情节,但它已经接近了。 (这里的 xhjust 值可能是多余的...)

    关于r - ggplot中的躲避/位移/排斥轴刻度标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68278953/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com