2016-06-10 7 views
6

में अभिव्यक्ति प्रदर्शित करने वाला ggplot नीचे, मेरे पास आर कोड है जो समूहबद्ध बार प्लॉट प्लॉट करता है।एक्स अक्ष

group_name = c('A_1x', 'A_1x', 'A_2x', 'A_2x', 'A_3x', 'A_3x', 'A_4x', 'A_4x') 

mydata2 <- data.frame(mygroup = group_name, 
         mysubgroup = factor(c("Yes", "No"), 
              levels = c("Yes", "No")), 
         value = c(60,40,90,10,55,45,88,12)) 


ggplot(mydata2, aes(mygroup, value, fill = mysubgroup)) + 
    geom_bar(position = "dodge", width = 0.5, stat = "identity")+ 
    coord_flip() 

वर्तमान में, साजिश नीचे की तरह दिखता है। हालांकि, मैं नीचे की तस्वीर में दिखाए गए एक्स अक्ष में अभिव्यक्ति दिखाना चाहता हूं।

enter image description here

मैं इस की कोशिश की है:

group_name = c(expression(A[1*x]),expression(A[1*x]), 
       expression(A[2*x]),expression(A[2*x]), 
       expression(A[3*x]),expression(A[3*x]), 
       expression(A[4*x]),expression(A[4*x])) 

लेकिन यह निम्न त्रुटि देता है:

Error in as.data.frame.default(x[[i]], optional = TRUE) : 
    cannot coerce class ""expression"" to a data.frame 

इसे कैसे ठीक करें?

उत्तर

4

यहां एक कामकाजी उदाहरण है - मैंने group_name को 8 के बजाय 4 तत्वों में बदल दिया और मैन्युअल रूप से उन्हें ggplot अभिव्यक्ति में जोड़ा। मुद्दा यह था कि अभिव्यक्ति प्रकार data.frame के लिए कॉलम नाम नहीं हो सकता है। यह उस मुद्दे से बच निकलता है।

library(ggplot2) 
group_name = c('A_1x', 'A_1x', 'A_2x', 'A_2x', 'A_3x', 'A_3x', 'A_4x', 'A_4x') 
mydata2 <- data.frame(mygroup = group_name, 
         mysubgroup = factor(c("Yes", "No"), 
              levels = c("Yes", "No")), 
         value = c(60,40,90,10,55,45,88,12)) 

group_name = c(expression(A[1*x]), 
       expression(A[2*x]), 
       expression(A[3*x]), 
       expression(A[4*x])) 

ggplot(mydata2, aes(mygroup, value, fill = mysubgroup)) + 
    geom_bar(position = "dodge", width = 0.5, stat = "identity")+ 
    coord_flip() + 
    scale_x_discrete(labels=group_name) # Adding the labels here 
+1

यह मुझे लग रहा था कि एक नहीं बल्कि स्पष्ट रूप से हर एक को बाहर टाइप करने के लिए की तुलना में भाव का एक वेक्टर बनाने में सक्षम होना चाहिए। यह सबसे अच्छा है जिसके साथ मैं सहवास कर सकता हूं, लेकिन शायद एक और अधिक सुरुचिपूर्ण विधि है: 'scale_x_discrete (लेबल = sapply (paste0 ("ए [", 1: 4, "* x]"), फ़ंक्शन (i) पार्स (टेक्स्ट = मैं))) ' – eipi10

2

labels एक समारोह हो सकता है,

group_name = sprintf("A[%i*x]", rep(1:4,each=2)) 

# alternatively, use gsub with your original vector 
# group_name = c('A_1x', 'A_1x', 'A_2x', 'A_2x', 'A_3x', 'A_3x', 'A_4x', 'A_4x') 
# gsub("A_([0-9])x","A[\\1*x]", group_name) 

mydata2 <- data.frame(mygroup = group_name, 
         mysubgroup = factor(c("Yes", "No"), 
              levels = c("Yes", "No")), 
         value = c(60,40,90,10,55,45,88,12)) 


ggplot(mydata2, aes(mygroup, value, fill = mysubgroup)) + 
    geom_bar(position = "dodge", width = 0.5, stat = "identity")+ 
    coord_flip() + scale_x_discrete(labels = function(l) parse(text=l)) 

enter image description here

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