#r #bar-chart #combinedchart
#r #гистограмма #комбинированная диаграмма
Вопрос:
Итак, я создаю MI pack, и я хотел включить гистограмму, которая отображает, когда что-то было отправлено и кто виноват в опоздании. У меня есть 5 столбцов данных, которые можно разделить на две секции:
Раздел 1 (время отправки) = До 7 утра, с 7 утра до 9 утра, после 9 утра
Раздел 2 (ошибка) = us, в них содержится 6 строк данных (т. Е. за предыдущие 6 месяцев).
Никаких проблем с чтением данных, манипулированием ими, изменением дат или форматирования. Аналогично, нет проблем с созданием столбчатых графиков либо всего набора сложенных данных, либо каждого сложенного раздела (что я и хочу).
Я бы хотел, чтобы раздел 1 был сложенным столбчатым графиком, а рядом с ним был раздел 2.
Воссоздано в Excel на случай, если описание неясно
Это код, который у меня есть на данный момент. Загрузка и обработка данных в подходящем формате
MIDF <- read.xlsx("C:/MISMM.xlsx", sheet = 11, startRow = 3, colNames = TRUE)
MDATE <- excel_numeric_to_date(MIDF$`Month./.Year`, date_system = "modern", include_time = "false")
MDATE <- format(as.Date(MDATE), "%m-%Y")
MIDF <- cbind(MDATE, MIDF[2:19])
MIDF <- tail(MIDF, 6)
Это все 5 сложенных столбцов
LAFU <- MIDF %>% select (9, 10, 11, 12, 13)
LAFUa <- MIDF %>% select(1)
LAFUa <- (t(LAFUa))
LAFU <- (t(LAFU))
LAFUCHART <- barplot(LAFU,
names.arg=LAFUa,
main = "Lates and who is at fault",
col=c("#1488CA", "#6B7E87", "#AA0B3C", "#FDC41F", "#85C9F0"),
legend = rownames(LAFU),
beside = FALSE)
И это два отдельных раздела
LAFUresub <- MIDF %>% select (9, 10, 11)
LAFUerror <- MIDF %>% select (12, 13)
LAFUa <- MIDF %>% select(1)
LAFUa <- (t(LAFUa))
LAFUresub <- (t(LAFUresub))
LAFUerror <- (t(LAFUerror))
LAFUresubBP <- barplot(LAFUresub,
names.arg=LAFUa,
main = "Lates",
col=c("#1488CA", "#6B7E87", "#AA0B3C"),
legend = rownames(LAFUresub),
beside = FALSE)
LAFUerrorBP <- barplot(LAFUerror,
names.arg=LAFUa,
main = "Who is at fault",
col=c("#FDC41F", "#85C9F0"),
legend = rownames(LAFUerror),
beside = FALSE)
и, наконец, — моя попытка заставить их воспроизвести изображение. Это немного неубедительно, но я, честно говоря, понятия не имею, с чего начать.
LAFUTIME <- t(group_by(MIDF %>% select(9,10,11)))
LAFUERROR <- t(group_by(MIDF %>% select(12, 13)))
LAFUDATE <- t(MIDF %>% select(1))
test<-rbind(LAFUTIME, LAFUERROR)
barplot(LAFUTIME %>% LAFUERROR)
любая помощь приветствуется.
Дэвид
Вот некоторый код для фрейма данных, который сопоставим с тем, что я использую, если это поможет.
pre7am <- c(1,2,3,2,1,3)
SamNam<- c(2,4,3,6,5,3)
post9am<- c(1,2,1,0,1,0)
us <- c(0,0,1,3,2,0)
them <- c(4,8,6,5,5,6)
dates <- c("Jul18", "Aug18", "Sept18", "Oct18", "Nov18", "Dec18")
DF <- data.frame(pre7am, SamNam, post9am, us, them, row.names = dates)
Комментарии:
1. Не могли бы вы опубликовать некоторые данные? если вам нужна помощь в размещении данных, используйте
dput
. Я думаю, что знаю, как это сделать.2. Используя приведенный ниже код (извините, он неправильно отформатирован в поле для комментариев), вы получите фрейм данных, сопоставимый с тем, что я использую ———— pre7am <- c (1,2,3,2,1,3) SamNam<- c (2,4,3,6,5,3) post9am<- c (1,2,1,0,1,0) us <- c (0,0,1,3,2,0) them <- c (4,8,6,5,5,6) даты <- c («Jul18», «Aug18», «Sept18″, » Oct18″, «Nov18», «Dec18») DF <- data.frame(pre7am, SamNam, post9am, мы, они, строка.имена = даты)
3. Пожалуйста, используйте «Sep18» вместо «Sept18», поскольку сокращения дат в R состоят из трех букв для обозначения месяцев.
Ответ №1:
Итак, я использовал следующее, которое довольно близко:
library(tidyverse)
library(zoo)
DF %>%
mutate(Dates = rownames(DF),
Dates = factor(Dates, levels = c("Jul18","Aug18", "Sep18", "Oct18", "Nov18", "Dec18"))) %>%
gather(vartype, value, -Dates) %>%
mutate(Subsection =paste("Subsection", abs(as.numeric(grepl("am", vartype)) - 1) 1)) %>%
ggplot(aes(Subsection,value, fill = vartype, col = vartype))
geom_col()
facet_grid(.~Dates)
Итак, сначала мы перемещаем Dates
из rownames в фактическую переменную. Затем мы удостоверяемся, что Dates
на самом деле являются упорядоченным коэффициентом (необходимым для facet_grids
). Затем мы форматируем данные в длинный формат с помощью gather
. Subsection
создается на основе двух типов стеков, которые вы хотите, где мы проверяем, находится ли «am» в vartype
(логическое значение), а затем мы создаем функцию, в которой мы создаем, Subsection1
если «am» находится в vartype
и Subsection2
если «am» отсутствует. Затем, поскольку у нас есть значения для высот столбцов, мы используем geom_col
. Мы также используем facet_grid
для разбивки графиков на Dates
и упорядочивания соответствующим образом.
Комментарии:
1. Это здорово и хорошо объяснено, я перенес его и адаптировал для других данных, и он работает хорошо!