如何通过R中一组的某些观察来为箱线图上的数据点着色

how to color data points on a box plot by certain observations of a group in R

我正在尝试根据某个组(但仅是该组中的一部分观察结果)为我的箱线图上的数据点添加颜色。例如:

我有一个数据集看起来有点像这样

Value   Make   Location
40      Honda   USA
50      Toyota  CHINA
60      Ford    FRANCE
70      Subaru  CHINA
50      Honda   BRAZIL
50      Toyota  SPAIN
30      Nissan  CANADA

我正在绘制一个箱形图,查看 y 轴上的值变量并在 x 轴上创建变量。然后我想将所有数据点添加到我的箱线图中,并只为位置 = 中国、巴西和西班牙(所有不同颜色)的数据点着色,而其他不是中国、巴西和西班牙的数据点将只是黑色.

这是我的代码:

library(ggplot2)

data %>% ggplot(aes(x=Make, y=Value)) +
         geom_boxplot() +
         geom_jitter(aes(color=Location)) 

但这会根据位置变量为所有数据点着色。我只需要在位置为中国、巴西和西班牙但仍显示所有数据点时才对这些点进行着色。我怎么能做到这一点?任何建议将不胜感激!

如果没有您想要的国家/地区,您可以创建一个额外的列 "Others"。然后,使用scale_color_manual输入你想要的颜色。

library(data.table)
df <- fread('Value   Make   Location
40      Honda   USA
50      Toyota  CHINA
60      Ford    FRANCE
70      Subaru  CHINA
50      Honda   BRAZIL
50      Toyota  SPAIN
30      Nissan  CANADA')

library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:data.table':
#> 
#>     between, first, last
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
library(ggplot2)
visible_ctr <- c('BRAZIL','CHINA','SPAIN')
df %>% 
  mutate(lcat=if_else(Location %in% visible_ctr,Location,'Others')) %>% 
  mutate(lcat=factor(lcat,levels = c(visible_ctr,'Others'))) %>% # Reorder legend
  ggplot(aes(x=Make, y=Value)) +
  geom_boxplot() +
  geom_jitter(aes(color=lcat)) +
  scale_color_manual(values = c(BRAZIL='blue',CHINA='red',SPAIN='yellow',Others='black'))

reprex package (v0.3.0)

于 2020 年 2 月 20 日创建