Диаграмма Ганта с повторяющимися задачами / гистограммой с использованием дат - PullRequest
0 голосов
/ 18 апреля 2020

Я хотел бы попросить помощи в создании диаграммы, которая показывает доступность данных измерительной станции для нескольких станций с течением времени. Некоторые из этих станций открывались, закрывались и снова открывались, а также существуют потенциально разные «типы» данных, доступные в разное время, поэтому существует необходимость в «повторных задачах» с точки зрения диаграммы Ганта или сгруппированной горизонтальной гистограммы. подходить.

Я стремлюсь к диаграмме, которая выглядит следующим образом Data availability over time chart

Я работал с опциями, описанными в диаграммах Ганта с R , и хотя только два из вариантов предлагали решения для повторяющихся событий - ни один из них не работает для меня - первый (Candela) недоступен для текущей версии R, а второй (DiagrammeR) я просто не смог произвести заговор с RStudio (см. пост по этому вопросу здесь (https://community.rstudio.com/t/some-plots-not-showing-in-plot-pane-while-others-do-show/61984). Я также потратил много часов, пытаясь адаптировать множество различных примеров из Интернета к моим потребностям, например, составленные графики в базе R, составленные ggplots, vistime, https://insileco.github.io/2017/09/20/gantt-charts-in-r/ и c., но не нашел решения. У меня были три основные проблемы: даты в данных, которые я импортировал из Excel, вызывали проблемы, у меня были проблемы с настройкой входные данные для функции barplot () работают правильно, так что barplot () и соответствующие функции будут правильно их отображать, и у меня возникли некоторые проблемы с получением некоторых из работающих примеров, которые я нашел в inte * 1 028 * на работу.

Вот мои примерные данные: https://www.dropbox.com/s/yriwg7gtaroguch/Data%20availability%20sample.xlsx?dl=0. Поскольку у меня было очень много проблем с использованием дат на диаграммах, я в итоге избежал их, рассчитав десятичные годы в файле Excel; однако это не идеально, и я бы предпочел избежать этого. Я также вычел начало от конца каждого периода (либо «нет данных» - разрыв между наборами данных, либо периодов с данными), чтобы иметь возможность правильно их сложить.

Следующий код показывает наиболее близкое из многих попыток решить проблему, но это катастрофа на нескольких фронтах:

library(readxl)

da = read_excel("C:/.../R/Data availability sample.xlsx", na="NA")
head(da)

dat = data.frame(predata = da$predata, # making a simpler dataframe with just what I need
                 flow1 = da$flow1,
                 nodata1 = da$nodata1,
                 flow2 = da$flow2,
                 nodata2 = da$nodata2,
                 flow3 = da$flow3)
rownames(dat) = da$name

matrix = data.matrix(dat, rownames.force = NA) # convertine to matrix as per barplot requirements

barplot(matrix, xaxt="n", col = c("white","blue","white","darkblue"),
        legend = c("predata","flow1","no data", "flow2", "no data", "flow3"), horiz = T, xlim=c(0,400))
xtick = seq(0, 400, by = 20)
xlabs = seq(1960, 2020, by=20)
axis(side=1, at=xtick, labels = FALSE)
text(x=xtick,  (par("usr")[3]-0.5), labels = xlabs, srt = 90, pos = 1, xpd = TRUE)

Это не должно быть слишком сложно, но я просто изо всех сил пытаюсь найти способ ; Буду признателен за руководство. Заранее благодарим за помощь!

...