Как раскрасить точки данных на графике с помощью определенных наблюдений группы в R - PullRequest
1 голос
/ 20 февраля 2020

Я пытаюсь добавить цвета к моим точкам данных на моем блокпосте, основываясь на определенной группе, но только на подмножестве наблюдений в этой группе. Например:

У меня есть набор данных, который выглядит примерно так:

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)) 

, но он окрашивает все точки данных на основе переменной местоположения. Мне нужно, чтобы точки окрашивались только в том случае, если в Китае, Бразилии и Испании были указаны все данные. как я могу этого достичь? Любые предложения будут с благодарностью!

1 Ответ

0 голосов
/ 20 февраля 2020

Вы можете просто создать дополнительный столбец с надписью «Другие», если в нем нет нужных вам стран. Затем используйте 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'))

Создано в 2020-02-20 пакетом Представлять (v0.3.0)

...