Я хочу построить несколько временных рядов в виде диаграммы с plotly
+ ggplot2
, но у меня возникают проблемы при использовании dynamicTicks = TRUE
.Ширина столбца одного набора данных увеличивается и распространяется на больший таймфрейм по сравнению с другим набором данных, которого я хочу избежать.
При установке dynamicTicks = FALSE
ширина (в этом примере красных столбцов) выглядит правильно, но метки оси X исчезают при увеличении.
Изменение значений x на символ также приведет к тому, что ширина будет выглядеть правильно, но метки оси X перекрываются и не наследуют никакой логики.
Как установить ширину полосы одного набора данных на ту же, что и у другого набора данных, сохраняя значения x в формате даты и имея dynamicTicks = TRUE
?
library(ggplot2)
library(plotly)
library(data.table)
## Data
data1 <- {data.table(
time_stamp = seq.Date(as.Date("2018-01-01"), to = as.Date("2018-07-04"), by = 1),
q = runif(185, 100, 5000), qall = sample(1:8, size = 185, T),
col = sample(c("green", "lightgreen", "yellow"), 185,T)
)}
data2 <- {data.table(
time_stamp = seq.Date(as.Date("2018-01-01"), to = as.Date("2018-07-01"), by = 7),
q = runif(26, 100, 5000), qall = sample(1:8, size = 26, T)
)}
key <- highlight_key(data1, ~time_stamp)
maxY = max(data1$q)
p <- ggplot() +
geom_col(data = data2, aes(x = (time_stamp), y = maxY,
text = paste("I AM TOO WIDE: <br>Date: ", (time_stamp))),
width = 1, fill = "red", alpha=0.4) +
geom_col(data = key, aes(x = (time_stamp), y = q),
width = 1, color="gray", fill = data1$col) +
theme(text = element_text(size=9), axis.text.x = element_text(angle=0, hjust=1))
## Too Wide red bars + Correct x labels
dp <- ggplotly(p, source = "src", dynamicTicks = T,
tooltip = c("text")) %>%
highlight(off="plotly_doubleclick", color = "blue", opacityDim = 0.8);
dp
Изображение слева имеет dynamicTicks = T
и слишком широкие красные полосы, а изображение справа имеет dynamicTicks = FALSE
, правильные красные полосы, но нет реальной логики xAxis.
Я попытался установить эти параметры безуспешно:
# plotly_json(dp)
dp$x$data[[1]]$width = rep(1, length(dp$x$data[[1]]$width))
dp
dp$x$data[[1]]$width = s$time_stamp
dp
dp$x$data[[1]]$marker$line$width = 1
dp