2016-08-27 1 views
0

1) Я использовал пакет gWidget, чтобы создать графический интерфейс в R. У меня были некоторые проблемы. Я хочу добавить кнопку «сохранить» в окне, но я не знаю, как сохранить рис, уже нарисованный в ggraphics.Как настроить кнопку «сохранить рисунок в формате pdf» в GUI

library("memoise") 
library("gWidgets2RGtk2") 
library("RGtk2") 
library("digest") 
library("gWidgets2") 
library("stats") 
options(guiToolkit="RGtk2") 
d<-0 

#the main window to make and some parts of it to make 
win <- gwindow("Load curve analysis", visible=TRUE,expand = TRUE) 
biggroup <- ggroup(horizontal = FALSE, container=win, expand = TRUE) 
topgroup<-ggroup(horizontal = TRUE, container=biggroup,expand = TRUE) 
bottomgroup<-ggroup(horizontal = TRUE, container=biggroup, expand = TRUE) 
leftgroup<-ggroup(horizontal = FALSE, container=bottomgroup,expand= TRUE) 
rightgroup<-ggroup(horizontal = FALSE, container=bottomgroup,expand=TRUE) 
add(rightgroup, ggraphics(), expand=TRUE) 

#draw a pic 
updatePlot <- function(h,...) { 
    if(d==1){ 
     if(svalue(Analyse1)=="Month duration curve") 
      plot(1:100,1:100,main="1") 

     if(svalue(Analyse1)=="Month load curve") 
      plot(1:100,1:100,main="2") 
    } 
    if(d==2){ 
     if(svalue(Analyse2)=="Jahresdauerlinie"){ 
      plot(1:100,1:100,main="3") 
     } 
    } 

} 
#the "save" button to make, this button will bring another window, 
#but after setting up the road of the saving place, this smaller window will be closed 
Store<-gbutton("Save as pdf",container=topgroup, handler = function(h,...){ 
    win1 <- gwindow("set up road", visible=TRUE,expand = TRUE) 
    group <- ggroup(horizontal = FALSE, container=win1, expand = TRUE) 
    tmp <- gframe("Pls type the place you want to save in", container=group) 
    obj0<-gedit("",cont=tmp,expand = TRUE) 
    tmp <- gframe("Pls name the new diagram, and end it with .pdf", container=group) 
    obj1<-gedit("Lastganganalyse.pdf",cont=tmp,expand = TRUE) 
    #here the function recordPlot will be used,but it doesnt work,the document cant be opened 
    ok<-gbutton("Ok",container=group, handler = function(h,...){ 
     p<-recordPlot() 
     # I dont know why this record Plot doesnt work 
     setwd(svalue(obj0)) 
     pdf(svalue(obj1)) 
     p 
     dev.off() 
     dispose(win1) 
    }) 

}) 

#the other parts of the main window 
tmp <- gframe("Year(after input a year pls press Enter)", container=leftgroup) 
#Jahren <- gradio(c(2012,2013,2014), horizontal=FALSE, cont=tmp, handler=updatePlot) 
Jahren<-gedit("2012",cont=tmp, handler=updatePlot) 
tmp <- gframe("Month", container=leftgroup) 
Monat <- gslider(from=1,to=12,by=1, value=1, cont=tmp, handler=updatePlot) 
tmp <- gframe("Analysis' way of a month", container=leftgroup) 
Analyse1 <- gcombobox(c(" ","Month duration curve","Month load curve"), cont=tmp, handler=function(h,...){ 
    d<<-1 
    updatePlot(h,...) 
},expand = TRUE) 
tmp <- gframe("Analysis' way of a year", container=leftgroup) 
Analyse2 <- gcombobox(c(" ","Jahresdauerlinie"),cont=tmp,handler=function(h,...){ 
    d<<-2 
    updatePlot(h,...)},expand = TRUE) 

The GUI I made

2) Кроме того, я не знаю, как настроить размер ggroup. Или как я могу контролировать все части размера окна, чтобы выглядеть лучше. Я не знаю эту функцию.

3) Линию, которая нарисована в ggraphics, трудно увидеть. И как я могу изменить эту ситуацию?

+0

Добро пожаловать на переполнение стека! Пожалуйста, предоставьте необходимый код/​​данные, чтобы воспроизвести вашу ситуацию. http://stackoverflow.com/help/mcve –

ответ

0

Предположим, что мы имели следующий участок в графике:

ggplot(dat = data.frame("x" = 1:100, "y" = rnorm(100)), aes(x = x, y = y)) + geom_point() 

внутри обработчика для кнопки, вы можете попробовать следующее:

setwd(svalue(obj0)) 
dev.copy2pdf(file = svalue(obj1)) 
+0

Спасибо! Я попытался использовать функцию recordPlot, но он не работает в моей программе, я не знаю почему. Теперь я придерживаюсь всей моей программы (кроме конкретного сюжетного сюжета). У тебя есть время, ты можешь мне помочь? Искренне Fangjing –

+0

Я не могу полностью запустить ваш код, потому что есть некоторые недостающие функции. Тем не менее, я зарисовал внутри виджета ggraphics и смог сохранить график, выполнив: 'setwd (svalue (obj0)); dev.copy2pdf (file = svalue (obj1)) '. Попробуйте это и дайте мне знать, если это сработает. – jav

+0

Спасибо! dev.copy2pdf (file = svalue (obj1)) не работает на моем компьютере, программа там останавливается. Я изменил функцию сюжета в описании этого вопроса, поэтому вы можете запустить его на своем компьютере. Спасибо за вашу помощь! –