0

这是我第一次使用这个平台。我希望我做对了。我正在尝试在来自两个组的标准 geom_point() 图中的单个数据之上添加一个组平均值。我很快就覆盖了这部分(见下面的代码)。我要显示的数据来自两个连续变量。

问题是我希望组均值不仅代表均值,还代表均值的标准误差(来自两个变量中的每一个)。我认为根据每个变量具有不同高度和宽度的“+”号是个好主意,但我找不到任何地方如何更改单个点的高度和宽度(分别)。

到目前为止,代码类似于:

DataMean <- Data %>% 
        group_by(Group) %>% 
        summarise(x = mean(x),
                  y= mean(y))

ggplot(Data, aes(x = x, y = y, shape = as.factor(Group))) +
  geom_point() +
  geom_point(data = DataMean, size = 4, shape = 3)

形状 3 是 R 中的“+”号。但是,我不知道如何更改该“+”号的垂直/水平条的高度/宽度,以使其对应于每个组的标准误差意思是。到目前为止,我得到了下图。

谢谢,祝你有美好的一天。图形

4

1 回答 1

1

为了绘制与数据变异性(均值的标准误差)成比例的范围的交叉,请使用两个geom_linerange层,其范围是根据标准误差计算的。

library(dplyr)
library(ggplot2)

DataMean <- Data %>%
  group_by(Group) %>%
  summarise(across(everything(), list(mean = mean, sd = sd), .names = "{.col}_{.fn}"))

DataMean
## A tibble: 3 x 5
#  Group      x_mean  x_sd y_mean  y_sd
#  <fct>       <dbl> <dbl>  <dbl> <dbl>
#1 setosa       1.46 0.174  0.246 0.105
#2 versicolor   4.26 0.470  1.33  0.198
#3 virginica    5.55 0.552  2.03  0.275

ggplot() +
  geom_point(data = Data, aes(x, y, group = Group)) +
  # vertical bars
  geom_linerange(
    data = DataMean,
    mapping = aes(
      x = x_mean,
      ymin = y_mean - y_sd, ymax = y_mean + y_sd)) +
  # horizontal bars
  geom_linerange(
    data = DataMean,
    mapping = aes(
      x = x_mean, xmin = x_mean - x_sd, xmax = x_mean + x_sd,
      y = y_mean)
  ) +
  theme_bw()

在此处输入图像描述


测试数据

Data <- iris[3:5]
names(Data) <- c("x", "y", "Group")
于 2021-06-18T18:36:01.543 回答