R ggplot 或plotly 的用户输入没有闪亮
我有一个带有简单散点图(例如地图)的 Rmarkdown,我希望用户能够通过输入提供一些任意 x
和 y
坐标将它们绘制在图表上(在下面的示例中以红色显示)。问题是,我没有闪亮的服务器,所以我不能依赖这个选项。是否有一个实现,例如,通过 javascript 或其他东西?
这就是我所拥有的:
---
title: "Untitled"
output: html_document
---
```{r setup, include=FALSE}
library(ggplot2)
library(plotly)
```
```{r fig.height=4, fig.width=4}
X <- data.frame(x = 1:10, y = 1:10)
gg <- ggplot(X, aes(x, y)) + geom_point()
ggplotly(gg)
```
这就是我正在寻找的:
编辑
上面的例子是一个简化。实际上,网格是360x240,坐标只能是整数。
编辑2 @JohanRosa 已经通过完全在plotly.js 上重建绘图提供了一个很好的答案。然而,我的 ggplot 实际上相当复杂,而且我有很多。因此,将它们重建到plotly.js 对我来说是相当复杂的。这就是我正在寻找一种可以直接在我拥有的 ggplot(ly) 上工作的解决方案的原因。
I have an Rmarkdown with a simple scatter plot (a map for instance), and I would like users to be able to provide some arbitrary x
and y
coordinates via an input and have those plotted on the graph (in red in the example below). The problem is, I don't have a shiny server so I cannot rely on that option. Is there a implement this, for instance, via javascript or something?
This is what I have:
---
title: "Untitled"
output: html_document
---
```{r setup, include=FALSE}
library(ggplot2)
library(plotly)
```
```{r fig.height=4, fig.width=4}
X <- data.frame(x = 1:10, y = 1:10)
gg <- ggplot(X, aes(x, y)) + geom_point()
ggplotly(gg)
```
This is what I am looking for:
Edit
The example above is a simplification. In reality, the grid is 360x240 and the coordinates can only be integers.
Edit 2
@JohanRosa already provided a nice answer by rebuilding the plot entirely on plotly.js. However, my ggplot is in fact quite complexe and I have many of them. It would therefore be quite complicated for me to rebuild each of them into plotly.js. This is the reason I am looking for an solution that can work directly on the ggplot(ly) that I have.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我们可以使用 htmlwidgets::onRender 将自定义 JS 代码注入到您的 ggplotly 对象中。
我重用了 @JohanRosa 的输入(谢谢!+1),并向容器 div 提供了一个 id 以监听输入。此外,我使用 Plotly.restyle 来避免重绘绘图。
请检查以下内容:
有关其他信息,请参阅第 5 章“JavaScript 中的事件处理” ”来自卡森Sievert 的书使用 R、plotly 和闪亮的基于网络的交互式数据可视化。
We can use
htmlwidgets::onRender
to inject custom JS code into your ggplotly object.I reused @JohanRosa's inputs (thanks! +1) and provided an id to the container div to listen on the inputs. Furthermore I'm using Plotly.restyle to avoid redrawing the plot.
Please check the following:
For additional infos please see chapter 5 "Event handling in JavaScript" from Carson Sievert's book Interactive web-based data visualization with R, plotly, and shiny.
我直接在 JavaScript 中使用plotlty.js 完成了它。我认为有了这个你就可以进步。
I did it using plotlty.js directly in JavaScript. I think with this you can advance.
这可能不是您想要的,但您可以通过在 yaml 中添加闪亮的运行时来做到这一点
This may not be what you want but you can do this by adding a runtime of shiny in your yaml