如何按符号大小控制geom_errorbar宽度?

时间:2017-11-07 06:14:04

标签: r ggplot2 errorbar

在下面的例子中,我有一个简单的平均值图,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)绘制时看起来很好: Plot1

但在600x200绘制时,错误栏宽度/高度看起来不同 Plot2

2 个答案:

答案 0 :(得分:2)

我使用了一个size-variable,因此你可以同时控制所有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)

enter image description here

答案 1 :(得分: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但最后一行才能将文件添加到您选择的文件夹中。