我对R plot_ly有点新,并且遇到图表问题。 我构建了一个数据框,其中包含不同日期的值,具体取决于列。我的数据框在第一列中包含日期,然后是不同日期的值,但不一定在所有日期。因此我使用na.locf来删除第一个值之间的2个值(希望我足够清楚)。剩下的na是每列的第一个值之前的那个,然后我用0替换。 然后我试图绘制我的df与x轴上的日期和y轴上我的时间序列的演变。 我的问题是,我的一个图形的0值之间存在一些差异(见截图)橙色线从0开始,然后有一些值。如果我将鼠标放在图形上,在"大下降"之前,该值在0.00之后显示为0。此时df没有此时间系列的值。此外,图表似乎没有相同的y轴,即使它们应该,我也不明白为什么。
我创建图表的代码是:
if (dim(df1)[1] != 0){
df1 <- na.locf(df1)
df1[is.na(df1)] <- 0.00
all_names <- colnames(df1)[-1]
for (i in all_names){
if (i==all_names[1]){
p <- plot_ly(x = df1$date, y= df1[,i] , name = i, type = 'scatter', mode = 'lines')
}else{
p <- p %>% add_trace(y = df1[,i], name = i, type = 'scatter', mode = 'lines')
}
}
output$info_graph <- renderPlotly({
p
})
output$info_output <- renderUI({
plotlyOutput("info_graph")
})
}else{
output$info_output <- renderUI({
})
}
编辑:我添加了我的数据截图,其间隙是(橙色线是第三列(2008-09-12之前我只有NA),蓝色是第二列:
dput给出:
structure(list(date = structure(c(14062, 14069, 14076, 14083,
14090, 14097, 14104, 14111, 14118, 14125, 14132, 14134, 14139,
14141, 14146, 14148, 14153, 14155, 14160, 14162, 14167, 14169,
14174, 14176, 14181, 14183), class = "Date"), col1 = c(3036258.57195313,
3023427.6675, 2971520.82675781, 3093997.64199219, 3042965.63564453,
3119076.22796875, 3154652.82667969, 3120534.28529297, 3101871.15154297,
3226680.85849609, 3185563.64195312, NA, 3077375.78849609, NA,
3039466.29806641, NA, 2956357.03058594, NA, 2701488.6103125,
NA, 2715194.34916016, NA, 2687199.64853516, NA, 2733857.48291016,
NA), col2 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, 0, NA, 0, NA, 0, NA, 0, NA, 0, NA, 0, NA, 0, NA, 0)), .Names = c("date",
"col1", "col2"), row.names = 145:170, class = "data.frame")
答案 0 :(得分:1)
您的代码存在的问题是您正在绘制在绘图调用中转换为分类的字符变量。罪魁祸首是使用na.locf
函数的错误。
数据框的第一列是字符列,当您将整个数据框提供给na.locf
时,它会将所有内容转换为字符。这是一个修复:
library(zoo)
library(plotly)
将日期列转换为POSIXct
df1$date <- as.POSIXct(df1$date)
仅在数字列
上使用na.locf
df1[,2:3] <- na.locf(df1[,2:3])
df1[is.na(df1)] <- 0.00
for (i in all_names){
if (i==all_names[1]){
p <- plot_ly(x = df1$date, y= df1[,i] , name = i, type = 'scatter', mode = 'lines')
}else{
p <- p %>% add_trace(y = df1[,i], name = i, type = 'scatter', mode = 'lines')
}
}
p