Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 基于绘图在图表中显示数据_R_Ggplot2_Shiny_Plotly_Splitstackshape - Fatal编程技术网

R 基于绘图在图表中显示数据

R 基于绘图在图表中显示数据,r,ggplot2,shiny,plotly,splitstackshape,R,Ggplot2,Shiny,Plotly,Splitstackshape,请运行下面的脚本,下面的R脚本提供了一个带有两个框的闪亮仪表板。我想缩小两个框之间的宽度,并在右侧图表中显示数据。数据应该基于我们在ggplotly函数中看到的点击事件。我想,plotly也可以用来做这项工作。我希望代码同时快速高效 ## app.R ## library(shiny) library(shinydashboard) library(bupaR) library(eventdataR) library(lubridate) library(dplyr) library(XML)

请运行下面的脚本,下面的R脚本提供了一个带有两个框的闪亮仪表板。我想缩小两个框之间的宽度,并在右侧图表中显示数据。数据应该基于我们在ggplotly函数中看到的点击事件。我想,plotly也可以用来做这项工作。我希望代码同时快速高效

## app.R ##
library(shiny)
library(shinydashboard)
library(bupaR)
library(eventdataR)
library(lubridate)
library(dplyr)
library(XML)
library(edeaR)
library(xml2)
library(data.table)
library(ggplot2)
library(ggthemes)
library(glue)
library(tibble)
library(miniUI)
library(tidyr)
library(shinyTime)
library(magrittr)
library(plotly)
library(DT)
library(splitstackshape)
library(scales)

patients$patient = as.character(patients$patient)
a1 = patients$patient
a2 = patients$handling
a3 = patients$time
a123 = data.frame(a1,a2,a3)
patients_eventlog = simple_eventlog(a123, case_id = "a1",activity_id = "a2", 
timestamp = "a3")

