【问题标题】:How to get the grouping right in R with Plotly如何使用 Plotly 在 R 中正确分组
【发布时间】:2019-01-08 09:26:36
【问题描述】:

我在 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 日。

我在处理数据时哪里出错了,我必须做些什么才能让它正确?

【问题讨论】:

  • 能否分享dput(geogrid_data)的输出,其中geogrid_data是使用Oracle数据库生成的数据框?
  • 是的,没问题。控制台的转储可以在这里找到:pastebin.com/zzXhpFEE 只有数据框的前 200 行...

标签: r r-plotly roracle


【解决方案1】:

当然,应该查看数据...谢谢 Marco,在您提出问题后,我确实查看了我的数据。

有些地方我只是假设了一些事情。 使用 csv 文件中的数据绘制所有数据的原因很简单。在 csv 文件中手动编译的所有信息都来自按日期排序的电子邮件中的信息。因此,我在按日期排序的 csv 文件中编译了数据,并且 Plotly 按 table_name 对数据进行分组没有任何问题。

查看我的数据后,我整理了一下,只保留了我需要在图中显示的数据,并使用 dplyr 按时间对数据进行排序。

geogrid_data <- dplyr::arrange(geogrid_data, TS_NOW)

它只是按时间而不是按时间表名,因为按表名排序是无论如何由 Plotly 和 groupby 语句完成

【讨论】:

    猜你喜欢
    • 2019-02-05
    • 2016-02-14
    • 2016-05-12
    • 2020-06-03
    • 2017-09-24
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    • 2021-01-18
    相关资源
    最近更新 更多