【问题标题】:Is there a way to automatically keep a geom_text label from being cut off? [duplicate]有没有办法自动防止 geom_text 标签被切断? [复制]
【发布时间】:2021-10-05 07:48:18
【问题描述】:

我正在将标签应用于类似于 example 的情节。标签将是线上点的数值。他们不断地被切断。我试图弄清楚如何可靠地调整 y 轴限制,以便所有标签都适合绘图窗口。我一直无法找到始终如一的工作。感谢您的帮助!

library(ggplot2)

mymin <- -1000000
mymax <- -mymin
myinterval <- 100000

myseq <- seq(mymin,mymax,myinterval)

temp <- data.frame(X=myseq,Y=myseq,Name=rep("labels",length(myseq)))

p <- ggplot(temp,aes(x=X,y=Y)) + geom_line() + 
    geom_text(data=subset(temp,Y<0),aes(x=X,y=Y,label=Name),angle=90,hjust=1)+
    geom_text(data=subset(temp,Y>0),aes(x=X,y=Y,label=Name),angle=90,hjust=0)+
    scale_y_continuous(labels = scales::label_number_si())+
    scale_x_continuous(labels = scales::label_number_si())
    
p

我的会话信息:

R version 3.6.0 (2019-04-26)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 17763)

Matrix products: default
 

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] scales_1.1.1    ggplot2_3.3.2    

【问题讨论】:

  • 在您的 x 和 y 比例尺中使用 expand 来更改两端包含多少空间。顺便说一句,geom_text(aes(label = Name, hjust = ifelse(Y &lt; 0, 1, 0)), angle = 90) 将设置您的hjust 只需一个geom_text 调用而不设置您的数据子集,或者您可以使用相同的ifelse 语句向数据添加一个变量并将其映射到内部的hjust你的aes。我很少看到 hjust 被用作美学,但它是合法的
  • 不能解决所有问题,有时可能看起来很糟糕,但p + coord_cartesian(clip = "off") 会解决某些情况。
  • 非常感谢! expand 和 coord_cartesian 方法都非常有用,但它们需要我设置任意的限制数量,在某些情况下可能太多或两个太少。有没有办法提取 geom_text 标签的特征 - 特别是它们占用的 y 距离(因为我的角度是 90),这样我就可以计算出在 expand 参数中使用的确切限制?
  • 相关问题,这里仍然是悬而未决的问题之一stackoverflow.com/questions/55686910/…

标签: r ggplot2 label geom-text


【解决方案1】:

它并不完美,但expand_limits 是一种快速获得所需内容的方法。它不是自动的,但可以很容易地逐个地使用它。

p <- ggplot(temp,aes(x=X,y=Y)) + geom_line() + 
  geom_text(data=subset(temp,Y<0),aes(x=X,y=Y,label=Name),angle=90,hjust=1)+
  geom_text(data=subset(temp,Y>0),aes(x=X,y=Y,label=Name),angle=90,hjust=0)+
  scale_y_continuous(labels = scales::label_number_si())+
  scale_x_continuous(labels = scales::label_number_si())+
  expand_limits(y = c(-1100000,1100000))

p

【讨论】:

  • 非常感谢! expand_limits 方法非常有用,但需要我设置任意限制数量,在某些情况下可能太多或两个少。有没有办法提取 geom_text 标签的特征——特别是它们占用的 y 距离(因为我的角度是 90),这样我就可以计算出在 expand 参数中使用的确切限制?时间
  • 如果有办法从 grob 中提取该信息,我还没有听说过。我理解你想要让这一切自动发生的意思。 expand_limits 在某些情况下(例如使用facet_gridfacet_wrap 时)将无法正常工作。
猜你喜欢
  • 1970-01-01
  • 2021-12-03
  • 2011-10-24
  • 1970-01-01
  • 2020-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多