Сгруппированная и перевернутая гистограмма в основании R, когда длина переменных не равна - PullRequest
0 голосов
/ 30 мая 2020

Я пытаюсь создать столбчатый график в базе R, поэтому не с помощью ggplot, который сгруппирован и перевернут, и я нашел много похожих вопросов и ответов, но, похоже, ни один из них не работает для меня. Моя база данных о конкурсе песни Евровидение 2007, это ссылка на него: https://www.kaggle.com/datagraver/eurovision-song-contest-scores-19752019

и это код для очистки и получения базы данных, с которой я работаю:

cela_baza <- read.csv("eurovision_song_contest_1975_2019.csv", stringsAsFactors = FALSE)

evro2007_pocetna<-cela_baza[cela_baza$Year=='2007',]

evro2007_aggr<-aggregate(evro2007_pocetna$Points~evro2007_pocetna$From.country+
                         evro2007_pocetna$To.country,FUN=mean)

colnames(evro2007_aggr) <- c('From country', 'To country','Points')

evro2007<-evro2007_aggr[!(evro2007_aggr$`From country`==evro2007_aggr$`To country`),]

nrow(subset(evro2007, evro2007$Points== 0 ))

evro2007_zero<- subset(evro2007, evro2007$Points> 0 )

Что мне нужно, так это гистограмма с количеством точек по оси X и странами, которые участвовали в соревновании по оси Y, каждая страна имеет три сгруппированных столбца разного цвета: первый представляет, сколько точек в этой стране отдал Сербии (победитель), вторые баллы Украине (2 место) и третьи баллы России (3 место). Итак, он сгруппирован и перевернут, и я нашел код для этого, но моя проблема в том, что не все участвующие страны дали баллы этим трем странам, которые мне нужны, поэтому всегда возникают некоторые ошибки.

Код для ggplot тоже будет работать, я не могу установить его на свой старый P C, но я попрошу кого-нибудь сделать это за меня, пока у меня есть код, спасибо за все помощь заранее!

1 Ответ

1 голос
/ 30 мая 2020

Можно делать то, что вы описываете, но полученный график ужасен из-за количества стран на оси x (42, с тремя полосами в каждой) и ограничений базовых R barplot.

Вот как мы можем получить данные в правильном формате:

winners <- evro2007[evro2007$`To country` == "Ukraine" | 
           evro2007$`To country` == "Russia" | 
           evro2007$`To country` == "Serbia",]
self <- data.frame(`From country` = c("Serbia", "Ukraine", "Russia"),
                   `To country` = c("Serbia", "Ukraine", "Russia"),
                   Points = c(0, 0, 0), stringsAsFactors = FALSE)
names(self) <- names(winners)
winners <- rbind(winners, self)
winners <- winners[order(winners$`From country`, winners$`To country`),]

Однако базовая диаграмма R выглядит так:

barplot(Points ~ `To country` + `From country`, 
        data = winners, beside = TRUE, cex.names = 0.3)

enter image description here

Страны неразборчивы, а сюжет сложно интерпретировать.

Тогда как, используя ggplot:

winners$`To country` <- factor(winners$`To country`, 
                               levels = c("Serbia", "Ukraine", "Russia"))

ggplot(winners, aes(`To country`, Points, fill = `To country`)) + 
  geom_col() + 
  facet_wrap(.~`From country`) +
  theme(axis.text.x = element_blank())

, получаем:

enter image description here

...