मेरे पास एक समन्वय परिवर्तन का 2 डी मानचित्र है। प्रत्येक बिंदु पर डेटा मूल समन्वय प्रणाली में अक्षीय कोण है, जो 0 से 360 तक जाता है। मैं निरंतर कोण की साजिश रेखाओं के लिए pyplot.contour का उपयोग करने की कोशिश कर रहा हूं, उदा। 45 डिग्री दो ध्रुवों के बीच 45 डिग्री रेखा के साथ समोच्च दिखाई देता है, लेकिन समोच्च के लिए एक अतिरिक्त हिस्सा होता है जो 0/360 विघटन के साथ दो ध्रुवों को जोड़ता है। यह एक बहुत ही बदसूरत बदसूरत रेखा बनाता है क्योंकि यह मूल रूप से पिक्सेल को एक तरफ 0 के करीब एक नंबर के साथ और दूसरी तरफ 360 के करीब है।एक बंदरगाह के साथ एक समोच्च ड्राइंग से pyplot.contour रोकें
उदाहरण:
आप बाईं ओर नीले/लाल वक्र साथ अलगाव देख सकते हैं: यहाँ एक छवि पूर्ण रंग नक्शे का उपयोग कर रहा है। एक तरफ 360 डिग्री है, दूसरा 0 डिग्री है। जब आकृति की साजिश रचने, मैं मिलता है:
ध्यान दें कि सभी आकृति दो ध्रुवों कनेक्ट करते हैं, लेकिन फिर भी मैं 0 डिग्री समोच्च साजिश रची नहीं किया है, अन्य सभी आकृति (0 डिग्री अलगाव में आगे बढ़ने के वजह से pyplot सोचता है कि यह एक तरफ 0 है और दूसरी तरफ 360 है, तो इसमें अन्य सभी कोण होना चाहिए)।
import numpy as np
import matplotlib.pyplot as plt
jgal = np.array([[-0.054875539726,-0.873437108010,-0.483834985808],\
[0.494109453312,-0.444829589425, 0.746982251810],\
[-0.867666135858,-0.198076386122, 0.455983795705]])
def s2v3(rra, rdec, r):
pos0 = r * np.cos(rra) * np.cos(rdec)
pos1 = r * np.sin(rra) * np.cos(rdec)
pos2 = r * np.sin(rdec)
return np.array([pos0, pos1, pos2])
def v2s3(pos):
x = pos[0]
y = pos[1]
z = pos[2]
if np.isscalar(x): x, y, z = np.array([x]), np.array([y]), np.array([z])
rra = np.arctan2(y, x)
low = np.where(rra < 0.0)
high = np.where(rra > 2.0 * np.pi)
if len(low[0]): rra[low] = rra[low] + (2.0*np.pi)
if len(high[0]): rra[high] = rra[high] - (2.0*np.pi)
rxy = np.sqrt(x**2 + y**2)
rdec = np.arctan2(z, rxy)
r = np.sqrt(x**2 + y**2 + z**2)
if x.size == 1:
rra = rra[0]
rdec = rdec[0]
r = r[0]
return rra, rdec, r
def gal2fk5(gl, gb):
dgl = np.array(gl)
dgb = np.array(gb)
rgl = np.deg2rad(gl)
rgb = np.deg2rad(gb)
r = 1.0
pos = s2v3(rgl, rgb, r)
pos1 = np.dot(pos.transpose(), jgal).transpose()
rra, rdec, r = v2s3(pos1)
dra = np.rad2deg(rra)
ddec = np.rad2deg(rdec)
return dra, ddec
def make_coords(resolution=50):
width=9
height=6
px = width*resolution
py = height*resolution
coords = np.zeros((px,py,4))
for ix in range(0,px):
for iy in range(0,py):
l = 360.0/px*ix - 180.0
b = 180.0/py*iy - 90.0
dra, ddec = gal2fk5(l,b)
coords[ix,iy,0] = dra
coords[ix,iy,1] = ddec
coords[ix,iy,2] = l
coords[ix,iy,3] = b
return coords
coords = make_coords()
# now do one of these
#plt.imshow(coords[:,:,0],origin='lower') # color plot
#plt.contour(coords[:,:,0],levels=[45,90,135,180,225,270,315]) # contour plot with jagged ugliness
मैं या तो कैसे कर सकते हैं::
मेकअप अलगाव के साथ एक समोच्च ड्राइंग से
रोक pyplot.contour pyplot.contour पहचान
कोड इस डेटा का उत्पादन करने के कि कोण में 0/360 असंतुलन वास्तविक असंतोष नहीं है।
मैं सिर्फ अंतर्निहित डेटा के संकल्प को बढ़ा सकते हैं, लेकिन इससे पहले कि मैं एक अच्छा चिकनी लाइन प्राप्त यह एक बहुत लंबे समय और साजिश करने के लिए स्मृति का एक बहुत लेने के लिए शुरू होता है।
मैं भी 0 डिग्री के साथ एक समोच्च प्लॉट करना चाहता हूं, लेकिन अगर मैं समझ सकता हूं कि असंतोष को कैसे छिपाना है, तो मैं इसे किसी अन्य जगह पर कहीं और स्थानांतरित नहीं कर सकता। या, अगर मैं # 2 कर सकता हूं, तो यह कोई मुद्दा नहीं होगा।
यह मदद करेगा यदि आप समस्या प्लॉट की छवि पोस्ट कर सकते हैं, या कुछ उदाहरण कोड (सरलीकृत) संस्करण उत्पन्न करने के लिए कोड कर सकते हैं। – askewchan
मैंने समस्या को चित्रित करने के लिए उदाहरण प्लॉट्स को जोड़ा है – GJP
यह समोच्चों का अजीब उपयोग है और मुझे नहीं लगता कि आप इसे जिस तरह से चाहते हैं उसे काम करने में सक्षम होने जा रहे हैं। हालांकि, मुझे विश्वास है कि आप उस साजिश को प्राप्त कर सकते हैं जिसे आप समोच्च के अलावा कुछ और उपयोग करना चाहते हैं। 'Imshow' का उपयोग करके आप अपनी शीर्ष साजिश की तरह कुछ देंगे और' स्ट्रीमप्लॉट 'आपको अपनी निचली साजिश के करीब कुछ देगा। आप किस चीज के अंत में चाहते हैं उसके करीब कौन सा साजिश है? क्या आप एक ऐसा फ़ंक्शन प्रदान कर सकते हैं जो डेटा फ़ील्ड उत्पन्न करता है ताकि हमारे पास कुछ खेलने के लिए कुछ हो? – Paul