dta <- reactive({
tr <- data.frame(traces(patients_eventlog, output_traces = T, output_cases = 
F))
tr.df <- cSplit(tr, "trace", ",")
tr.df$af_percent <-
percent(tr.df$absolute_frequency/sum(tr.df$absolute_frequency))
pos <- c(1,4:ncol(tr.df))
tr.df <- tr.df[,..pos]
tr.df <- melt(tr.df, id.vars = c("trace_id","af_percent"))
tr.df
})
patients10 <- reactive({
patients11 <- arrange(patients_eventlog, a1)
patients12 <- patients11 %>% arrange(a1, a2,a3)
patients12 %>%
group_by(a1) %>%
mutate(time = as.POSIXct( a2, format = "%m/%d/%Y %H:%M"),diff_in_sec =  a2 - 
lag( a2)) %>% 
mutate(diff_in_sec = ifelse(is.na(diff_in_sec),0,diff_in_sec)) %>% 
mutate(diff_in_hours = as.numeric(diff_in_sec/3600)) %>% 
mutate(diff_in_days = as.numeric(diff_in_hours/24))
})
ui <- dashboardPage(
dashboardHeader(title = "Trace Chart"),
dashboardSidebar(
width = 0
),
dashboardBody(
box(title = "Trace Chart", status = "primary",height = "455" ,solidHeader = 
T,
    plotlyOutput("trace_plot"),style = "height:420px; overflow-y: 
scroll;overflow-x: scroll;"),

box( title = "Trace Summary", status = "primary", height = "455",solidHeader 
= T, 
     dataTableOutput("trace_table"))
)
)
server <- function(input, output) 
{ 
output$trace_plot <- renderPlotly({
mp1 = ggplot(data = dta(), aes(x = variable,y = trace_id, fill = value,
                               label = value,
                               text=paste("Variable:",variable,"<br> Trace 
                                          ID:",trace_id,"<br> 
Value:",value,"<br> Actuals:",af_percent))) +
  geom_tile(colour = "white") +
  geom_text(colour = "white", fontface = "bold", size = 2) +
  scale_fill_discrete(na.value="transparent") +
  theme(legend.position="none") + labs(x = "Traces", y = "Activities")
ggplotly(mp1, tooltip=c("text"), height = 1226, width = 1205)
})
output$trace_table <- renderDataTable({
req(event_data("plotly_click"))
Values <- dta() %>% 
  filter(trace_id == event_data("plotly_click")[["y"]]) %>% 
  select(value)

valueText <- paste0(Values[[1]] %>% na.omit(),collapse = "")
agg <- aggregate(a3~a1, data = patients10(), FUN = function(y){paste0(unique(y),collapse = "")})

currentPatient <- agg$a1[agg$a3 == valueText]

patients10_final <- patients10() %>%
  filter(a1 %in% currentPatient)
datatable(patients10_final, options = list(paging = FALSE, searching = FALSE))
})
}
shinyApp(ui, server)
##app.R##
图书馆(闪亮)
图书馆(shinydashboard)
图书馆(bupaR)
库(eventdataR)
图书馆(lubridate)
图书馆(dplyr)
库(XML)
图书馆(edeaR)
库(xml2)
库(数据表)
图书馆(GG2)
图书馆(主题)
图书馆(胶水)
图书馆(tibble)
图书馆(miniUI)
图书馆(tidyr)
图书馆(shinyTime)
图书馆(magrittr)
图书馆(绘本)
图书馆(DT)
库(splitstackshape)
图书馆(比例尺)
患者$patient=as.character(患者$patient)
a1=患者$患者
a2=患者$处理
a3=患者$时间
a123=数据帧(a1、a2、a3)
患者事件日志=简单事件日志(a123,案例id=“a1”,活动id=“a2”,
时间戳=“a3”)

dta我创建了一个简单的示例,说明如何将
中的耦合事件与一些接近您需要的示例数据结合使用:

library(shiny)
library(plotly)
library(DT)
set.seed(100)
data <- data.frame(A=sample(c('a1','a2','a3'),10,replace=T),
                   B=1:10,
                   C=11:20,
                   D=21:30)
shinyApp(
  ui = fluidPage(
plotlyOutput("trace_plot"),
  DT::dataTableOutput('tbl')),
  server = function(input, output) {

    output$trace_plot <- renderPlotly({
      plot_ly(data, x=~A,y=~B,z=~C, source = "subset") %>% add_histogram2d()})

    output$tbl <- renderDataTable({
      event.data <- event_data("plotly_click", source = "subset")

      if(is.null(event.data) == T) return(NULL)
      print(event.data[ ,c(3:4)])
    })

  }
)
库(闪亮)
图书馆(绘本)
图书馆(DT)
种子集(100)

数据我创建了一个简单的示例,说明如何将
中的耦合事件与一些符合您需要的示例数据结合使用:

library(shiny)
library(plotly)
library(DT)
set.seed(100)
data <- data.frame(A=sample(c('a1','a2','a3'),10,replace=T),
                   B=1:10,
                   C=11:20,
                   D=21:30)
shinyApp(
  ui = fluidPage(
plotlyOutput("trace_plot"),
  DT::dataTableOutput('tbl')),
  server = function(input, output) {

    output$trace_plot <- renderPlotly({
      plot_ly(data, x=~A,y=~B,z=~C, source = "subset") %>% add_histogram2d()})

    output$tbl <- renderDataTable({
      event.data <- event_data("plotly_click", source = "subset")

      if(is.null(event.data) == T) return(NULL)
      print(event.data[ ,c(3:4)])
    })

  }
)
库(闪亮)
图书馆(绘本)
图书馆(DT)
种子集(100)

数据这应该可以帮助你:@malu_a,谢谢回复,请参阅我了解plotly_click,我需要的帮助是调整R脚本中“output$trace_table”下的逻辑,以在表中显示带有时间戳的案例和活动。这应该可以帮助你:@malu a,谢谢回复,请参阅我了解plotly_click,我需要的帮助是调整R脚本中“output$trace_table”下的逻辑,以便在表中显示带有时间戳的案例和活动。我感谢您的努力,但我的要求有点不同,请参阅上面我发布的脚本,它为您提供了一个完整的跟踪资源管理器和数据表,如果您使用“patients”事件日志,即使用patients替换“patients\u eventlog”,则会显示正确的结果。解决方案已经存在,但我有一个数据,其中我只有caseID、activity和Timestamp。因此,我只能创建一个简单的事件日志来满足我的需要,我已经完成了绘图,关于要显示的数据,患者事件日志有逻辑,我只需要您的帮助来更改一点逻辑。您可以将a1、a2和a12变量替换为a1,将a2替换为“患者”,将a2替换为“处理”,将a3替换为“时间”列。这将给出我希望数据显示方式的想法。请帮助。我感谢您的努力,但我的要求有点不同,请参阅我发布的上面的脚本,它为您提供了一个完整的跟踪资源管理器,如果您使用“patients”事件日志,即使用patients替换“patients\u eventlog”,则会显示正确的结果。解决方案已经存在,但我有一个数据,其中我只有caseID、activity和Timestamp。因此,我只能创建一个简单的事件日志来满足我的需要,我已经完成了绘图,关于要显示的数据,患者事件日志有逻辑,我只需要您的帮助来更改一点逻辑。您可以将a1、a2和a12变量替换为a1,将a2替换为“患者”,将a2替换为“处理”,将a3替换为“时间”列。这将给出我希望数据显示方式的想法。请帮忙。