2012-10-17 8 views
8

मैं matplotlib में एक पंक्ति प्लॉट करने के लिए कोशिश कर रहा हूँ के साथ numpy/scipy/matplotlib के साथ लाइन (बहुभुज श्रृंखला) प्लॉट करने के लिए कैसे .. मैं चाहता हूँ इस.. मैं प्रक्षेप का सही प्रकार के लिए तलाश कर रहा हूँ कम से कम चौरसाई

की तरह कुछ

taken from canvasxpress.org/line.html

जहां हर पंक्ति सुस्त हो जाती है। मैं

x_new = np.arange(x, x_length, 1) 
tck = interpolate.splrep(x, y, s=3) 
y_new = interpolate.splev(x_new, tck, der=0) 
ax.plot(x_new, y_new, color+lstyle) 

के रूप में scipy और matplotlib के कई संयोजन की कोशिश की, इस तरह के, लेकिन सबसे अच्छा परिणाम मिलता है मैं

my result

लाइन एक बढ़ती हुई चर का प्रतिनिधित्व करता है .. इसलिए यह एक गलत प्रतिनिधित्व है । मेरे द्वारा किस चीज की खोज की जा सकती है?

धन्यवाद

संपादित करें: निम्नलिखित

take x and y 
calculate spline for each three points 
x[0], x[1], x[2] ... x[1], x[2], x[3] ... and so on 
for each y[n] sums every computation done for it and divide by number of 
computations (i.e. y[1] is computed for triplette x[0..2] and x[1..3] so the 
sum is divided by two (average for each point is taken as its value) 
+0

तुम क्यों interpolating कर रहे हैं? क्या यह सौंदर्यशास्त्र के लिए है या आप अपने डेटा बिंदुओं के बीच मूल्यों को जानने का दावा कर रहे हैं? – tacaswell

+0

@tcaswell मैं मुख्य रूप से सौंदर्यशास्त्र के लिए दोनों कारणों से इंटरपोलिंग कर रहा हूं – gc5

उत्तर

8

उस प्रकार के ग्राफ के लिए, आप monotonic इंटरपोलेशन चाहते हैं। PchipInterpolator कक्षा (जिसे आप अपने छोटे उर्फ ​​pchip द्वारा संदर्भित कर सकते हैं) में।अंतर्वेशन इस्तेमाल किया जा सकता:

import numpy as np 
from scipy.interpolate import pchip 
import matplotlib.pyplot as plt 


# Data to be interpolated. 
x = np.arange(10.0) 
y = np.array([5.0, 10.0, 20.0, 15.0, 13.0, 22.0, 20.0, 15.0, 12.0, 16.0]) 

# Create the interpolator. 
interp = pchip(x, y) 

# Dense x for the smooth curve. 
xx = np.linspace(0, 9.0, 101) 

# Plot it all. 
plt.plot(xx, interp(xx)) 
plt.plot(x, y, 'bo') 
plt.ylim(0, 25) 
plt.grid(True) 
plt.show() 

परिणाम:

enter image description here

+1

यह वही था जो मैं खोज रहा था :) धन्यवाद – gc5

1

समस्या यह है मैं अपने आप को एक से विधि लागू करने के बारे में सोच रहा हूँ, लेकिन मैं अगर यह पहले से ही किया गया है पता नहीं है .. छद्म कोड है एक प्रदर्शन समस्या नहीं है। यह एक इंटरपोलेशन समस्या है। आप स्पलीन कार्यों का उपयोग कर interpolating कर रहे हैं। सही इंटरपोलेशन विधि चुनना आपके पास मौजूद डेटा के प्रकार के आधार पर बहुत अधिक है। आप एक इंटरपोलेशन फ़ंक्शन होने की अपेक्षा नहीं कर सकते हैं जो हर परिस्थिति में सही व्यवहार करेगा (इंटरपोलेशन के पास यह जानने का कोई तरीका नहीं है कि आपका फ़ंक्शन बढ़ रहा है)।

+0

'scipy.interpolate.interp1d()' जैसे पैरामीटर को टाइप करने के लिए, एक पैरामीटर 'प्रकार' को ट्यून करने तक, – gg349

+0

धन्यवाद, मैं इसे आज़माउंगा। @ निकोलस हां मैं गलत था .. मैं इस पोस्ट के शीर्षक और सामग्री को बदलकर – gc5

+0

@flebool मैंने सभी संभावित मूल्यों को दयालु करने की कोशिश की लेकिन मुझे कोई संतुष्ट नहीं किया .. :( – gc5

1

आप या तो

scipy.interpolate.LSQUnivariateSpline पर गौर करना चाहिए और कश्मीर पैरामीटर के साथ खेलते हैं (पट्टी की डिग्री)

या scipy.interpolate.UnivariateSpline और कश्मीर और एस पैरामीटर के साथ खेलते हैं।

+0

मैंने कोशिश की लेकिन यह वह नहीं था जो मैं देख रहा था के लिए। वैसे भी मैंने आपका जवाब उखाड़ फेंक दिया क्योंकि यह उपयोगी और आपके समय के लिए उपयोगी हो सकता है। धन्यवाद :) – gc5

1

यह समझना महत्वपूर्ण है कि इंटरपोलेशन विज़ुअलाइज़ेशन के लिए केवल एक पंक्ति नहीं है। यह एक गणितीय मॉडल है जो आपको लगता है कि सिस्टम कैसा व्यवहार करता है (वह सिस्टम जो आपके द्वारा मापा गया डेटा उत्पन्न करता है)। विभिन्न प्रकार के इंटरपोलेशन सिस्टम के बारे में अलग-अलग धारणाओं का प्रतिनिधित्व करते हैं।

तो, यदि आप जानते हैं कि आपका सिस्टम ऐसा है कि एक चर केवल बढ़ सकता है, तो आपको उचित मॉडल (यानी उपयुक्त इंटरपोलेशन का उपयोग करना चाहिए) फिट करना चाहिए। अपने डेटा को देखते हुए, यह दूसरी डिग्री बहुपद की तरह दिखता है या एक घातीय कार्य अच्छी तरह से फिट हो सकता है। एक लोस (स्थानीय प्रतिगमन) फिट भी काम करेगा। आप numpy.polyfit(), या scipy.optimize.curve_fit() के साथ जेनेरिक वक्र फिटिंग जैसे अनुरूप कार्यों का उपयोग कर सकते हैं। यदि आपके पास सिस्टम के बारे में और जानकारी है, तो आपको इसका चयन करने के लिए इसका उपयोग करना चाहिए कि कौन सा मॉडल फिट हो।

+0

मुझे पता है .. मैं इंटरपोलेशन में थोड़ा सा वैज्ञानिक हूं, क्षमा करें। मैंने बहुपद फिटिंग की कोशिश की लेकिन यह वह नहीं था जिसे मैं खोज रहा था। वैसे भी मैंने आपको अपने समय के लिए उखाड़ फेंक दिया। धन्यवाद :) – gc5

1

मैंने थोड़ा सा देखा है। क्या आप चाहते हैं

एक लय घन प्रक्षेप कहा जाता है,

विकिपीडिया here देखते हैं। आपके पास here के बारे में गणित पर चर्चा है और मुझे पाइथन here में एक कार्यान्वयन मिला है। अगर यह कार्यशील है, तो मुझे बताएं!

+0

मैंने आपके समाधान की कोशिश की है और यह काम करता है लेकिन scipy.interpolate में एक समान कार्य है .. वैसे भी मैंने आपके प्रयास के लिए अपना जवाब उड़ाया :) धन्यवाद – gc5

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