R语言plotly绘制如何不连续折线图
我有一个数据框例如
date variable value
20230801 1 0.5
20230802 1 0.4
20230803 1 0.9
20230804 1 0.2
20230805 1 0.7
20230801 2 0.1
20230804 2 0.5
20230805 2 0.9
在绘制plotly多折线图时候varuable=2的折线图会把20230802,20230803的数据平滑化(值等于连接20230801(0.1)和20230804(0.5)的线上值 )
我想绘制出不连续的折线图该怎么做
【以下回答由 GPT 生成】
为了绘制不连续的折线图,可以使用add_trace
函数在同一个图中添加多个折线图。对于每个折线图,我们需要将不连续的部分处理成缺失值,然后再进行绘制。下面是具体的解决方法和代码示例。
plotly
包,代码如下:install.packages("plotly")
library(plotly)
data <- data.frame(
date = c(20230801, 20230802, 20230803, 20230804, 20230805, 20230801, 20230804, 20230805),
variable = c(1, 1, 1, 1, 1, 2, 2, 2),
value = c(0.5, 0.4, 0.9, 0.2, 0.7, 0.1, 0.5, 0.9)
)
data$date <- as.character(data$date)
data$variable <- as.factor(data$variable)
split
函数将数据框按照变量分割为多个子数据框,代码如下:data_list <- split(data, data$variable)
complete
函数将其转换为包含缺失日期的完整序列。代码如下:complete_data_list <- lapply(data_list, function(df) {
df$date <- as.Date(df$date, "%Y%m%d")
complete(df, date = seq(min(df$date), max(df$date), by = "day"))
})
add_trace
函数在同一个图中添加每个子数据框的折线图。我们可以使用循环来遍历每个子数据框,并设置每个折线图的颜色和线型。代码如下:p <- plot_ly()
colors <- c("#1f77b4", "#ff7f0e") # 可自行设置颜色
linetypes <- c("solid", "dashed") # 可自行设置线型
for (i in seq_along(data_list)) {
p <- add_trace(
p,
type = "scatter",
mode = "lines",
x = complete_data_list[[i]]$date,
y = complete_data_list[[i]]$value,
color = colors[i],
linetype = linetypes[i],
name = unique(data_list[[i]]$variable)
)
}
p
这样,我们就可以得到一个包含不连续折线图的plotly
图形。