我一直在使用闪亮和情节创建数据查看器应用程序。我想创建一个我的数据的多维缩放视图,然后单击一个数据点,以便能够将单个点视为条形图。我受this例子的启发。
这是一个最小的几乎工作的例子:
library(shiny)
library(mlbench)
library(plotly)
library(shinythemes)
library(dplyr)
# Load the data
allDat <- iris[,-5]
# ui.R definition
ui <- fluidPage(
# Set theme
theme = shinytheme("spacelab"),
# Some help text
h2("Inspect each element in iris data set"),
h4("This a shiny app exploiting coupled events in plotly"),
tags$ol(
tags$li("The first chart showcases", tags$code("plotly_click"))
),
# Vertical space
tags$hr(),
# First row
fixedRow(
column(6, plotlyOutput("Plot1", height = "600px")),
column(6, plotlyOutput("Plot2", height = "600px"))),
tags$hr())
# server.R definition
server <- function(input, output){
d <- dist(allDat) # euclidean distances between the rows
fit <- cmdscale(d,eig=TRUE, k=2) # k is the number of dim
# plot solution
x <- fit$points[,1]
y <- fit$points[,2]
plot.df <- data.frame(x=x,y=y,allDat)
output$Plot1 <- renderPlotly({
plot_ly(plot.df, x = x, y = y, mode="markers", source = "mds") %>%
layout(title = "MDS of iris data",
plot_bgcolor = "6A446F")
})
# Coupled event 2
output$Plot2 <- renderPlotly({
# Try to get the mouse click data
event.data <- event_data("plotly_click", source = "mds")
# If NULL dont do anything
if(is.null(event.data) == T) return(NULL)
# I need the row of the data in the allDat data frame
# pretty sure this is not correct
ind <- as.numeric(event.data[2])
p1 <- plot_ly(x = colnames(allDat), y=as.numeric(allDat[ind,]),type="bar")
})
}
要运行此功能,请将这两个文件放在名为something的文件夹中,例如dataViewer,然后从包含dataViewer文件夹的目录运行runApp("dataViewer")
。
我不理解来自event_data
函数的输出。我希望能够点击散点图上的点,并从allDat
数据框或plot.df
数据框中提取该数据点的行号,因为它应该相同。然后我想使用该行号进一步可视化右侧条形图中的特定点。
答案 0 :(得分:1)
我查看了event.data
对象,并认为您要查找的值是event.data$pointNumber
(以0开头,因此您需要使用event.data$pointNumber + 1
来标识该行。)< / p>
event.data
是一个包含四个名称的列表:curveNumber
,pointNumber
,x
和y
。