我在 R 下的 Plotly 中对我的数据进行分组时遇到了一些问题。首先我使用的是 csv 文件中的本地数据,读取它们:
geogrid_data <- read.delim('geogrid.csv', row.names = NULL, stringsAsFactors = TRUE)
并且绘图进展顺利,使用以下内容:
library(plotly)
library(RColorBrewer)
x <- list(
title = 'Date'
)
p <- plotly::plot_ly(geogrid_data,
type = 'scatter',
x = ~ts_now,
y = ~absolute_v_sum,
text = paste('Table: ', geogrid_data$table_name,
'<br>Absolute_v_Sum: ', geogrid_data$absolute_v_sum),
hoverinfo = 'text',
mode = 'lines',
color = list(
color = colorRampPalette(RColorBrewer::brewer.pal(11,'Spectral'))(
length(unique(geogrid_data$table_name))
)
),
transforms = list(
list(
type = 'groupby',
groups = ~table_name
)
)
) %>% layout(showlegend = TRUE, xaxis = x)
这里的输出:
然后我打算将数据源更改为 Oracle 数据库表,使用 ROracle 包读取数据如下:
# retrieve data into resultSet object
rs <- dbSendQuery(con, "SELECT * FROM GEOGRID_STATS")
# fetch records from the resultSet into a data.frame
geogrid_data <- fetch(rs)
# free resources occupied by resultSet
dbClearResult(rs)
dbUnloadDriver(drv)
# remove duplicates from dataframe (based on TABLE_NAME, TS_BEFORE, TS_NOW, NOW_SUM)
geogrid_data <- geogrid_data %>% distinct(TABLE_NAME, TS_BEFORE, TS_NOW, NOW_SUM, .keep_all = TRUE)
# alter date columns in place
geogrid_data$TS_BEFORE <- as.Date(geogrid_data$TS_BEFORE, format='%d-%m-%Y')
geogrid_data$TS_NOW <- as.Date(geogrid_data$TS_NOW, format='%d-%m-%Y')
并将绘图调整为:
p <- plotly::plot_ly(
type = 'scatter',
x = geogrid_data$TS_NOW,
y = geogrid_data$ABSOLUTE_V_SUM,
text = paste('Table: ', geogrid_data$TABLE_NAME,
'<br>Absolute_v_Sum: ', geogrid_data$ABSOLUTE_V_SUM,
'<br>Date: ', geogrid_data$TS_NOW),
hoverinfo = 'text',
mode = 'lines',
color = list(
color = colorRampPalette(RColorBrewer::brewer.pal(11,'Spectral'))(
length(unique(geogrid_data$TABLE_NAME))
)
),
transforms = list(
list(
type = 'groupby',
groups = geogrid_data$TABLE_NAME
)
)
) %>% layout(showlegend = TRUE, xaxis = x)
不幸的是,这似乎导致分组出现一些问题。:
正如您在将鼠标悬停在数据点上时从标签文本中看到的那样,该点表示来自NY_SKOV_PLANTEB_MW_POLY的数据,而图例设置为显示来自NY_BYGN_MW_POLY的数据。查看该图中的其他数据点,我发现该图中各种点的混合,其中一些代表NY_BYGN_MW_POLY的数据,大多数不是。
此外,关于时间线的绘图不再起作用,例如,数据从 12 月 11 日 - 12 月 10 日 - 12 月 10 日 - 12 月 12 日 - 12 月 20 日 - 12 月 17 日 - 12 月 16 日开始绘制 - 12 月 15 日。
我在处理数据时哪里出错了,我该怎么做才能让它正确?