Как закрасить (заполнить) только один столбец (значение которого во фрейме данных принадлежит строке) разных цветов, используя geom_bar в R? - PullRequest
1 голос
/ 29 сентября 2019

На этом рисунке я хочу, чтобы колонка Перу имела другой цвет, чтобы отличать ее от других стран. В этом случае "Pais" является столбцом, который содержит "Перу". Я использую pais $ Peru для фильтрации страны (Перу), которая является строкой, но она не работает. Я получаю следующий результат «Ошибка в pais $ Peru: оператор $ недопустим для атомных векторов»

Кто-нибудь знает, как это сделать? как структурировать мой код?

МОЙ КОД

ggplot() + geom_bar(aes(y = railroad,
                    x=reorder(pais, -railroad),
                    fill=pais$Peru),
           data = jaja,
           stat = "identity")+
           guides(fill=FALSE)+  
           xlab(NULL)+ ylab(NULL)+ 
          scale_y_continuous(limit = c(0,7))+ theme(axis.text.x = element_text(angle = 50))

THANKSSS

1 Ответ

0 голосов
/ 30 сентября 2019

Одним из способов является использование scale_fill_manual и передача именованных векторов со странами и цветами.

Пример:

library(ggplot2)
library(tidyverse)

df <- mtcars %>% 
  group_by(cyl) %>% 
  summarise(avg_hp = mean(hp))

# Create named vector to pass to scale_fill_manual
# Color of green for cyl of 4
# Default of 'blue' where cyl doesn't equal 4
bar_colors <- c('4' = 'green' ,setNames(rep(c('blue'), times = length(df[df$cyl!=4,]$cyl)), df[df$cyl!=4,]$cyl))

ggplot(df, aes(x= factor(cyl), y = avg_hp, fill = factor(cyl))) +
  geom_bar(stat = 'identity') +
  scale_fill_manual(values = bar_colors)

Результат в

Example Output

...