как использовать вторичную ось в ggplot2 с geom_bar и geom_line и использовать разные подмножества данных для каждого - PullRequest
0 голосов
/ 08 июня 2019

Я пытаюсь создать этот график график налогов на энергию из excel , созданный в excel из r с помощью ggplot2 (и tidyverse).

Я использую MR open и rstudio.Я использовал данные Евростата.Я получаю их с помощью chekpoint 2019-03-30 по:

library(tidyverse)
library(eurostat) 

#this part gets the values for the revenue in euros for all countries
taxes_total <-  get_eurostat(id = "t2020_rt300", time_format = "num")
taxes_total <- label_eurostat(taxes_total)

#this part gets the values for the revenue in euros for only Greece
taxes_total_grc <- taxes_total %>% 
  filter(time >= 2008, geo == "Greece") %>% select(geo, time, nace_r2, values)
View(taxes_total_grc)

#this part gets the values for the percentages of taxes by sector for all countries
taxes_per_sect <-  get_eurostat(id = "t2020_rt310", time_format = "num")
taxes_per_sect <- label_eurostat(taxes_per_sect)

#this part gets the values for the percentages of taxes by sector for only Greece
taxes_per_sect_grc <- taxes_per_sect %>% 
  filter(time >= 2008, geo == "Greece") %>% select(geo, time, nace_r2, values)
View(taxes_per_sect_grc)

#here i am making a dataframe to have it all together but i haven't used it in the graph because i cannot figure out how to seperate the revenue values from the percentage in the graph.

energy_taxes <- rbind(taxes_per_sect_grc, taxes_total_grc)

Мне удалось сделать гистограмму в той же форме, написав такой код:

taxes_per_sect_grc %>% 
  filter(time %in% seq(2008,2016,2)) %>%

  ggplot(aes(x = reorder(nace_r2, -values), y = values, fill = nace_r2))+ 
  geom_bar(stat = "identity") +
  geom_text(aes(label = values), vjust = -0.2, size = 3.5)+
  facet_wrap(~ time, nrow = 1, strip.position = "bottom") +

  theme(legend.position = c(0.75, 0.95), 
        legend.title = element_blank(),
        legend.text = element_text(size = 8),
        legend.key.size = unit(4, "mm"),
        legend.direction = "vertical",

        panel.grid = element_blank(),
        panel.background = element_blank(),

        axis.title.x=element_blank(),
        axis.text.x=element_blank(),
        axis.ticks.x=element_blank(),

        strip.background = element_blank())+

  guides(fill = guide_legend(ncol = 2))+ 
  labs(title = "Distribution of energy taxes in Greece", 
             y = "% of energy taxes", caption = "Eurostat")

Iпрочитал о проблемах и почему не очень хорошо использовать вторичную ось с графиками.Тем не менее, в графе Excel есть вторичная ось в преобразовании 1: 1 (точнее, от 1 до 60), поэтому окончательный график не искажает информацию.

Итак, мой вопрос:

  1. как я могу сделать график Excel?
  2. как я могу использовать df, у которого есть вся информация (energy_taxes), и отфильтровать его с правильной информацией для geom_bar и части geom_line.
  3. Если я не могу использовать полный фрейм данных (energy_taxes), тогдаКак я могу использовать две отдельные части tax_total_grc для значений дохода и tax_per_sector_grc для процентов для создания графика.
  4. Является ли facet_wrap правильным подходом?Я спрашиваю, потому что он в основном создает отдельные графики, так как же geom_line соединится между ними, чтобы напоминать Excel?

спасибо всем за ваше время

...