2012-05-09 16 views
6

मैं ggplot2 आसानी से उपयोग कर सकते हैं नीचे की तरह एक ग्राफ आकर्षित करने के लिए:ggplot2 ध्रुवीय भूखंड तीर

 
degree value 
1 120 0.50 
2 30 0.20 
3 -120 0.20 
4 60 0.50 
5 150 0.40 
6 -90 0.14 
7 -60 0.50 
8 0 0.60 

पहले कॉलम:

1

वास्तव में, अपने डेटा के लिए, यह नीचे की तरह है डिग्री (-180 से 180 या 0 से 360 तक) है, दूसरा कॉलम इसी मान है।

base <- ggplot(polar, aes(x=degree, y=value)) 
p <- base + coord_polar() 
p <- p + geom_segment(aes(x=0, y=0, xend=degree, yend=value),  arrow=arrow(length=unit(0.3,"cm"))) 
print(p) 
:

2 http://www.matrixlab-examples.com/image-files/polar_plots_1.gif

मैं अनुसरण कोड का उपयोग करने का प्रयास करें: तो मैं तीर के साथ लेकिन एक परिपत्र के साथ नीचे के रूप में समन्वय प्रत्येक अपने डेटा बात करने के लिए (0,0) से एक ग्राफ बिंदु आकर्षित करने के लिए चाहते हैं

यह एक ध्रुवीय साजिश का उत्पादन किया, लेकिन मुझे सीधे डेटा (0,0) से सीधे डेटा तीर नहीं मिला।

मैं इस ग्राफ को आकर्षित करने के लिए प्लॉट्रिक्स पैकेज का उपयोग करने का भी प्रयास करता हूं। यह नीचे की तरह काम करता है:

3 http://rgm2.lab.nig.ac.jp/RGM_results/plotrix:polar.plot/polar.plot_001_med.png

मैं इस ग्राफ में तीर आयात नहीं कर सकते।

प्लॉट्रिक्स पैकेज का उपयोग करके तीरों को जोड़ने के लिए, या ggplot2 के साथ इसे कैसे आकर्षित करें? (dput से)

+0

इस पोस्ट को देखें: http://stackoverflow.com/questions/42276773/ggplot-connecting-points-in-polar-coordinates-with-a-straight-line – Roland

उत्तर

12

डेटा सेट करें:

polar <- structure(list(degree = c(120L, 30L, -120L, 60L, 150L, -90L, 
-60L, 0L), value = c(0.5, 0.2, 0.2, 0.5, 0.4, 0.14, 0.5, 0.6)), .Names = c("degree", 
"value"), class = "data.frame", row.names = c(NA, -8L)) 

आप काफी आसानी से सीधी रेखाएं प्राप्त कर सकते हैं - तुम सिर्फ यकीन है कि अपने क्षेत्रों degree बजाय 0 पर शुरू करना है:

library(ggplot2) 
base <- ggplot(polar, aes(x=degree, y=value)) 
p <- base + coord_polar() 
p+ geom_segment(aes(y=0, xend=degree, yend=value)) 

enter image description here तीर जोड़ना, हालांकि, ऐसा लगता है कि एक बग (?) हो सकता है - तीर के कोण की गणना करने में समन्वय परिवर्तन को ध्यान में नहीं रखा जाता है:

library(grid) 
p+ geom_segment(aes(y=0, xend=degree, yend=value) , 
       arrow=arrow(length=unit(0.3,"cm"))) 

enter image description here आप (एक तरह से) अपनी खुद की तीर बनाकर इस के आसपास हैक कर सकते हैं:

awid <- 2 
p + geom_segment(aes(y=0, xend=degree, yend=value))+ 
    geom_segment(aes(y=value-0.05,yend=value,x=degree-awid/value,xend=degree))+ 
    geom_segment(aes(y=value-0.05,yend=value,x=degree+awid/value,xend=degree)) 

enter image description here

तुम करीब से देखो, तो आप उस तीर नहीं हैं देख सकते हैं पूरी तरह से सीधे (यदि आप awid बड़ा बनाते हैं तो प्रभाव अधिक स्पष्ट होता है)।

+0

बहुत बहुत धन्यवाद! मैं कई भयानक मूल्यों की कोशिश करता हूं। ऐसा लगता है कि awid = 0.5 2. – boyang

+0

PS से बहुत बेहतर है PS यह सुनिश्चित करने के लिए कि आपके पास पूर्ण धुरी रेंज प्राप्त हो, यह सुनिश्चित करने के लिए 'expand_limits (x = c (-180,180)) 'को शामिल करना एक अच्छा विचार होगा ... –

+1

पीएस यह वास्तव में expand_limits() के लिए काम करता है, लेकिन आप बेहतर दृश्य प्राप्त करने के लिए scale_x_continuous (सीमा = सी (-180, 180), ब्रेक = सी (-90, 0, 90, 180)) का उपयोग भी कर सकते हैं जो दिखाता है (0, 90, 180, -180) – boyang