В ggplot есть несколько ошибок с граненым графиком. Попытка согласовать значения y с граненым ggplot - PullRequest
1 голос
/ 16 марта 2020

Итак, я пытаюсь отредактировать значения y на граненом ggplot, потому что при вязании я получаю пару неточностей на графике. Я очень плохо знаком с R и R Markdown, поэтому не могу понять, почему, например, ВВП по ППС в США имеет более низкую планку, чем другие значения, когда он имеет наибольшую сумму в долларах. Есть также некоторые расхождения в других значениях, где бары кажутся намного выше, когда разница в значениях составляет всего $ 100-500. Кто-нибудь знает в чем может быть проблема? Вот мой код:

library(ggplot2)
library(tidyr)

OECD_IMF <- read.csv("OECD_IMF.csv")
attach(OECD_IMF)
detach(OECD_IMF)

OECD_IMFlong <- gather(OECD_IMF, key="measure", value="value", c("GDP_Nom_T" , "GDP_PPP" ,"Aid_Perc"))

variable_names <- list("GDP_Nom_T" = "GDP Per Capita 2018 (USD Thousands)" ,
  "GDP_PPP" = "GDP Purchasing Power Parity 2018 (USD Trillions)",
  "Aid_Perc" = "Average % of Gross National Income Given in Foreign Aid (2000-2016)")

variable_labeller <- function(variable,value){
  return(variable_names[value])}

ggplot(OECD_IMFlong, aes(x=Country, y=value, fill=Country))+
geom_bar(stat='identity')+ geom_text(aes(label=value), vjust=1.6, color="white", size=2.1)+ 
facet_wrap(~measure, scales="free_y", ncol=1, labeller= variable_labeller)+ 
labs(caption="Source: Official Development Assistance Database & IMF World Economic Outlook")+ ylab("Value")+ 
theme_grey() + theme(axis.text.x = element_text(angle = 45, hjust = 1),axis.title.y=element_blank(),axis.title.x=element_blank())

ggplot

1 Ответ

1 голос
/ 16 марта 2020

Как уже указывал @StupidWolf, проблема в том, что ваш столбец value является символом, а не числовым c вектором. Таким образом, вы должны конвертировать value в число c перед построением графика. Чтобы получить правильные значения и метки, я добавил новую переменную value1, которая представляет собой число c, присвоенное geom_bar, в то время как value остается символом и передается в geom_text для обозначения баров хорошими $ -labels , Попробуйте это

library(ggplot2)
library(stringr)
library(dplyr)
#> 
#> Attache Paket: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union

OECD_IMFlong <- structure(list(Country = structure(c(7L, 2L, 5L, 1L, 6L, 3L, 4L, 7L, 2L, 5L, 1L, 6L, 3L, 4L, 7L, 2L, 5L, 1L, 6L, 3L, 4L), .Label = c("Canada", "France", "Germany", "Italy", "Japan", "UK", "USA"), class = "factor"), GDP_Nom = c(6.7063e-05, 4.4062e-05, 4.345e-05, 4.845e-05, 4.3118e-05, 4.9617e-05, 3.4575e-05, 6.7063e-05, 4.4062e-05, 4.345e-05, 4.845e-05, 4.3118e-05, 4.9617e-05, 3.4575e-05, 6.7063e-05, 4.4062e-05, 4.345e-05, 4.845e-05, 4.3118e-05, 4.9617e-05, 3.4575e-05), measure = c("GDP_Nom_T", "GDP_Nom_T", "GDP_Nom_T", "GDP_Nom_T", "GDP_Nom_T", "GDP_Nom_T", "GDP_Nom_T", "GDP_PPP", "GDP_PPP", "GDP_PPP", "GDP_PPP", "GDP_PPP", "GDP_PPP", "GDP_PPP", "Aid_Perc", "Aid_Perc", "Aid_Perc", "Aid_Perc", "Aid_Perc", "Aid_Perc", "Aid_Perc"), value = c("$67,063.00", "$44,062.00", "$43,450.00", "$48,553.00", "$43,118.00", "$49,617.00", "$34,575.00", "$20.54", "$2.78", "$4.97", "$1.71", "$2.86", "$3.95", "$2.08", "0.1717", "0.0467", "0.2108", "0.2843", "0.4963", "0.374", "0.1869")), row.names = c(NA, -21L), class = "data.frame")


variable_names <- list("GDP_Nom_T" = "GDP Per Capita 2018 (USD Thousands)" ,
                       "GDP_PPP" = "GDP Purchasing Power Parity 2018 (USD Trillions)",
                       "Aid_Perc" = "Average % of Gross National Income Given in Foreign Aid (2000-2016)")

variable_labeller <- function(variable,value){
  return(variable_names[value])}


OECD_IMFlong_tidy <- OECD_IMFlong %>% 
  mutate(value1 = str_replace_all(value, "(,|\\$)", "")) %>% 
  mutate(value1 = as.numeric(value1))


ggplot(OECD_IMFlong_tidy, aes(x=Country, y=value1, fill=Country))+
  geom_bar(stat='identity')+ 
  geom_text(aes(label=value), vjust=1.6, color="white", size=2.1)+ 
  facet_wrap(~measure, scales="free_y", ncol=1, labeller= variable_labeller)+ 
  labs(caption="Source: Official Development Assistance Database & IMF World Economic Outlook") + 
  theme_grey() + 
  theme(axis.text.x = element_text(angle = 45, hjust = 1),
        axis.text.y = element_blank(),
        axis.title.y = element_blank(),
        axis.title.x = element_blank())
#> Warning: The labeller API has been updated. Labellers taking `variable` and
#> `value` arguments are now deprecated. See labellers documentation.

Создано в 2020-03-16 пакетом Представить (v0.3.0)

...