2013-06-01 9 views
7

में तीर सिर मिलान आकार (या lwd) बनाना ggplot में तीरों को आकर्षित करने के लिए, मैं geom_segment और तीर = तीर() का उपयोग करता हूं। मुझे तीर का आकार आकार सेगमेंट चौड़ाई (या आकार) से मेल खाना चाहिए। हालांकि, तीर ggplot में डेटा तर्क से सीधे चर को पहचान नहीं करता है और किसी को $ ऑपरेटर का उपयोग करके चर युक्त डेटा.फ्रेम निर्दिष्ट करना होगा। इससे लाइन की साजिश के लिए उपयोग किए जाने वाले मूल्यों और तीर सिर की साजिश के लिए उपयोग किए जाने वाले मूल्यों के बीच एक विसंगति होती है (सबसे बड़ा तीर सिर सबसे पतला सेगमेंट पर हो सकता है)।ggplot2

उदाहरण:

d <- structure(list(Process = structure(c(2L, 1L, 1L, 1L, 2L, 2L, 
1L, 1L, 2L, 1L, 2L), .Label = c("First", "Second"), class = "factor"), 
x.sink = c(1, 3, 1, 2, 2, 3, 3, 2, 2, 2, 2), y.sink = c(1, 
1, 1, 2, 2, 1, 1, 1, 1, 2, 2), x.source = c(2, 2, 2, 2, 2, 
2, 2, 1, 1, 1, 3), y.source = c(2, 2, 2, 1, 1, 1, 1, 1, 1, 
2, 1), offset = c(1, 1, 1, -1, -1, -1, -1, -1, -1, 1, -1), 
Std.Flux = c(0.179487179487179, 0.170940170940171, 0.944444444444444, 
0.0854700854700855, 0.726495726495726, 0.128205128205128, 
0.213675213675214, 0.213675213675214, 0.128205128205128, 
0.106837606837607, 1)), .Names = c("Process", "x.sink", "y.sink", 
"x.source", "y.source", "offset", "Std.Flux"), class = "data.frame", row.names = c(NA, 
-11L)) 


p <- qplot(data=d, 
      #alpha=I(0.4), 
      colour=Process, 
      size=Std.Flux, 
      xlim=c(0,4), 
      ylim=c(0,3), 
      x=x.source+as.numeric(Process)/10, 
      y=y.source+as.numeric(Process)/10, 
      xend=x.sink+as.numeric(Process)/10, 
      yend=y.sink+as.numeric(Process)/10, 
      geom="segment", 
      arrow = arrow(type="closed", 
         length = unit(d$Std.Flux,"cm"))) 
print(p) 

Disjunct arrow heads

कोई सुझाव?

+2

मुझे लगता है यह एक निरीक्षण है; github – baptiste

उत्तर

0

यहाँ एक तरीका है:

require(ggplot2) 

df <- mtcars 

arrow_pos <- data.frame(y = 250) 

ggplot(df, aes(x=factor(cyl), y=mpg)) + 
    geom_bar(width = .4, stat="identity", fill="darkblue") + 
    geom_segment(data=arrow_pos, 
       aes(x=1.526, xend=1.01, y=y + 90.02, yend=y + 0.25), 
       arrow=arrow(length=unit(4.2, "mm")), lwd=2, 
       color="black") + 
    geom_segment(data=arrow_pos, 
       aes(x=1.525, xend=1.01, y=y + 90, yend=y + 0.25), 
       arrow=arrow(length=unit(4, "mm")), lwd=1, 
       color="gold2") + 
    annotate("text", x=2.39, y=360, 
      label='This arrow points to the highest MPG.') + 
    scale_y_continuous(limits = c(0,400)) + 
    xlab('CYL') + ylab('MPG') 

आउटपुट:

enter image description here

+0

@Etienne Low-Décarie पर एक फीचर अनुरोध पोस्ट करने के लायक - हाय, क्या आप अभी भी इस प्रश्न का उत्तर ढूंढ रहे हैं या इसे हल किया गया है? यदि यह आपके प्रश्न का उत्तर देता है, तो कृपया इसे समुदाय के बारे में जानने के लिए समाधान के रूप में चुनें, जिसे हल किया गया है और दूसरों को उनके उत्तर को और भी तेज़ी से ढूंढने में सहायता करने के लिए। धन्यवाद। – www

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