Попытка объединить несколько наборов данных в одну гистограмму в R - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь создать гистограмму, имеющую те же переменные на оси х, за исключением разделенных по году.Я хочу показать увеличение / уменьшение с течением времени, но я не уверен, как вставить каждый набор данных в график и пометить годы.Каждый набор данных представляет собой результаты выборов за определенный год.

Вот один набор данных, например:

1992Election
Политическая партия 18-29,30-44,45-59,60 + (пронумерованные заголовки - это возрастные группы)
Демократ 0,40,0,37,0,40, 0,47 (в процентах голосов)
Республиканец 0,35,0.41,0.42, 0,47

Для первого набора данных у меня есть следующий код для создания одной гистограммы:

1992Election

colnames(`1992Election`)[colnames(`1992Election`)=="X.18.29."] <- "18-29"
colnames(`1992Election`)[colnames(`1992Election`)=="X.30.44."] <- "30-44"
colnames(`1992Election`)[colnames(`1992Election`)=="X.45.59."] <- "45-59"
colnames(`1992Election`)[colnames(`1992Election`)=="X.60.."] <- "60+"

Party92 = rownames(`1992Election`)
n.group92 = nrow(`1992Election`)

color.names92 = c("royalblue2", "red2")

barplot(as.matrix(`1992Election`),beside = TRUE, xlab = "Age Group", 
        ylab = "Percent Voted", ylim = c(0,.7), col = color.names92)  
title(main = "Presidential Election Votes by Age in Ohio\n Year 1992")
legend("topright", title = "Political Party", Party92, fill = color.names92, 
  cex = 0.4)

это приводит к следующему графику: 1992Electiongraph

Я хотел бы иметь те же переменныевдоль оси x, но сгруппированы по годам

Например: по оси X [возрастные группы (1992 г.), [те же возрастные группы (1996 г.) и т. д.], если это имеет смысл, спасибо.

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

В зависимости от того, как ваши данные выглядят и как они структурированы, вот простое решение, использующее базовую графику R:

Давайте предположим, что ваши данные примерно структурированы, как этот df, с одним столбцом за годы, в которыхбыли проведены выборы, и по одной колонке для результатов двух партий:

y <- c(10, 14, 18, 22, 26) 
df <- data.frame(
  Year = c(paste("20",y, sep = "")),
  Rep = c(rnorm(5, 10)),
  Dem = c(rnorm(5, 15))
)

, затем вы можете сохранить результаты выборов в одном векторе, транспонируя их, используя t и cbind, используя их:

election.results <- t(cbind(df$Rep, df$Dem))

Теперь вы можете построить график election.results на графике, используя аргумент beside и df$Year для имен в names.arg плюс используя legend для предоставления ключа:

barplot(election.results, beside=T, names.arg = df$Year, col=c("red","blue"))
par(xpd=T) # this will probably not be necessary with the real data
legend(19, c("Republicans", "Democrats"), horiz = T, col=c("red","blue"), fill=c("red","blue"))

enter image description here

0 голосов
/ 10 декабря 2018

Если 2 набора данных похожи, самый простой подход - связать вместе 2 набора данных.С rbind вы получаете возрастные группы.

barplot(as.matrix(rbind(El92, El96)), beside=TRUE)

Или с помощью cbind вы получаете 8 групп по 2 бара, и если вы хотите изменить порядок, вы можете указать, что:

barplot(as.matrix(cbind(El92, El96)[c(1,5,2,6,3,7,4,8)]), beside=TRUE)
...