2012-08-07 21 views
5

मेरे पास निम्न डेटासेट है।एक ऐसा फ़ंक्शन बनाएं जो साजिश खींचें और इसे सहेजें

structure(list(Rf = c(60.105, 62.205, 64.305, 64.305, 66.405, 
66.405), Es = c(0, -0.07, -0.36, -0.47, -0.39, -1.54), H = c(32.3, 
-6.9, -5.59, -14.4, -6.5, -21), S = c(267, 136, 151, 114, 143, 
90.4), G = c(-46.8, -47.3, -50.7, -48.5, -49, -47.8)), .Names = c("Rf", 
"Es", "H", "S", "G"), class = "data.frame", row.names = c("Me", 
"Et", "Pr", "iPr", "Bu", "tBu")) 

मुझे आरएफ बनाम एच, एस और जी, और एएस कॉलम के लिए प्लॉट करने की आवश्यकता है। कुल में छह भूखंड हैं।

ggplot(data=df, aes(x=Rf, y=H, label=row.names(df))) + 
    geom_point(size=4) + 
    geom_text(vjust=2) + 
    ylab(expression(list(Delta*H^o,~kJ/mol))) + 
    xlab("Molecular refraction") + 
    ylim((min(df$H) - 0.2*(abs(min(df$H)))), max(df$H)) + 
    opts(axis.line = theme_segment(size=1), 
     axis.text.x = theme_text(colour="black", size=15), 
     axis.text.y = theme_text(colour="black", size=15), 
     axis.title.x = theme_text(colour="black", size=15), 
     axis.title.y = theme_text(colour="black", size=15, angle=90), 
     panel.background=theme_rect(colour="white"), 
     panel.grid.minor = theme_blank(), 
     panel.grid.major = theme_blank()) 

enter image description here

मैं की तरह

f1 <- function(x.label, y.label, df, xtitle, filename) { 
    g <- ggplot(data=df, aes(x=x.label, y=y.label, label=row.names(df))) + 
    geom_point(size=4) + 
    geom_text(vjust=2) + 
    ylab(expression(list(Delta*y.label^o,~kJ/mol))) + 
    xlab(xtitle) + 
    ylim((min(df[,y.label]) - 0.2*(abs(min(df[,y.label])))), max(df[,y.label])) + 
    opts(axis.line = theme_segment(size=1), 
     axis.text.x = theme_text(colour="black", size=15), 
     axis.text.y = theme_text(colour="black", size=15), 
     axis.title.x = theme_text(colour="black", size=15), 
     axis.title.y = theme_text(colour="black", size=15, angle=90), 
     panel.background=theme_rect(colour="white"), 
     panel.grid.minor = theme_blank(), 
     panel.grid.major = theme_blank()) 
    ggsave(filename, g) 
} 

की तरह एक समारोह बनाने के लिए ऊपर के उदाहरण के लिए यह कॉल करने के लिए

हैं:

ही प्लॉट मैं निम्नलिखित समारोह का उपयोग करने के लिए आकर्षित

f1(Rf, H, df, "Molecular refraction", "D:/temp/1.jpg") 

कठिनाई यह है कि x.label और y.label को स्थानांतरित करने और सही तरीके से कैसे संभालना है, क्योंकि ggplot, ylab(expression()) और ylim कॉल के विकल्प का उपयोग किया जाता है। का वर्तमान समारोह एक त्रुटि लौट Error in eval(expr, envir, enclos) : object 'x.label' not found

उत्तर:

निम्नलिखित समारोह सही ढंग से काम करता है। aes_stringggplot विकल्प में expression के बजाय ylab में aes का उपयोग किया जाना चाहिए।

f1 <- function(x.label, y.label, df, x.title, filename) { 
    g <- ggplot(data=df, aes_string(x=x.label, y=y.label)) + 
    geom_point(size=4) + 
    geom_text(aes(label=row.names(df)), vjust=2) + 
    ylab(substitute(list(Delta*y.label^o,~kJ/mol), list(y.label=y.label))) + 
    xlab(x.title) + 
    ylim((min(df[,y.label]) - 0.2*(abs(min(df[,y.label])))), max(df[,y.label])) + 
    opts(axis.line = theme_segment(size=1), 
     axis.text.x = theme_text(colour="black", size=15), 
     axis.text.y = theme_text(colour="black", size=15), 
     axis.title.x = theme_text(colour="black", size=15), 
     axis.title.y = theme_text(colour="black", size=15, angle=90), 
     panel.background = theme_rect(colour="white"), 
     panel.grid.minor = theme_blank(), 
     panel.grid.major = theme_blank()) 
    ggsave(filename=filename, plot=g) 
} 

उत्तर

3

यदि आप एक चरित्र (या स्ट्रिंग), यानी "Rf", आप aes_string उपयोग कर सकते हैं सौंदर्यशास्त्र मैप करने के लिए के रूप में इनपुट x.label:

aes_string(x = x.label, etc) 

subsetting data.frame तो भी आसान हो जाता है:

df[[x.label]] 

ylab के लिए अभिव्यक्ति के लिए आपको parse और/याका उपयोग करने की आवश्यकता हो सकती है, लेकिन मुझे अभी आर तक पहुंच नहीं मिली है और मैं जांचने में असमर्थ हूं।

+0

'aes_string' काम करना चाहिए, लेकिन जब मैं' aes' को 'aes_string' में बदलता हूं तो ऐसा लगता है कि 'लेबल' विकल्प ठीक से काम नहीं करता है, क्योंकि फ़ंक्शन एक त्रुटि देता है: 'eval (expr, envir, enclos): ऑब्जेक्ट' मुझे नहीं मिला '। 'Eval' और' parse' फ़ंक्शंस का उपयोग करने के सुझाव के लिए धन्यवाद, मैं उनका उपयोग करने की कोशिश करूंगा। – DrDom

संबंधित मुद्दे