2016-10-24 13 views
8

इस साजिश डेटा mtcars और समारोह coord_flipggplot2 में किंवदंती प्रतीकों को घुमाने के लिए कैसे?

library(ggplot2) 
library(Hmisc) 

ggplot(mtcars,aes(x=gear,y=cyl)) + stat_summary(aes(color=as.factor(rep(1:2,16))), 
fun.data=mean_cl_boot, position=position_dodge(0.4)) + coord_flip() 

enter image description here

तथ्य यह है कि त्रुटि सलाखों कथा में ग्राफ पर क्षैतिज लेकिन खड़ी कर रहे हैं मुझे परेशान :) मैं कैसे घुमा सकते हैं का उपयोग कर उदाहरण के लिए विचार करें ये प्रतीक?

+0

गिटहब मुद्दे उठाएं और हैडली को एक और इंटर्न मिलने तक प्रतीक्षा करें। बेहतर, एक पुल अनुरोध लिखें। – alistaire

+2

शायद उपयोगी http://stackoverflow.com/questions/35703983/how-to-change-angle-of-line-in-customized-legend-in-ggplot2 – user20650

उत्तर

3

मैं ऐसे उत्तर के साथ नहीं आ रहा हूं जो सामान्य ggplot2 वर्कफ़्लो के भीतर काम करता है, इसलिए अभी, यहां एक हैकी जवाब है। stat_summary किंवदंती को बंद करें। फिर, उस डेटा के साथ पॉइंट और लाइन जियोम्स जोड़ें जो वास्तविक डेटा की सीमा से बाहर है जिसे आप प्लॉट करना चाहते हैं। यह उस बिंदु और क्षैतिज रेखा कथा को बनाएगा जो आप चाहते हैं। फिर प्लॉट अक्ष सीमाएं केवल अपने वास्तविक डेटा की सीमा को शामिल करने के लिए सेट करें, ताकि नकली डेटा बिंदु दिखाई न दें।

ggplot(mtcars, aes(x=gear, y=cyl, color=as.factor(rep(1:2,16)))) + 
    stat_summary(fun.data=mean_cl_boot, position=position_dodge(0.4), show.legend=FALSE) + 
    geom_line(aes(y=cyl-100)) + 
    geom_point(aes(y=cyl-100), size=2.5) + 
    coord_flip(ylim=range(mtcars$cyl)) 

enter image description here

एक अन्य विकल्प ग्रिड कार्यों का उपयोग कर 90 डिग्री से कथा-कुंजी grobs को घुमाने के लिए होगा, लेकिन मैं कोई है जो grid के साथ और अधिक कुशल से मैं कर रहा हूँ है के लिए है कि छोड़ देंगे।

5

कथा कुंजी परिवर्तित करें

GeomPointrange$draw_key <- function (data, params, size)  { 

     draw_key_vpath <- function (data, params, size) { 
      # only need to change the x&y coords so that the line is horizontal 
      # originally, the vertical line was `0.5, 0.1, 0.5, 0.9` 
       segmentsGrob(0.1, 0.5, 0.9, 0.5, 
       gp = gpar(col = alpha(data$colour, data$alpha), 
       lwd = data$size * .pt, lty = data$linetype, 
       lineend = "butt"), arrow = params$arrow) 
       } 

    grobTree(draw_key_vpath(data, params, size), 
      draw_key_point(transform(data, size = data$size * 4), params)) 
} 

फिर साजिश

ggplot(mtcars,aes(x=gear,y=cyl)) + 
    stat_summary(aes(color=as.factor(rep(1:2,16))), 
        fun.data=mean_cl_boot, position=position_dodge(0.4)) + 
    coord_flip() 
2

@ eipi10 के सुझाव grid कार्यों का उपयोग करने के लिए grobs संपादित करने के लिए ऊपर के बाद - प्रासंगिक grobs खंड नहीं है। दो संभावनाएं हैं: 1) सेगमेंट ग्रब्स घुमाएं; या 2) सेगमेंट ग्रब्स के एंडपॉइंट्स के एक्स और वाई निर्देशांक संपादित करें।

library(ggplot2) 
library(Hmisc) 

library(grid) 

p = ggplot(mtcars,aes(x=gear,y=cyl)) + 
    stat_summary(aes(color=as.factor(rep(1:2,16))), 
        fun.data=mean_cl_boot, position=position_dodge(0.4)) + 
    coord_flip() 

g = ggplotGrob(p) 

# Get names of segment grobs 
grid.ls(grid.force(g))$name # "GRID.segments" 

# Check the structure of the segment grobs 
str(getGrob(grid.force(g), gPath("GRID.segments"), grep = TRUE, global = TRUE)) 

# Edit the segment grobs using the editGrob() function 
# 1) Rotate the segments 
    g <- editGrob(grid.force(g), gPath("GRID.segments"), grep = TRUE, global = TRUE, 
     vp = viewport(angle = 90)) 

# 2) set end points of segments 
# g <- editGrob(grid.force(g), gPath("GRID.segments"), grep = TRUE, global = TRUE, 
#   x0 = unit(0.1, "npc"), y0 = unit(0.5, "npc"), x1 = unit(0.9, "npc"), y1 = unit(0.5, "npc")) 

# Draw it 
grid.newpage() 
grid.draw(g) 
संबंधित मुद्दे