我正在开发一个带有基于绘图的交互式图表的 rmarkdown HTML。虽然我可以完成图表中我想要的所有内容,但 crosstalk() 中的 filter_select() 不允许我在其中设置默认值。因此,我的图表在初始加载期间看起来笨拙且糟糕。
通过 R 中的串扰使用选择框在 R 绘图中选择默认值,使用静态 html 不闪亮
上面的讨论有一些输入,但我不知道如何在 crosstalk() 中进行这些编辑,因为我不熟悉 HTML/JavaScript。
我正在尝试使用 R 显示传单地图(我不能使用 Shiny 包)。我使用“DT”、“crosstalk”和“leaflet”包来计算地图中选定数据的列的平均值。在地图中,它仅通过矩形形状来选择点。是否可以通过套索选择?
#R code
library(dplyr)
library(leaflet)
library(DT)
library(crosstalk)
data_2 <- data.frame(ID=c(1:8),
Name1 = c("A", "A", "A", "C", "B", "B", "A", "B"),
Name2 = c("a", "b", "b", "a", "b", "a", "b", "c"),
Value1 = c(12,43,54,34,23,77,44,22),
Value2 = c(6,5,2,7,5,6,4,3),
Lat = c(51.1, 51.6, 57.3, 52.4, 56.3, 54.3, 60.4, 49.2),
Lon = c(5, -3, -2, -1, 4, 3, -5, 0))
data_2<-data_2 %>%
mutate(
lab_DB = case_when(
Name1 == unique(data_2$Name1)[1] ~ "blue",
Name1 == unique(data_2$Name1)[2] ~ "green",
Name1 == unique(data_2$Name1)[3] ~ …Run Code Online (Sandbox Code Playgroud) 我有一个 RMarkdown 文档,它按组总结了有多少记录(行)具有各种属性。我希望能够通过在汇总之前进行过滤来操作表中包含哪些记录。我在下面创建了一个最小但类似的模型。
我想要的是一个交互式复选框,可以有效地“注释或取消注释”
# filter(weight_class == "Heavy") %>%
Run Code Online (Sandbox Code Playgroud)
以下。
我知道我可以使用 Shiny 做到这一点,但我需要能够直接与同事共享生成的 HTML 文件(在我的情况下通过共享 Box 文件夹),因此 Shiny 解决方案不可行,至少目前是这样。DT另外,我考虑过使用/的功能datatable,但据我所知,过滤需要在它到达那里之前发生(尽管我愿意被证明我对此是错误的)。
我见过像htmltools、 、之类的包htmlwidgets,crosstalk它们似乎可以促进这一点,但我对它们还不够熟悉,并且似乎无法在网上找到足够接近的示例来根据我的目的进行修改。
实际上,我希望能够过滤多个条件,并希望从过滤后的数据生成多个表格和绘图,但我希望下面的最小示例可以作为一个可行的起点。
我如何添加这样的复选框(或类似的)来创建这种类型的交互性,而不需要求助于 Shiny?
演示 RMarkdown:
---
title: "Table Demo"
output: html_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
library(tidyverse)
library(DT)
```
```{r data}
set.seed(42)
df <- tibble(
group = sample(paste0("Group ", LETTERS[1:4]), 100, replace = T),
weight_class = sample(c("Heavy", "Light"), 100, replace = T, prob = c(.3, …Run Code Online (Sandbox Code Playgroud) 如何使用特定的行来过滤行Type,这些行位于父表或 a 的任何嵌套表中reactable,crosstalk::filter_checkbox如下所示?
dat <- structure(list(Manufacturer = c(
"Acura", "Acura", "Audi", "Audi",
"BMW", "Buick", "Buick", "Buick", "Buick", "Cadillac", "Cadillac",
"Chevrolet", "Chevrolet", "Chevrolet", "Chevrolet", "Chevrolet",
"Chevrolet", "Chevrolet", "Chevrolet", "Chrysler", "Chrysler",
"Chrysler", "Dodge", "Dodge", "Dodge", "Dodge", "Dodge", "Dodge",
"Eagle", "Eagle", "Ford", "Ford", "Ford", "Ford", "Ford", "Ford",
"Ford", "Ford", "Geo", "Geo", "Honda", "Honda", "Honda", "Hyundai",
"Hyundai", "Hyundai", "Hyundai", "Infiniti", "Lexus", "Lexus",
"Lincoln", "Lincoln", "Mazda", "Mazda", "Mazda", "Mazda", "Mazda",
"Mercedes-Benz", "Mercedes-Benz", "Mercury", "Mercury", "Mitsubishi",
"Mitsubishi", "Nissan", …Run Code Online (Sandbox Code Playgroud) 我想创建一个交互式条形图,让用户可以根据一系列值过滤观察结果,然后动态呈现所选时间段内每个类的计数。由于过滤后的数据需要可用于许多这样的图表,我认为串扰和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() …Run Code Online (Sandbox Code Playgroud) 编辑TL;DR
使用crosstalk包,我正在寻找一种方法来链接利用长格式数据(线图)的图形与宽格式数据的交互式表格,以便表格中的每一行对应于图中的一条线。
我正在尝试将 DT 表与绘图图链接起来。我的麻烦在于图形需要长格式的数据,而表格需要宽格式。我可能专注于 tidyverse 的做事方式。我将尝试提供一个最小的示例,说明我正在尝试做什么以及我想获得什么。
设置:
library(tidyverse)
library(crosstalk)
library(plotly)
library(DT)
# Wide format
df_test1 <- data.frame(
id = c("id1", "id2"),
item1 = c(0, 4),
item2 = c(3, 2),
item3 = c(1, 4),
item4 = c(3, 4),
item5 = c(1, NA)
)
# Reshaped to long format
df_test2 <-
df_test1 %>%
tidyr::pivot_longer(cols = item1:item5, names_to = "item", values_to = "value") %>%
dplyr::mutate(item = as.factor(item)) %>%
dplyr::mutate(value = factor(as.character(value), levels = c("0", "1", "2", "3", "4")))
Run Code Online (Sandbox Code Playgroud)
我试过的: …
这个问题之前已经被问过,但由于没有reprex而没有得到答案,所以让我试一下。
假设我有两个跨越不同日期范围的数据集。我想使用滑块控制每个的可视化。以下 reprex 将直接在下面创建视觉效果。
---
title: "Untitled"
output: html_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
#+ message = FALSE, warning = FALSE
library(plotly)
library(crosstalk)
library(dplyr)
#+
```
```{r}
df1 <- data.frame(d = seq.Date(from = as.Date("2020-01-01"), by = "months", length.out = 100), v = runif(100))
df2 <- data.frame(d = seq.Date(from = as.Date("2020-6-01"), by = "months", length.out = 20), other_v = runif(20))
both_df <- full_join(df1, df2, by = 'd')
both_df_sh <- both_df %>% SharedData$new(group = "boom")
selector <- filter_slider(id …Run Code Online (Sandbox Code Playgroud) 我在使用可反应表的 r闪亮应用程序的串扰 filter_select() 函数中使用 NFL 体育场名称。然而,当我选择“M&T Bank Stadium”时,它显示为“M&[amp;]T Bank Stadium”(我添加了括号,以便您看到它的样子)。有没有办法让串扰过滤器选择显示“M&T 银行体育场”而不是“M&[amp;]T 银行体育场”?
我在下面做了一个快速 MRE
library(reactable)
library(tidyverse)
library(crosstalk)
library(shiny)
df <- tibble(points = c(10, 12, 14),
stadium = c("M&T Bank Stadium", "Wembley Stadium", "FirstBank Stadium"))
df_crosstalk <- SharedData$new(df)
df_react <-
reactable(df_crosstalk)
ui <- fluidPage(
titlePanel("Test Ampersand"),
fluidRow(
column(
4,
filter_select(
id = "stadium",
label = "Stadium",
sharedData = df_crosstalk,
group = ~`stadium`)
),
column(
8,
df_react
)
)
)
server <- function(input, output, session) {
output$table <- renderReactable({
df_react
})
} …Run Code Online (Sandbox Code Playgroud) 我想使用 R 中的串扰制作包含点的地图和响应式热图。如下所示:
library(crosstalk)
library(leaflet)
library(DT)
# Wrap data frame in SharedData
sd <- SharedData$new(quakes[sample(nrow(quakes), 10),])
bscols(
# Create a filter input
filter_slider("mag", "Magnitude", sd, column=~mag, step=0.1, width=250),
leaflet(sd) %>% addTiles() %>% addMarkers() %>% addHeatmap())
)
Run Code Online (Sandbox Code Playgroud)
但是,运行代码后可以观察到,这种方式在过滤时并没有得到热图的响应效果
怎样才能达到效果呢?
crosstalk ×9
r ×9
reactable ×3
leaflet ×2
plotly ×2
r-plotly ×2
dt ×1
ggplotly ×1
htmlwidgets ×1
javascript ×1
r-markdown ×1
shiny ×1
tidyverse ×1