我正在使用 Plotly 和 Shiny在 R 中构建一个交互式时间序列热图。作为此过程的一部分,我将热图值从连续格式重新编码为有序格式 - 所以我有一个热图,其中六种颜色代表特定的计数类别,而这些类别是根据聚合计数值创建的。但是,这会导致使用ggplotly(). 我已经将它追溯到tooltip()Plotly 中呈现交互框的函数。即使我只是向tooltip(). 我正在使用来自约翰霍普金斯 CSSE 存储库. 这是一个简化的热图代码,它也使用辛普森一家的颜色主题ggsci:
#Load packages
library(shiny)
library(plotly)
library(tidyverse)
library(RCurl)
library(ggsci)
#Read example data from Gist
confirmed <- read_csv("https://gist.githubusercontent.com/GeekOnAcid/5638e37c688c257b1c381a15e3fb531a/raw/80ba9704417c61298ca6919343505725b8b162a5/covid_selected_europe_subset.csv")
#Wrap ggplot of time-series heatmap in ggplotly, call "tooltip"
ggplot_ts_heatmap <- confirmed %>%
ggplot(aes(as.factor(date), reorder(`Country/Region`,`cases count`),
fill=cnt.cat, label = `cases count`, label2 = as.factor(date),
text = paste("country:", `Country/Region`))) +
geom_tile(col=1) +
theme_bw(base_line_size = 0, base_rect_size = …Run Code Online (Sandbox Code Playgroud) 当我将具有ggplot两个单独图例的 a 转换为plotly(使用ggplotly)时,两个图例合并。有谁知道如何防止这种情况?
library(tidyverse)
library(plotly)
df <- data.frame(date =
as.Date(c("01/01/1998", "10/01/1998", "15/01/1998",
"25/01/1998", "01/02/1998", "12/02/1998", "20/02/1998"), "%d/%m/%Y"),
date2 = as.Date(c(NA, "10/01/1998", NA,
NA, NA, NA, NA), "%d/%m/%Y"),
counts = c(12, 10, 2, 24, 15, 1, 14),
yes_no = c("yes", "yes", "yes", "no", "no", "no", "no"))
gg <- ggplot(df, aes(x = date, y = counts)) +
geom_line() +
geom_ribbon(aes(ymin = 0, ymax = counts, fill = yes_no), color = NA, alpha = 0.5) +
ggplot2::scale_fill_brewer(name …Run Code Online (Sandbox Code Playgroud) 我正在尝试做一些看似简单的事情:当用户点击数据点或用套索选择选择多个点时,我想用不同的颜色绘制这些点.为了做到这一点,我查看选择了哪些点,并向col数据框添加变量,并告诉ggplot根据该列为点着色.
它确实适用于第一个选择.但是,只要已经选择了点,选择下一组点就不起作用了.我已经添加调试语句看到的是从plotly返回什么数据,而且好像它返回不同pointNumber和curveNumber初始选择之后.我找不到任何关于这些变量如何工作的文档,我不知道如何解决这个问题.
这里是重现的代码:
library(plotly)
library(shiny)
ui <- fluidPage(
plotlyOutput("plot")
)
server <- function(input, output, session) {
output$plot <- renderPlotly({
click_data <- event_data("plotly_click", source = "select")
select_data <- event_data("plotly_selected", source = "select")
data <- mtcars
data$col <- "black"
if (!is.null(select_data)) {
cat(str(select_data))
idx <- select_data$pointNumber + 1
data[idx, "col"] <- "blue"
}
if (!is.null(click_data)) {
cat(str(click_data))
idx <- click_data$pointNumber + 1
data[idx, "col"] <- "red"
}
p <- ggplot(data, aes(mpg, wt, …Run Code Online (Sandbox Code Playgroud) 我创建了一个shiny应用程序来显示大型数据集的相关热图.按下热图贴图后,将显示相应的散点图.
但是,我需要制作其中几个应用程序,这超出了我的发布限制shinyapps.io.我的公司不愿意升级到付费计划.我尝试使用其他方法发布应用程序,如RInno无效(我认为应用程序太复杂了?).
如果有人能告诉我如何plotly单独生产同样的东西而不是shiny,我会永远感激.我相信crosstalk可能是将热图贴图链接到散点图的路径?
谢谢
这里的例子.
library(plotly)
library(shiny)
# compute a correlation matrix
correlation <- round(cor(mtcars), 3)
nms <- names(mtcars)
ui <- fluidPage(
mainPanel(
plotlyOutput("heat"),
plotlyOutput("scatterplot")
),
verbatimTextOutput("selection")
)
server <- function(input, output, session) {
output$heat <- renderPlotly({
plot_ly(x = nms, y = nms, z = correlation,
key = correlation, type = "heatmap", source = "heatplot") %>%
layout(xaxis = list(title = ""),
yaxis = list(title = ""))
}) …Run Code Online (Sandbox Code Playgroud) 我正在构建一个应用程序,允许用户使用 selectInput 在绘图图上动态添加和删除跟踪。
我试图从 plotly 包中使用 plotlyProxy () 和 plotlyProxyInvoke () ,但无济于事。
以下是我的基本代码:
library(shiny)
library(shinydashboard)
library(plotly)
ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(
sidebarMenu(
menuItem("Search", tabName = "Tabs", icon = icon("object-ungroup"))
)
),
dashboardBody(
tabItem(tabName = "Tabs",
fluidRow(
column(width=3,
box(
title="SELECT ",
solidHeader=TRUE,
collapsible=TRUE,
width=NULL,
selectInput(
inputId="Player",
selected = NULL, multiple = TRUE,
label=" Choose Player",
choices=c("Messi", "Suarez", "Ronaldo" )),
selectInput(
inputId="Delete",
selected = NULL, multiple = TRUE,
label=" Choose Player",
choices=c("Messi", "Suarez", "Ronaldo" )),
submitButton("Select")
)
),
column( width=9,
tabBox(
width="100%", …Run Code Online (Sandbox Code Playgroud) 我花了很多时间试图弄清楚在highlight()结合使用 Plotly 的功能时如何自定义或控制 Plotly 的图例行为plotly::ggplotly()。这是一个例子:
library(ggplot2)
library(plotly)
library(dplyr)
test_data <- data.frame(
name = LETTERS[1:5],
metric = sample(x = c(500:800), size = 100)
) %>%
arrange(name) %>%
group_by(name) %>%
mutate(index = row_number()) %>%
data.frame()
plotly_obj <- ggplotly(
test_data %>%
highlight_key(~name) %>%
ggplot() +
geom_line(
aes(
x = index,
y = metric,
color = name
),
size = .75
) +
scale_x_continuous(breaks = c(1:20)) +
scale_color_brewer(palette = "Accent") +
theme_bw()
)
highlight(
plotly_obj,
on = "plotly_hover",
off = …Run Code Online (Sandbox Code Playgroud) 我一直愿意tab在rmarkdown.
我创建了一个in_tabs似乎适用于除ggplot情节之外的所有内容的方法。
它的工作方式是创建Rmd在选项卡中显示嵌套列表所需的代码。
以下可重现的示例显示了该问题:
---
title: "test"
output: html_document
---
```{r setup, include = FALSE}
library(ggplot2)
library(plotly)
l1 <- list(p1 = data.frame(x=1:10, y=1:10))
l2 <- list(p2 = data.frame(x=100:110, y=100:110))
gplot <- function(data) {
p <- ggplot(data) + aes(x=x, y=y) + geom_point() + geom_line()
return(p)
}
gplotly <- function(data) {
p <- ggplot(data) + aes(x=x, y=y) + geom_point() + geom_line()
return(ggplotly(p))
}
```
```{r, code, include = FALSE}
in_tabs <- function(l, …Run Code Online (Sandbox Code Playgroud) 我想通过 R 绘制具有独立图例的图,同时尊重色阶。
这就是我所拥有的:
library(plotly)
X <- data.frame(xcoord = 1:6,
ycoord = 1:6,
score = 1:6,
gender = c("M", "M", "M", "F", "F", "F"),
age = c("young", "old", "old", "old", "young", "young"))
plot_ly(data = X, x = ~xcoord, y = ~ycoord, split = ~interaction(age, gender),
type = "scatter", mode = "markers",
marker = list(color = ~score,
colorbar = list(len = .5, y = .3)))
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,颜色条混乱,两个类别纠缠在一起。
我需要为age(年轻与年老)和gender(男与女)分别提供图例,可以彼此独立地单击。这将是预期的结果:

编辑 1
这相当于ggplot2:
gg <- ggplot(X, aes(x …Run Code Online (Sandbox Code Playgroud) 当我尝试在 ggplot 中为箱线图设置自定义宽度时,它工作正常:
p=ggplot(iris, aes(x = Species,y=Sepal.Length )) + geom_boxplot(width=0.1)
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用 ggplotly 时,宽度(和 hjust)是默认的:
p %>% ggplotly()
Run Code Online (Sandbox Code Playgroud)
我做错了什么或者这是 ggplotly 中的错误?
我想创建一个具有对数刻度和根据记录数据计算的统计数据的箱线图(以及可能的其他图)。以下示例显示了逻辑。
数据如下:
d1 <- data.frame(x = rchisq(1000, 2), mod = c(rep('a', 500), rep('b', 500)))
Run Code Online (Sandbox Code Playgroud)
如果我预先转换数据,我会获得 y 轴上对数值的图。
plot_ly(d1, y = ~log10(x), color = ~mod, type = 'box')
Run Code Online (Sandbox Code Playgroud)
如果我在创建箱线图后转换 y 轴,我会得到一个箱线图,其中包含原始数据的须线长度和中位数以及 y 轴上对数刻度的原始数据。
plot_ly(d1, y = ~x, color = ~mod, type = 'box') %>%
layout(yaxis = list(type = "log", showgrid=T, ticks="outside", autorange=TRUE))
Run Code Online (Sandbox Code Playgroud)
我理想的结果是上面两张图的组合 - 第一张图片的箱线图和第二张图片的比例。它应该看起来像可以在 ggplot 中执行的操作:
d1 %>% ggplot(aes(y=x, alpha = 0.1, color = mod, fill = mod))+
geom_boxplot()+
scale_y_log10()
Run Code Online (Sandbox Code Playgroud)
我尝试使用 ggploly 将 ggplot 修改为plotly,但它丢失了比例并将其更改为第一张图片的比例。
任何人都可以帮助用plotly制作这样的图,或者如何用ggplotly保留y轴上的对数比例?