我有一个应用程序,我试图改变点的大小或颜色或符号。 点是用户点击的对象。 点击一个点会在我的程序中创建一个弹出窗口,显示另一个数据集链接到属于被点击的点的rownumber列中的ID值。我在演示应用程序中包含了事件流(没有弹出窗口)用于点击事件。在R发光的情节中改变一个散点图中的单个点
我试图根据答案here更改点为一个情节2d散点图。但是,将代码应用于我的3D图似乎不起作用。
一点点额外的背景资料:我建立一个程序来分析3D分散的数据和我的应用程序包含了几个这样的3D绘图
有谁知道如何使这项工作?
下面的应用程序包含的代码,这两个二维(评论)和3D绘图对象,以显示工作和非工作情况,是@Maximilian彼得斯给予代码的直接修改
谢谢你的任何帮帮我!
奖金问题:假设我们可以把它的3dplot工作,我也想弄清楚如何根据存储在一个反应变量数更改JavaScript代码来改变一个点(即值$活动点),而不是点击事件,因为我将允许用户循环点和一个< - 和 - >按钮来更改点ID,我们正在从中检索附加信息。
library(shiny)
library(plotly)
library(htmlwidgets)
ui <- fluidPage(
plotlyOutput("plot"),
textOutput('messageNr')
)
javascript <- "
function(el, x){
el.on('plotly_click', function(data) {
colors = [];
var base_color = document.getElementsByClassName('legendpoints')[data.points[0].curveNumber].getElementsByTagName('path')[0].style['stroke']
for (var i = 0; i < data.points[0].data.x.length; i += 1) {
colors.push(base_color)
};
colors[data.points[0].pointNumber] = '#000000';
Plotly.restyle(el,
{'marker':{color: colors}},
[data.points[0].curveNumber]
);
//make sure all the other traces get back their original color
for (i = 0; i < document.getElementsByClassName('plotly')[0].data.length; i += 1) {
if (i != data.points[0].curveNumber) {
colors = [];
base_color = document.getElementsByClassName('legendpoints')[i].getElementsByTagName('path')[0].style['stroke'];
for (var p = 0; p < document.getElementsByClassName('plotly')[0].data[i].x.length; p += 1) {
colors.push(base_color);
}
Plotly.restyle(el,
{'marker':{color: colors}},
[i]);
}
};
});
}"
server <- function(input, output, session) {
row.names(mtcars) <- 1:nrow(mtcars)
colorscale <- c("blue", "red", "yellow")
values <- reactiveValues()
output$plot <- renderPlotly({
values$point <- event_data("plotly_click", source = "select")
plot_ly(mtcars,
x = ~mpg,
y = ~cyl,
z = ~wt,
type = "scatter3d",
color = as.factor(mtcars$gear),
colors = colorscale,
mode = "markers",
source = "select",
showlegend = F)%>%
add_markers() %>% onRender(javascript)
})
observeEvent(values$point, {
values$row <- as.numeric(values$point$pointNumber) +1
values$ID <- rownames(mtcars)[values$row]
### the values$ID is what I use to look up the corresponding dataset in other dataframes containing the detailed info of a datapoint in the
### summary data set that is used to create the real scatter3d plots in which the user clicks.
output$messageNr <- renderText(values$ID)
})
}
# server <- function(input, output, session) {
#
# nms <- row.names(mtcars)
#
# output$plot <- renderPlotly({
# p <- ggplot(mtcars, aes(x = mpg, y = wt, col = as.factor(cyl))) +
# geom_point()
# ggplotly(p) %>% onRender(javascript)
#
# })
# }
shinyApp(ui, server)
如果有人认为他可以帮助这个,也许我们可以在聊天聊天,所以我可以更好地解释我正在努力实现什么 – Mark