R - Geom_col with division per year

Asked

Viewed 396 times

1

Expensive,

I have the following database:

inserir a descrição da imagem aqui

I want to plot a chart like the one below using ggplot:

inserir a descrição da imagem aqui

I’m trying to do this with the following code, but I’m not getting a good result.

ggplot(Database, aes(x = Group, y = Data)) + geom_col(aes(Fill = Year))

The result is below:

inserir a descrição da imagem aqui

Does anyone have any idea what it might be? From now on, thank you!

  • 1

    Try geom_col(aes(fill = Ano), position = "dodge"). Or maybe geom_col(aes(fill = Ano), position = position_dodge()). And fill = factor(Ano) to have a discrete scale, so it is continuous.

1 answer

5


Follows a solution:

library(dplyr) # Para manipulação dos dados
library(ggplot2) # Para fazer gráficos
# Criando seus dados:
dados <- data_frame(Grupo = rep(c("Asia", "Europe", "Northern American", "Africa", "LAC", "Oceania"), each = 2),
                    Dados = c(49.2, 79.6, 56.3, 77.9, 40.4, 57.7, 14.8, 24.7, 6.6, 9.5, 5.4, 8.4),
                    Ano = rep(c("2000", "2017"), times = 6))

# Converter ano para fator:
# Obs.: um dos seus problemas.
dados <- 
  dados %>% 
  mutate(Ano = factor(x = Ano,
                      levels = c("2000", "2017"))) # ordem em que os anos aparecem na legenda (ggplot controla assim) 

dados %>% 
  ggplot(aes( x = Grupo, y = Dados, fill = Ano)) +
  geom_col(stat = "identity", position = "dodge") +
  geom_text(aes(label = Dados, hjust = ifelse(Ano == "2000", 1.25, -.25)), vjust = -.5) +
  scale_fill_discrete(name = "") +
  theme(legend.position = "bottom")

If you want to change the Group order, do the same thing I did for the year. You can use the command coord_flip() to rotate the chart.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.