1

我们有这个简单的数据框:

data <- data.frame(ID = rep(c("a","b"), each = 500),
                   time = 1:500,
                val = rnorm(1000, mean=1, sd = 0.3))

我们有 2 个人的数据(ID==ab)。我们想对个人数据进行子集化,并使用和制作vsb的散点图:valdata_pointdplyrggplot2

library(ggplot2)
library(dplyr)
data%>%
  filter(ID == "b")%>%
  mutate(data_point = c(1:500))%>%
  ggplot(.,)+
    geom_point(aes(x=data_point, y=val), size = 0.5)

在此处输入图像描述

现在假设我们要使单个数据点(例如第一个数据点/行)大于其余数据点,并使用不同的颜色。我们如何从这个管道内部做到这一点,而不必在管道外部创建一个对象?

4

2 回答 2

3

您可以在管道内创建两个变量,一个用于突出显示颜色,另一个用于其大小。

library(ggplot2)
library(dplyr)

data %>%
  filter(ID == "b") %>%
  mutate(data_point = 1:500) %>%
  mutate(highlight = data_point == 1,
         size = 0.5 + 10*highlight) %>%
  ggplot(aes(x = data_point, y = val)) +
  geom_point(aes(color = highlight, size = size), show.legend = FALSE) +
  scale_color_manual(values = c("black", "red"))

另一种不创建这两个变量的方法是将相同的逻辑应用于美学调用geom_point

data %>%
  filter(ID == "b") %>%
  mutate(data_point = 1:500) %>%
  ggplot(aes(x = data_point, y = val)) +
  geom_point(aes(color = data_point == 1, 
                 size = 0.5 + 10*(data_point == 1)), 
             show.legend = FALSE) +
  scale_color_manual(values = c("black", "red"))

在这两种情况下,结果如下。

在此处输入图像描述

编辑

感谢@Allan Cameron 在评论中指出:

在第一个版本中您只需要一个新变量,然后使用 scale_size

结果几乎相同,size突出显示的点相差 0.5。

data %>%
  filter(ID == "b") %>%
  mutate(data_point = 1:500) %>%
  mutate(highlight = data_point == 1) %>%
  ggplot(aes(x = data_point, y = val)) +
  geom_point(aes(color = highlight, size = highlight), show.legend = FALSE) +
  scale_color_manual(values = c("black", "red")) +
  scale_size_manual(values = c(0.5, 10*highlight))
于 2020-08-11T20:49:58.120 回答
0

您可以在其中创建另一列mutate()来处理点大小。在此示例中,sizing_point 是一个以 5 开头的向量,后跟数字 0.5 重复nrow(.)-1次数,在本例中为 499 次。

 #multiple columns can be defined in mutate() separated by a comma
 data %>% 
      filter(ID == "b") %>%
      mutate(sizing_point = c(5,rep(0.5,nrow(.)-1)), data_point = c(1:500))%>%
      ggplot(.,)+
      geom_point(aes(x=data_point, y=val, size= sizing_point)

当然,您可以强调不同的观点。假设您想强调第 75 点。这是一个如何指定该项目的磅值大小的示例。

  #repeats .05 74 times, followed by 5, then repeats 0.5 again to the end of the vector
  c(rep(0.5,74),5,rep(0.5,nrow(.)-75))

并为突出显示的点添加颜色:

data %>% 
  filter(ID == "b") %>%
  mutate(sizing_point = c(5,rep(0.5,nrow(.)-1)), data_point = c(1:500))%>%
  ggplot(.,)+ geom_point(aes(x=data_point, y=val, size= sizing_point, color=factor(sizing_point)))+
  scale_color_manual(values = c("black", "red"))

 
于 2020-08-11T21:46:18.490 回答