R ggplot标签在非常小的值上被截断

R ggplot标签在非常小的值上被截断,r,ggplot2,R,Ggplot2,我有一个通过循环生成的图,所以解决方案必须是动态的,而不是一次性的 基本上一切都很好,直到有一个数据集具有极端性。在这种情况下,一种几何图形,其中前两条为~16k和~6k,第三条仅为2。因为它仅仅高于0,所以数字“2”被截断。作为一个动态生成的图形,我不能使用位置将其移动到条形图上方,否则较高的数字会被截断。 任何帮助都很好:)这里有两种方法 如果标签的y值太低,请将其移动。在这里,pmax(1000,Freq)将文本放置在较大的Freq或1000值处,在文本位置上放置一个下限 代码: 添加

我有一个通过循环生成的图,所以解决方案必须是动态的,而不是一次性的

基本上一切都很好,直到有一个数据集具有极端性。在这种情况下,一种几何图形,其中前两条为~16k和~6k,第三条仅为2。因为它仅仅高于0,所以数字“2”被截断。作为一个动态生成的图形,我不能使用位置将其移动到条形图上方,否则较高的数字会被截断。


任何帮助都很好:)

这里有两种方法

  • 如果标签的y值太低,请将其移动。在这里,
    pmax(1000,Freq)
    将文本放置在较大的Freq或1000值处,在文本位置上放置一个下限
  • 代码:

  • 添加
    +coord_cartesian(clip=“off”)
    ,以便打印区域外的文本和打印元素不会被剪裁掉。如果要防止值与轴标签重叠,还可以使用
    vjust=0
    移动垂直对齐
  • 我使用的样本数据:

    gndr_cnt_tbl = data.frame(
      Var1 = c("Female", "Male", "Other"),
      Freq = c(10000, 5000, 5)
    )
    

    太好了,谢谢!另外,感谢您添加这两个选项!
    ggplot(gndr_cnt_tbl, aes(Var1, Freq, fill=Var1)) +
      geom_col() +
      geom_text(aes(label=Freq, y = pmax(1000, Freq)),   # HERE
                position=position_stack(0.5), size = 5) + 
      theme(legend.position = "none", axis.text=element_text(size=15), 
            axis.title=element_text(size=12))+ggtitle("Gender Breakdown")+
      theme(plot.title = element_text(size=15))+xlab("Gender")+   
      scale_y_continuous(expand = c(0, 0), limits = c(0, NA)) 
    
    gndr_cnt_tbl = data.frame(
      Var1 = c("Female", "Male", "Other"),
      Freq = c(10000, 5000, 5)
    )