我试图找到一个示例,如何创建一个绘图,其中为一列中的每个因子创建一个子面板,y轴是一个值列,而x例如是日期或rowname
例如,如果我们采用mtcars
数据框,按cyl
分组以创建每个圆柱值1个子面板,将mpg
绘制为y轴,将rowname
绘制为x轴
变量因子 此外,在我的预期情况下,我不知道会有多少独特因素,因为这取决于在绘图阶段之前在闪亮应用程序中创建数据的模型。
我看到了这个例子,但每个变量列绘制一个面板,而不是每个因子绘制一个面板:
p <- economics %>%
tidyr::gather(variable, value, -date) %>%
transform(id = as.integer(factor(variable))) %>%
plot_ly(x = ~date, y = ~value, color = ~variable, colors = "Dark2",
yaxis = ~paste0("y", id)) %>%
add_lines() %>%
subplot(nrows = 5, shareX = TRUE)
如果有人知道让我入门的方法或有关于如何做到这一点的现有例子,我将非常感激
修改 我尝试构建此代码,但似乎在每个面板中绘制所有值
mydf <- mtcars[ ,names(mtcars)[which(names(mtcars) %in% c('cyl', 'mpg', 'hp'))]]
plot_ly(data = mydf, x =~hp, y=~mpg, type = 'scatter')
myplotlysub <- function(dat) {
plot_ly(data = mydf, x =~hp, y=~mpg, type = 'scatter', mode = 'markers')
}
p <- mydf %>%
group_by(cyl) %>%
do(plot = myplotlysub(.)) %>%
subplot(nrows = 1) %>%
layout(
showlegend = TRUE)
p
答案 0 :(得分:1)
ggplotly
执行此任务的一种可能方法是利用ggplot2
的{{1}}&amp;然后使用facet_grid
将ggplot对象转换为图形对象。 plotly::ggplotly
函数并不总是很好,但如果您熟悉ggplotly
,那么这是一个快速获取情节图的方法。注意,因为从ggplot2
返回的对象是一个绘图对象,我们可以使用绘图函数进一步修改它。
ggplotly
library(ggplot2)
library(plotly)
# move rownames to a column for use in `aes()`
my_mtcars = mtcars
my_mtcars$model = rownames(my_mtcars)
# create ggplot
p = ggplot(my_mtcars, aes(x=model, y=mpg)) +
geom_bar(stat='identity') +
# facet by cyl (drop unused factors in a facet using free_x)
facet_grid(. ~ cyl, scales = "free_x") +
labs(x='') +
# rotate and size x tick marks
theme(axis.text.x = element_text(angle = 90,
hjust = 1,
size=5))
# add plotly-ness
ggplotly(p) %>%
layout(title="MPG by CYL")
您也可以使用此SO Q/A中指出的subplot
。但是,答案使用plotly::subplot
的公式语法,似乎与plotly使用purrr
冲突,并导致错误。要运行w / o错误,您可以避免使用~
图表语法或使用~var
代替lapply
。
与purrr::map
+ subplot
相比,facet_grid
的缺点是你最终得到了不同的缩放y轴;如果你想避免混淆,你必须手动解决这个问题。
ggplotly