【问题标题】:how do i control geom_errorbar width by symbol size?如何通过符号大小控制 geom_errorbar 宽度?
【发布时间】:2017-11-07 06:14:04
【问题描述】:

在下面的示例中,我有一个简单的平均值图,其中包含 X 和 Y 轴的标准偏差误差线。我想控制误差条宽度,以便两个轴始终绘制相同的大小。

理想情况下,我希望条形宽度/高度与符号大小相同(即在本例中为 cex = 3),与最终绘图尺寸无关。有没有办法做到这一点?

# Load required packages:
library(ggplot2)
library(plyr)

# Create dataset:
DF <- data.frame(
  group = rep(c("a", "b", "c", "d"),each=10),
  Ydata = c(seq(1,10,1),seq(5,50,5),seq(20,11,-1),seq(0.3,3,0.3)),
  Xdata = c(seq(1,10,1),seq(5,50,5),seq(20,11,-1),seq(0.3,3,0.3)))

# Summarise data:
subDF <- ddply(DF, .(group), summarise, 
                X = mean(Xdata), Y = mean(Ydata), 
                X_sd = sd(Xdata, na.rm = T), Y_sd = sd(Ydata))

# Plot data with error bars:
ggplot(subDF, aes(x = X, y = Y)) +
  geom_errorbar(aes(x = X, 
                ymin = (Y-Y_sd), 
                ymax = (Y+Y_sd)), 
                width = 1, size = 0.5) +
  geom_errorbarh(aes(x = X, 
                    xmin = (X-X_sd), 
                    xmax = (X+X_sd)), 
                height = 1, size = 0.5) +
  geom_point(cex = 3)  

以 1:1 的比例 (500x500) 绘制时看起来不错:

但以 600x200 绘制时,误差条的宽度/高度看起来不同

【问题讨论】:

    标签: r ggplot2 errorbar


    【解决方案1】:

    我会使用大小变量,这样您就可以同时控制所有 3 个绘图元素

    geom_size <- 3
    
    # Plot data with error bars:
    ggplot(subDF, aes(x = X, y = Y)) +
      geom_errorbar(aes(x = X, 
                        ymin = (Y-Y_sd), 
                        ymax = (Y+Y_sd)), 
                    width = 1, size = geom_size) +
      geom_errorbarh(aes(x = X, 
                         xmin = (X-X_sd), 
                         xmax = (X+X_sd)), 
                     height = 1, size = geom_size) +
      geom_point(cex = geom_size)
    

    【讨论】:

    • 我认为您误读了我的问题。您的答案很好地控制了“大小”(即线宽)。我希望控制条形的宽度/高度。
    • 哦,你的意思是误差线的长度?并且您希望它们的长度相同?
    • 否,误差线的长度是标准偏差,由 ymin 和 ymax 定义。我想控制 geom_errorbar 中的“宽度”和 geom_errorbarh 中的“高度”
    • 啊,现在我明白了,您希望条形末端与您的数据点大小相同
    【解决方案2】:

    这只是建立在 brettljausn 较早的答案之上。您也可以使用变量控制绘图的比率。这仅在您使用ggsave() 而不是在任何预览中实际保存文件时才有效。我还使用size 来控制点的大小。它随着误差线的结束而更好地缩放。

    plotheight = 100
    plotratio = 3
    geomsize = 3 
    
    plot = ggplot(subDF, aes(x = X, y = Y)) +
      geom_errorbar(aes(x = X, 
                        ymin = (Y-Y_sd), 
                        ymax = (Y+Y_sd)), 
                    width = .5 * geomsize / plotratio, size = 0.5) +
      geom_errorbarh(aes(x = X, 
                         xmin = (X-X_sd), 
                         xmax = (X+X_sd)), 
                     height = .5 * geomsize, size = 0.5) +
      geom_point(size = geomsize)  
    
    ggsave(filename = "~/Desktop/plot.png", plot = plot, 
           width = plotheight * plotratio, height = plotheight, units = "mm")
    

    plotheightplotratiogeomsize 更改为您需要的任何内容,以使其看起来不错。您必须更改最后一行中的filename 才能将文件放入您选择的文件夹中。

    【讨论】:

    • 感谢 Stijn!你的回答让我成功了一半。似乎问题是“宽度”在某种程度上是真实的单位,而 cex 是无单位的并且是默认大小的缩放。 geom_errorbar 似乎不允许访问默认值?我想我现在必须接受试错法。
    猜你喜欢
    • 2021-06-05
    • 2013-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多