使用颜色在散点图中指示三个不同的值

Indicate three diferent values in a scatterplott using colors

我的教授有以下任务:

使用 ggplot2 并创建另一个 variablesact_sm 和 pop_sm 的散点图。这次来自美国 (3)、英国 (4) 和跨国演员 (888) 的演员应该用不同的颜色表示。确保情节有一个图例。合理标注坐标轴。

我有以下 data.frame 个命名节点:

actor_type actor_ctr actor_pos pop_sm act_sm        str
1            3         4         2    799   1087  1.3604506
102         NA       999        NA     78     90  1.1538462
103         NA       999        NA     78     90  1.1538462
104          3         4         2    441     NA         NA
105          3         4         2   1049    789  0.7521449
106          4        75         1    264    948  3.5909091
107          4        75         1    264    948  3.5909091
4            3         4         2    799   1087  1.3604506
5            3         4         2    799   1087  1.3604506
6            3         4         2    799   1087  1.3604506
7            4         3        NA    158    212  1.3417722
8            4         3        NA    158    212  1.3417722
    ...

我想根据 act_sm 和 pop_sm 的值创建一个散点图,其中我想用不同颜色的点表示 actor_ctr 3、4 和 888 - 全部actor_ctr 中的其他值应该有一种颜色。我已经试过了,但没有用:

nodes%>% filter(nodes, actor_ctr%in% c(3,4,888)%>%
    ggplot(nodes, aes(act_sm, pop_sm))+ 
        geom_point(aes(x= act_sm, y= pop_sm, colour = actor_ctr), size=2)

而且我不知道怎么插入图例。

您的代码存在一些问题。

  1. filter(...c() 之后缺少一个 close-paren。

  2. 使用 nodes %>% filter(actor_ctr...)filter(nodes, actor_ctr...),不能同时使用。

  3. 不要在对 ggplot 的调用中引用 nodes。有时您可以(并且应该)在 ggplot 层中引用外部数据框,这不是其中之一。以下是实际解释的内容:

    nodes %>%
      filter(actor_ctr %in% c(3,4,888)) %>%
      ggplot(data = ., mapping = nodes, aes(act_sm, pop_sm)) +
      geom_point(aes(x= act_sm, y= pop_sm, colour = actor_ctr), size=2)
    

    其中.指的是filter(...)之后的8行数据,nodes指的是管道开始前的帧。虽然 . 没有正式分配给变量,但它仍然是管道中该点的数据状态。在这里,它有 8 行,所有列都相同,但不难想出 .origdata 具有完全不同的形状和属性的示例。

    此外,由于那里的位置参数,mapping= 肯定不是你的 nodes 数据框。

  4. 你的色彩审美是基于一个数字,所以ggplot2推断它是连续的,而我相信它是事实序数或分类(离散)。这通常可以使用 factor(actor_type).

    来解决

让我们尝试解决所有这些问题:

nodes %>%
  filter(actor_ctr %in% c(3, 4, 888)) %>%
  ggplot(aes(act_sm, pop_sm)) + 
  geom_point(aes(x = act_sm, y = pop_sm, colour = factor(actor_ctr)), size = 2)