Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用按时间范围筛选的共享数据创建交互式条形图_R_Visualization_R Plotly_Ggplotly_Crosstalk - Fatal编程技术网

R 使用按时间范围筛选的共享数据创建交互式条形图

R 使用按时间范围筛选的共享数据创建交互式条形图,r,visualization,r-plotly,ggplotly,crosstalk,R,Visualization,R Plotly,Ggplotly,Crosstalk,我想创建一个交互式条形图,使用户可以根据一系列值筛选观察结果,然后动态呈现选定时间段内每个类的计数。由于过滤后的数据需要可用于许多这样的图形,我认为串扰和plotly/ggplot的组合可能很有价值 我在下面附加了一个reprex,它使用共享数据和来自串扰的过滤功能来支持动态过滤部分。当我编织文档时,只要选择了完整的值范围(默认值),条形图就会很好地呈现 但是,打印区域对于任何其他区域(即用户调整的范围)变为空 我到底错过了什么?我假设完整共享数据集和过滤共享数据集之间肯定存在差异,ggpl

我想创建一个交互式条形图,使用户可以根据一系列值筛选观察结果,然后动态呈现选定时间段内每个类的计数。由于过滤后的数据需要可用于许多这样的图形,我认为串扰plotly/ggplot的组合可能很有价值

我在下面附加了一个reprex,它使用共享数据和来自串扰的过滤功能来支持动态过滤部分。当我编织文档时,只要选择了完整的值范围(默认值),条形图就会很好地呈现

但是,打印区域对于任何其他区域(即用户调整的范围)变为空

我到底错过了什么?我假设完整共享数据集和过滤共享数据集之间肯定存在差异,
ggplotly()
无法处理这些数据集。有没有其他方法可以让我实现我的目标

以下是我的.Rmd文件的内容:

---
title: mpg class counts filtered by time period
output: html_document
---

```{r echo = FALSE, message = FALSE, warning = FALSE}
library(crosstalk)
library(plotly)

# Wrap data frame in SharedData
sd = SharedData$new(mpg)

# Create a filter input
filter_slider("Year", "Year", sd, column = ~ year, step = 1, width = 250)

# Render graph
bscols(
  ggplotly(
    ggplot(aes(x = class), data = sd) + 
      geom_bar()
  )
)

```

我认为这可能是因为“Crosstalk目前只适用于显示单个数据点的视图的链接刷新和过滤,而不是聚合视图或摘要视图(其中“观察”定义为数据帧中的一行)。例如,不支持直方图,因为每个条形图表示多个数据点;但散点图点表示单个数据点,因此支持它们。”

如果您将其更改为点绘图,它似乎正在工作

---
title: mpg class counts filtered by time period
output: html_document
---

```{r echo = FALSE, message = FALSE, warning = FALSE}
library(data.table)
library(crosstalk)
library(plotly)

# Wrap data frame in SharedData
sd = SharedData$new(mpg)

# Create a filter input
filter_slider("Year", "Year", sd, column = ~ year, step = 1, width = 250)

# Render graph
bscols(
  ggplotly(
    ggplot(aes(hwy, cty), data = sd) + 
      geom_point()
  )
)

```

以下内容对你有用吗?如果要筛选日期,可能需要查看
plotly::rangeslider

library(tidyverse)
library(plotly)

df <- crosstalk::SharedData$new(mpg)$data() %>%
  group_by(year, class) %>%
  count() %>%
  mutate(year = as.factor(year))
  
df %>%
  plot_ly(x = ~class, y = ~n, color = ~year) %>%
  add_bars() %>%
  layout(barmode = "stack")
库(tidyverse)
图书馆(绘本)
df%
按(年份、类别)分组%>%
计数()%>%
突变(年=作为系数(年))
df%>%
绘图(x=~类,y=~n,颜色=~年)%>%
添加_条()%>%
布局(barmode=“stack”)

感谢分享您的想法。但是为什么它会在整个时间段内都有效呢?毕竟,默认视图中的条已经是数据集的抽象。我已经添加了对代码的修改以支持我的声明。至于为什么它在整个时间段都有效,我不知道,很抱歉。是的,这就是我对散点图中原始数据点的期望。我更感兴趣的是为什么摘要视图(如条形图)是针对完整数据而不是过滤数据生成的。再次感谢您的努力。在我的实际使用案例中,我处理的是长时间的日常观察,因此手动取消选择日期似乎不可行。就我所忽略的
RangeSlaider
而言,我认为它不允许永久地对输入数据进行子集划分。如前所述,之后会有很多数据都取决于过滤后的数据。因此,最好使用
SharedData
或类似的解决方案。