Я воссоздаю интерактивный сюжет из приведенного ниже примера кода plotly
(найдено здесь ), но мне интересно, можно ли использовать длинный формат data.frame, чтобы избежать добавления отдельного add_trace
функция для каждой переменной в легенде. Подобно слоям ggplot2
aestheti c.
Будет работать любое решение для интерактивного построения графиков (highcharter, plotly, et c.).
Я также создал интерактивную диаграмму с областями с накоплением из ggplotly
ниже, однако интерактивные функции не совпадают. В частности, когда слои включаются / выключаются в легенде, они не масштабируются сами, поэтому они плоские вдоль оси x. Они появляются как есть. Например, если colB изолирован, он плавает в середине графика.
Приведенный выше пример plotly
сбрасывает слой, и пользователь может визуально просматривать профили отдельных слоев с помощью плоской привязки оси x.
Спасибо за любую помощь.
library(plotly)
data <- t(USPersonalExpenditure)
data <- data.frame("year"=rownames(data), data)
p <- plot_ly(data, x = ~year, y = ~Food.and.Tobacco, name = 'Food and Tobacco', type = 'scatter', mode = 'none', stackgroup = 'one', fillcolor = '#F5FF8D') %>%
add_trace(y = ~Household.Operation, name = 'Household Operation', fillcolor = '#50CB86') %>%
add_trace(y = ~Medical.and.Health, name = 'Medical and Health', fillcolor = '#4C74C9') %>%
add_trace(y = ~Personal.Care, name = 'Personal Care', fillcolor = '#700961') %>%
add_trace(y = ~Private.Education, name = 'Private Education', fillcolor = '#312F44') %>%
layout(title = 'United States Personal Expenditures by Categories',
xaxis = list(title = "",
showgrid = FALSE),
yaxis = list(title = "Expenditures (in billions of dollars)",
showgrid = FALSE))
p
#
library(data.table)
library(magrittr)
library(ggplot2)
library(plotly)
library(lubridate)
dt <- data.table(colA = seq(from = ymd_hms("2020-01-01 00:00:00"),
to = ymd_hms("2020-01-01 00:00:00") + days(99),
by = "1 day"),
colB = runif(100,0,100),
colC = runif(100,0,100),
colD = runif(100,0,100)) %>%
melt(id.vars = "colA")
ggplot <- ggplot(data = dt) +
geom_area(aes(x = colA,
y = value,
fill = variable),
stat = "identity",
position = "stack",
alpha = 0.5) +
theme(legend.title = element_blank())
ggplot
ggplotly(ggplot)