Matplotlib का उपयोग करके एक क्षैतिज रेखा प्लॉट करें


131

मैंने टाइम सीरीज़ को सुचारू बनाने के लिए स्पलाइन इंटरपोलेशन का इस्तेमाल किया है और प्लॉट में एक क्षैतिज रेखा जोड़ना चाहूंगा। लेकिन वहाँ एक मुद्दा है कि मेरी पकड़ से बाहर है लगता है। कोई भी सहायता वास्तव में सहायक होगी। यही सब कुछ मेरे पास है:

annual = np.arange(1,21,1)
l = np.array(value_list) # a list with 20 values
spl = UnivariateSpline(annual,l)
xs = np.linspace(1,21,200)
plt.plot(xs,spl(xs),'b')

plt.plot([0,len(xs)],[40,40],'r--',lw=2)
pylab.ylim([0,200])
plt.show()

समस्या [0,len(xs)]क्षैतिज रेखा प्लॉटिंग के लिए मेरे उपयोग के साथ लगती है ।

जवाबों:


5

आप सही हैं, मुझे लगता है कि [0,len(xs)]आपको फेंक रहा है । आप मूल x- अक्ष चर का पुन: उपयोग करना चाहते हैं xsऔर उसी लंबाई के एक और सुव्यवस्थित सरणी के साथ प्लॉट कर सकते हैं जिसमें आपका चर है।

annual = np.arange(1,21,1)
l = np.array(value_list) # a list with 20 values
spl = UnivariateSpline(annual,l)
xs = np.linspace(1,21,200)
plt.plot(xs,spl(xs),'b')

#####horizontal line
horiz_line_data = np.array([40 for i in xrange(len(xs))])
plt.plot(xs, horiz_line_data, 'r--') 
###########plt.plot([0,len(xs)],[40,40],'r--',lw=2)
pylab.ylim([0,200])
plt.show()

उम्मीद है कि समस्या को ठीक करता है!


19
यह काम करता है, लेकिन यह विशेष रूप से कुशल नहीं है, खासकर जब आप डेटा के आधार पर संभावित रूप से बहुत बड़ी सरणी बना रहे हैं। यदि आप इसे इस तरह से करने जा रहे हैं, तो यह दो डेटा पॉइंट्स, एक शुरुआत में और एक अंत में अधिक स्मार्ट होगा। फिर भी, matplotlib में पहले से ही क्षैतिज रेखाओं के लिए एक समर्पित कार्य है।
ब्लिटवेटगेट

466

आप axhline(एक क्षैतिज अक्ष रेखा) खोज रहे हैं । उदाहरण के लिए, निम्नलिखित आपको एक क्षैतिज रेखा देगा y = 0.5:

import matplotlib.pyplot as plt
plt.axhline(y=0.5, color='r', linestyle='-')
plt.show()

नमूना आंकड़ा


15
डॉक्स: axhline
संभालें

1
डॉक्स लिंक के ऊपर काम नहीं कर रहा है - यहाँ लिंक को ठीक किया गया है: matplotlib.org/api/_as_gen/matplotlib.pyplot.axhline.html
Ender2050

31

यदि आप कुल्हाड़ियों में एक क्षैतिज रेखा खींचना चाहते हैं, तो आप ax.hlines()विधि भी आजमा सकते हैं । आप निर्दिष्ट करने की आवश्यकता yकी स्थिति और xminऔर xmaxडेटा में समन्वय (यानी, अपने वास्तविक डेटा x- अक्ष में लेकर)। एक नमूना कोड स्निपेट है:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(1, 21, 200)
y = np.exp(-x)

fig, ax = plt.subplots()
ax.plot(x, y)
ax.hlines(y=0.2, xmin=4, xmax=20, linewidth=2, color='r')

plt.show()

ऊपर का स्निपेट कुल्हाड़ियों में एक क्षैतिज रेखा पर होगा y=0.2। क्षैतिज रेखा शुरू होती है x=4और समाप्त होती है x=20। उत्पन्न छवि है:

यहाँ छवि विवरण दर्ज करें


axhlineजब आप ड्रॉ करने के लिए इच्छित लाइन की एक विशिष्ट x श्रेणी की आवश्यकता होती है तो यह बहुत अधिक सुविधाजनक होता है । 'Axhline' और 'hlines' में क्या अंतर है?
जेसन गोल

में axhline, xminऔर xmaxअक्षों के समन्वय के संदर्भ में हैं ताकि वे सीमा में हों [0, 1]। आप विभिन्न समन्वय प्रणालियों के बीच अंतर के लिए यहां देख सकते हैं ।
jdhao

धन्यवाद, अगर यह xminऔर xmaxअंतर केवल बीच का अंतर है axhlineऔर hlines, नहीं बाद हावी पूर्व है?
जेसन गोल

15

उपयोग करें matplotlib.pyplot.hlines:

  • y एकल स्थान के रूप में पारित किया जा सकता है: y=40
  • y कई स्थानों के रूप में पारित किया जा सकता है: y=[39, 40, 41]
  • यदि आप एक तरह कुछ के साथ एक आंकड़ा साजिश रचने कर रहे हैं fig, ax = plt.subplots(), तो की जगह plt.hlinesया plt.axhlineके साथ ax.hlinesया ax.axhline, क्रमशः।
  • matplotlib.pyplot.axhlineकेवल एक ही स्थान की साजिश कर सकते हैं (उदाहरण के लिए y=40)
import numpy as np
import matplotlib.pyplot as plt

xs = np.linspace(1, 21, 200)
plt.hlines(y=40, xmin=0, xmax=len(xs), colors='r', linestyles='--', lw=2)
plt.show()

यहाँ छवि विवरण दर्ज करें


12

यहाँ सबसे उत्तोलित उत्तर के अलावा, एक 's' पर axhlineकॉल plotकरने के बाद भी चेन कर सकता है ।pandasDataFrame

import pandas as pd

(pd.DataFrame([1, 2, 3])
   .plot(kind='bar', color='orange')
   .axhline(y=1.5));

यहाँ छवि विवरण दर्ज करें


2

उन लोगों के लिए एक अच्छा और आसान तरीका है जो हमेशा कमांड axhlineको भूल जाते हैं

plt.plot(x, [y]*len(x))

आपके मामले में xs = xऔर y = 40। यदि लेन (एक्स) बड़ी है, तो यह अक्षम हो जाता है और आपको वास्तव में उपयोग करना चाहिए axhline


2

आप plt.gridएक क्षैतिज रेखा खींचने के लिए उपयोग कर सकते हैं ।

import numpy as np
from matplotlib import pyplot as plt
from scipy.interpolate import UnivariateSpline
from matplotlib.ticker import LinearLocator

# your data here
annual = np.arange(1,21,1)
l = np.random.random(20)
spl = UnivariateSpline(annual,l)
xs = np.linspace(1,21,200)

# plot your data
plt.plot(xs,spl(xs),'b')

# horizental line?
ax = plt.axes()
# three ticks:
ax.yaxis.set_major_locator(LinearLocator(3))
# plot grids only on y axis on major locations
plt.grid(True, which='major', axis='y')

# show
plt.show()

यादृच्छिक डेटा साजिश उदाहरण

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.