如何基于分组数据在dygraph中绘制多系列折线图?
解决dygraph绘制多分组折线图的问题
要处理多分组(Medium/Short)的折线图,核心是先把长格式的分组数据转成宽格式——因为dygraph要求每个数据系列对应单独一列的结构。具体操作步骤如下:
1. 加载所需工具包
先把需要用到的包加载好:
library(tidyr) # 用于转换数据格式 library(xts) # 处理时间序列对象 library(dygraphs) # 绘制交互式折线图
2. 转换数据格式
把你的长格式数据(含Date、Em_balde、Valor三列)转成宽格式,让每个分组取值(Medium/Short)单独成为一列:
# 用tidyr的pivot_wider转换:Date作为行索引,Em_balde的取值作为列名,Valor为对应列的值 df_wide <- df %>% pivot_wider(names_from = Em_balde, values_from = Valor)
如果你的R版本较旧,也可以用reshape2包的dcast实现:
library(reshape2) df_wide <- dcast(df, Date ~ Em_balde, value.var = "Valor")
3. 生成xts时间序列对象
基于宽格式数据生成xts对象,此时每一列对应一个分组的数值序列:
xts_data <- xts(x = df_wide[, -1], order.by = df_wide$Date)
4. 绘制多系列折线图
现在就可以用dygraph绘图了,宽格式的xts会自动识别每一列作为一个数据系列,你也可以自定义系列标签:
dygraph(xts_data, main = "Em Balde - Médio & Curto") %>% # 自定义系列标签(可选,不设置会默认用列名) dySeries("Medium", label = "Médio") %>% dySeries("Short", label = "Curto") %>% dyOptions(labelsUTC = TRUE, fillGraph=TRUE, fillAlpha=0.1, drawGrid = FALSE, stepPlot = TRUE) %>% dyHighlight(highlightCircleSize = 5, highlightSeriesBackgroundAlpha = 0.2, hideOnMouseOut = FALSE)
执行后就能同时画出Medium和Short两个分组的折线,鼠标悬停时也会分别高亮对应系列。
内容的提问来源于stack exchange,提问作者alec22
相关产品推荐
相关产品推荐

