Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Making simple R GUI with tcltk package

I'm trying to make very simple GUI for my script. In nutshell problem looks like that :

dataset is dataframe, I would like to plot one column as the time and use simple GUI for choosing next/previus column.

dataset <-data.frame(rnorm(10), rnorm(10), rnorm(10))

columnPlot <- function(dataset, i){

plot(dataset[, i])

}

how to use tcltk for calling fplot with different i's ?

like image 452
Qbik Avatar asked Dec 21 '22 13:12

Qbik


2 Answers

Are you particularly attached to the idea of using tcltk? I've been working on something similar using the gWidgets package and have had some success. According to it's CRAN site, "gWidgets provides a toolkit-independent API for building interactive GUIs". This package uses tcltk or GTK2 and I've been using the GTK2 portion. Here's a quick example of a GUI with a spinbutton for changing i. I also added a little fanciness to your function because you mentioned you would be plotting time series, so I made the x axis Time.

data<-data.frame(rnorm(11),rnorm(11),rnorm(11))

i = 1

fplot <- function(i, data = data){
  library(ggplot2)
  TimeStart <- as.Date('1/1/2012', format = '%m/%d/%Y')
  plotdat <- data.frame(Value = data[ ,i], Time = seq(TimeStart,TimeStart + nrow(data) - 1, by = 1))
  myplot <- ggplot(plotdat, aes(x = Time, y = Value))+
    geom_line()
  print(myplot)
}

library(gWidgets)
options(guiToolkit = 'RGtk2')

window <- gwindow ("Time Series Plots", visible = T)
notebook <- gnotebook (cont = window)
group1 <- ggroup(cont = notebook, label = "Choose i", horizontal=F)
ichooser <- gspinbutton(cont = group1, from = 1, to = ncol(data), by = 1, value = i, handler = function(h,...){
  i <<- svalue(h$obj)})
plotbutton <- gbutton('Plot', cont = group1, handler=function(h,...){
  fplot(i, data)})
graphicspane1 <- ggraphics(cont = group1)
like image 34
rnorberg Avatar answered Jan 11 '23 23:01

rnorberg


Not what you asked for (not tcltkrelated), but I would advise you to have a look at the new shiny package from RStudio.

like image 136
Romain Francois Avatar answered Jan 11 '23 22:01

Romain Francois