ম্যাটপ্লোটিলিব ব্যবহার করে একটি অনুভূমিক রেখা প্লট করুন


131

একটি সময় সিরিজ মসৃণ করতে আমি স্প্লাইন ইন্টারপোলেশন ব্যবহার করেছি এবং প্লটে একটি অনুভূমিক রেখা যুক্ত করতে চাই। তবে এমন একটি সমস্যা আছে যা আমার গ্রিপসের বাইরে of যে কোনও সহায়তা সত্যই সহায়ক হবে। আমার যা আছে তা এখানে:

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)]আপনাকে ফেলে দিচ্ছে । আপনি মূল এক্স-অক্ষ ভেরিয়েবলটি পুনরায় ব্যবহার করতে 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
এটি কাজ করে, তবে এটি বিশেষভাবে দক্ষ নয়, বিশেষ করে আপনি যেমন ডেটার উপর নির্ভর করে খুব বড় অ্যারে তৈরি করছেন। যদি আপনি এটি এভাবেই চালিয়ে যাচ্ছেন তবে দুটি ডেটা পয়েন্ট থাকা বুদ্ধিমান হতে হবে, একটি শুরুতে এবং একটি শেষে। তবুও, ম্যাটপ্লটলিবের ইতিমধ্যে অনুভূমিক রেখাগুলির জন্য একটি উত্সর্গীকৃত ফাংশন রয়েছে।
ব্লিভউইজেট

465

আপনি খুঁজছেন 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আপনি যখন রেখাটি আঁকতে চেয়েছিলেন তার নির্দিষ্ট এক্স রেঞ্জের প্রয়োজনের চেয়ে এটি অনেক বেশি সুবিধাজনক । 'অ্যাকলাইন' এবং '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

এখানে সর্বাধিক উত্সাহিত উত্তর ছাড়াও, কেউ 'র' র সাথে 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()

এলোমেলো ডাটা প্লট উদাহরণ

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.