问题描述
我们有一个简单的数据框:
@H_502_3@data <- data.frame(ID = rep(c("a","b"),each = 500),time = 1:500,val = rnorm(1000,mean=1,sd = 0.3))
我们有2个人的数据(@H_502_3@ID == @H_502_3@a和@H_502_3@b)。我们想对单个@H_502_3@b的数据进行子集处理,并使用@H_502_3@val和@H_502_3@data_point分别绘制@H_502_3@dplyr与@H_502_3@ggplot2的散点图:
@H_502_3@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)
现在,我们要使单个数据点(例如,第一个数据点/行)比其余数据点大,并使用不同的颜色。我们如何才能从此管道内部执行此操作,而不必在管道外部创建对象?
解决方法
您可以在管道内创建两个变量,一个用于突出显示颜色,另一个用于其大小。
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)),"red"))
两种情况下的结果如下。
编辑
感谢@Allan Cameron在comment中指出:
在第一个版本中,您只需要一个新变量,然后 使用scale_size
结果几乎相同,突出显示点的size
相差0.5。
data %>%
filter(ID == "b") %>%
mutate(data_point = 1:500) %>%
mutate(highlight = data_point == 1) %>%
ggplot(aes(x = data_point,size = highlight),"red")) +
scale_size_manual(values = c(0.5,10*highlight))
,
您可以在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,nrow(.)-75))
并向突出显示的位置添加颜色:
data %>%
filter(ID == "b") %>%
mutate(sizing_point = c(5,data_point = c(1:500))%>%
ggplot(.,)+ geom_point(aes(x=data_point,size= sizing_point,color=factor(sizing_point)))+
scale_color_manual(values = c("black","red"))