从函数内绘制 add_trace:Plotly
Plotting add_trace from within a function: Plotly
我正在尝试 "functionize" 我的情节陈述。如果我想从另一个数据帧添加额外的跟踪,我会收到一个错误,即 y 轴上的值不等于第一个数据帧中的第一个值数。我不确定为什么这是相关的。
library(tidyverse)
library(plotly)
library(lubridate)
Date <- seq(as.Date("2016-10-1"), as.Date("2018-09-01"), by="month")
Values <- c(2,3,4,3,4,5,6,4,5,6,7,8,9,10,8,9,10,11,12,13,11,12,13,14)
Date2 <- seq(as.Date("2018-07-1"), as.Date("2018-09-01"), by="month")
Values2 <- c(16,17,18)
df <- tibble::tibble(Date, Values)
df2 <- tibble::tibble(Date2, Values2)
testfunction <- function(x, y, y2){
p <- plot_ly(df,x = ~x, y = ~y, colors = "Blues", type = 'scatter', mode = 'lines') %>%
add_trace(data = df2, y = ~y2, line = list(color = 'rgb(255, 36,1)', width = 2.25)) %>%
layout(xaxis = list(tickformat = "%b %e"))
p
}
testfunction(Date, Values, Values2)
#Error: Column `y` must be length 1 or 24, not 3
请注意,Date
、Values
和 Values2
是存在于您的全局环境中的对象。因此,testfunction
实际上是在对 plot_ly
的调用中使用这些对象。为了证明这一点,请尝试在 plot_ly
调用中删除 df
——您应该仍然能够获得绘图(即 plot_ly
实际上并未使用数据框中的值)。但是,我怀疑您要尝试做的是在函数参数中的数据框中指定变量名称。在这种情况下,try
testfunction <- function(x, y, x2, y2) {
x <- enquo(x)
y <- enquo(y)
x2 <- enquo(x2)
y2 <- enquo(y2)
plot_ly(df, x = x, y = y, type = "scatter", mode = "lines") %>%
add_trace(x = x2, y = y2, data = df2)
}
testfunction(Date, Values, Date2, Values2)
顺便提一下这个问题和答案:
我正在尝试 "functionize" 我的情节陈述。如果我想从另一个数据帧添加额外的跟踪,我会收到一个错误,即 y 轴上的值不等于第一个数据帧中的第一个值数。我不确定为什么这是相关的。
library(tidyverse)
library(plotly)
library(lubridate)
Date <- seq(as.Date("2016-10-1"), as.Date("2018-09-01"), by="month")
Values <- c(2,3,4,3,4,5,6,4,5,6,7,8,9,10,8,9,10,11,12,13,11,12,13,14)
Date2 <- seq(as.Date("2018-07-1"), as.Date("2018-09-01"), by="month")
Values2 <- c(16,17,18)
df <- tibble::tibble(Date, Values)
df2 <- tibble::tibble(Date2, Values2)
testfunction <- function(x, y, y2){
p <- plot_ly(df,x = ~x, y = ~y, colors = "Blues", type = 'scatter', mode = 'lines') %>%
add_trace(data = df2, y = ~y2, line = list(color = 'rgb(255, 36,1)', width = 2.25)) %>%
layout(xaxis = list(tickformat = "%b %e"))
p
}
testfunction(Date, Values, Values2)
#Error: Column `y` must be length 1 or 24, not 3
请注意,Date
、Values
和 Values2
是存在于您的全局环境中的对象。因此,testfunction
实际上是在对 plot_ly
的调用中使用这些对象。为了证明这一点,请尝试在 plot_ly
调用中删除 df
——您应该仍然能够获得绘图(即 plot_ly
实际上并未使用数据框中的值)。但是,我怀疑您要尝试做的是在函数参数中的数据框中指定变量名称。在这种情况下,try
testfunction <- function(x, y, x2, y2) {
x <- enquo(x)
y <- enquo(y)
x2 <- enquo(x2)
y2 <- enquo(y2)
plot_ly(df, x = x, y = y, type = "scatter", mode = "lines") %>%
add_trace(x = x2, y = y2, data = df2)
}
testfunction(Date, Values, Date2, Values2)
顺便提一下这个问题和答案: