首页 > 解决方案 > R; ggplot2:将 1 个图与另一个图重叠

问题描述

我有两个ggplots。第一个 1 看起来像这样:

ggplot(nurse, aes(x = nurse$z2.bk, y = nurse$z1.bk, color = nurse$phoneme)) +
  geom_point() +
  scale_x_reverse() + scale_y_reverse() +
  scale_color_discrete() +
  theme_classic()

在此处输入图像描述

然后我创建了一个子集,它计算每个音素类别的 z1.bk 平均值和 z2.bk。mean_F1 = z1.bk 平均值和 mean_F2 = z1.bk 平均值。

  vowel  mean_F1 mean_F2
  <fct>    <dbl>   <dbl>
1 Er     0.00830  0.612 
2 Ir    -0.0433   0.0456
3 Vr     0.0365  -0.576 

然后,我为这些值创建了另一个 ggplot(如下),并根据护士 $phoneme 值标记它们。我只是在这里将它们重命名为元音,以保持一切都更干净。

ggplot(means, aes(x = mean_F2, y = mean_F1, label = vowel)) +
  geom_label() + 
  scale_x_reverse() + scale_y_reverse() + 
  theme_classic()

在此处输入图像描述

我现在想覆盖它们,以便标签以相应的颜色显示在其他点上方,即红色的 Er.... 我尝试了以下但收到错误消息。

ggplot(nurse, aes(x = nurse$z2.bk, y = nurse$z1.bk, color = nurse$phoneme, label = means$vowel)) +
  geom_point() + 
  geom_label(data = means, aes(x = mean_F2, y = mean_F1)) +
  scale_x_reverse() + scale_y_reverse() +
  theme_classic()

Error: Aesthetics must be either length 1 or the same as the data (563): label

如果我将 'label = mean$vowel' 更改为 'vowel',我会收到另一条错误消息,指出找不到对象。如果我将其更改为nurse$phoneme,我会收到此错误消息Error: Aesthetics must be either length 1 or the same as the data (3): colour, label

如何正确组合它们?如果我需要为您提供更多数据,请告诉我。并提前感谢!

标签: rggplot2plot

解决方案


$首先,使用约定来调用列的形式有点糟糕ggplot2,您应该简单地给出数据集中列的名称:因此在调用中nurse$z2.bk变得简单。话虽如此,你可以使用它,它应该仍然可以工作......它只是皱眉。:)z2.bkaes()

现在,对于您收到的错误消息 - 这是因为label=在您的ggplot()调用中指出了审美 for be means$vowel,但在 datasetnurse中,有 563 个观察值。由于您有两个数据集分别应用于您的点和标签几何,我将在aes()每个几何中说明它们。

如果没有您的完整数据集,我无法确认,但这应该可以在下面工作。另请注意,我正在为图例指示颜色标签,因为在不同名称的单独数据集中调用两列可能会拆分图例。将图例的名称设置为相同(并且每个标签具有相同的标签)应该将两个颜色图例保持在一起。

ggplot(nurse, aes(x = z2.bk, y = z1.bk, color = phoneme)) +
  geom_point() + 
  geom_label(data = means, aes(x = mean_F2, y = mean_F1, label=vowel, color=vowel)) +
  scale_x_reverse() + scale_y_reverse() +
  labs(color='The colors') +
  theme_classic()

推荐阅读