2012-12-11 7 views
6

के भीतर ggplot2 का उपयोग करके मैं gwidgetsRGtk2 का उपयोग करके एक जीयूआई बना रहा हूं और मुझे एक gbutton के क्लिक पर एक ggplot दिखाई देने में परेशानी हो रही है। साजिश समारोह स्वयं ही काम करता है (यानी जब आप "plotData()" टाइप करते हैं), लेकिन मैं इसे gwidgets के साथ काम नहीं कर सकता। क्या gwidgets और ggplot2 के साथ कुछ संगतता समस्या है, या क्या मैं फ़ंक्शन को सही तरीके से कॉल नहीं कर रहा हूं? मैंने कोड को छोटा और सरल बनाने के लिए जीयूआई से बाकी सब कुछ छीन लिया है। यहां बताया गया है साजिश कैसा दिखना चाहिए:gwidgetsRGtk2

fake isotope data

library(ggplot2) 
library(gWidgets) 
library(gWidgetsRGtk2) 

require(gWidgets) 
options("guiToolkit"="RGtk2") 

X<-cbind(runif(120,min=-22,max=-17),runif(120,min=6,max=12)) 
MU<-matrix(c(-18.96,-15.86,-24.67,4.04,13.57,9.69),nrow=3,ncol=2) 
SIG<-matrix(c(0.6,0.77,0.85,0.85,0.55,0.90),nrow=3,ncol=2) 

plotData = function(h,...) 
{ 
C_err <- 0.3 
N_err <- 1.0 
df <- data.frame(x = X[,1], 
    y = X[,2], 
    ymin = X[,2] - N_err, 
    ymax = X[,2] + N_err, 
    xmin = X[,1] - C_err, 
    xmax = X[,1] + C_err) 

df_MU <- data.frame(x=MU[,1], y=MU[,2], 
    ymin = MU[,2] - SIG[,2], 
    ymax = MU[,2] + SIG[,2], 
    xmin = MU[,1] - SIG[,1], 
    xmax = MU[,1] + SIG[,1]) 

ggplot(data = df,aes(x = x,y = y)) + 
    geom_point() + 
    geom_errorbar(aes(ymin = ymin,ymax = ymax)) + 
    geom_errorbarh(aes(xmin = xmin,xmax = xmax)) + 
    geom_pointrange(data=df_MU,aes(ymin=ymin,ymax=ymax),colour=c('red','blue','green'),size=1) + 
    geom_errorbarh(data=df_MU,aes(xmin=xmin,xmax=xmax),colour=c('red','blue','green'),size=1,height=0) + 
    ggtitle("Isotope Data") + 
    ylab("d15N (%)") + 
    xlab("d13C (%)") + 
    theme_bw() 
} 

win<-gwindow() 
grp_all <- ggroup(container=win, horizontal=F) 
plot_button <- gbutton(
    text = "Plot data", 
    container = grp_all, 
    expand = TRUE, 
    handler = plotData 
) 
+0

आर स्टूडियो के साथ कुछ समस्या है। 'Ggplot (...)' to 'print (ggplot (...)) को बदलने के बाद 'मेरे लिए यह आरजीईई के साथ काम करता है लेकिन आर स्टूडियो के साथ नहीं। – Julius

+0

धन्यवाद, यह मेरे लिए अब काम करता है! मैं नोटपैड से कॉपी और पेस्ट कर रहा था, हालांकि आर स्टूडियो – bstock

+0

का उपयोग नहीं कर रहा है तो अब यह हल हो गया है? –

उत्तर

0

RGui का उपयोग कर जब आप अपने plotData समारोह में print(ggplot(...)) करने के लिए ggplot(...) बदलना चाहिए। हालांकि, आर स्टूडियो का उपयोग करते समय यह पर्याप्त नहीं है और आपको एक खाली रेखा भी टाइप करनी चाहिए, यानी 'प्लॉट डेटा' बटन पर क्लिक करने के बाद कंसोल में 'एंटर' दबाएं।