ম্যাটপ্লোটিলেব প্রদত্ত প্লটে লম্বালম্বী রেখাগুলি কীভাবে আঁকবেন?


259

সময় উপস্থাপনে সিগন্যালের একটি প্লট দেওয়া হয়েছে, কীভাবে সম্পর্কিত সময় সূচক চিহ্নিত করে লাইন আঁকবেন?

বিশেষত, 0 থেকে 2.6 (গুলি) অবধি টাইম সূচক সহ একটি সংকেত প্লট দেওয়া হয়েছে, আমি তালিকার সাথে সম্পর্কিত সময় সূচকটি নির্দেশ করে উল্লম্ব লাল রেখা আঁকতে চাই, আমি [0.22058956, 0.33088437, 2.20589566]কীভাবে এটি করতে পারি?

উত্তর:


423

উল্লম্ব রেখাগুলি যুক্ত করার মানক উপায় যা আপনার আসল উচ্চতাটি নির্দিষ্ট করে না দিয়ে আপনার পুরো প্লট উইন্ডোটি coverেকে দেবে plt.axvline

import matplotlib.pyplot as plt

plt.axvline(x=0.22058956)
plt.axvline(x=0.33088437)
plt.axvline(x=2.20589566)

অথবা

xcoords = [0.22058956, 0.33088437, 2.20589566]
for xc in xcoords:
    plt.axvline(x=xc)

আপনি অন্যান্য চক্রান্ত কমান্ড জন্য উপলব্ধ কীওয়ার্ড অনেক ব্যবহার করতে পারেন (যেমন color, linestyle, linewidth...)। আপনি কীওয়ার্ড আর্গুমেন্টে পাস করতে পারেন yminএবং ymaxআপনি যদি অক্ষের কর্ডিনেটে পছন্দ করেন (যেমন ymin=0.25, ymax=0.75প্লটের মাঝামাঝি অংশটি coverেকে দেবে)। অনুভূমিক রেখা ( axhline) এবং আয়তক্ষেত্রগুলি ( axvspan) এর জন্য সংশ্লিষ্ট ফাংশন রয়েছে ।


7
তবে আমি কোনও প্রদত্ত অক্ষের অবজেক্টে লাইনটি কীভাবে প্লট করব?
এরিক

8
@ এরিক যদি axবস্তু হয় তবে ax.axvline(x=0.220589956)আমার পক্ষে কাজ করবে বলে মনে হচ্ছে।
জোয়েল

Axvline জন্য আর্গুমেন্ট 0 থেকে 1 থেকে স্কালে, চক্রান্ত উইন্ডোতে আপেক্ষিক। আপনি কোনও প্রদত্ত x বা y অবস্থানে যেমন একটি লাইন আঁকেন, যেমন 2.205 ... যা এই প্রশ্নটিতে জিজ্ঞাসা করা হয়েছিল?
এডওয়ার্ড নেড হার্ভে

দেখে মনে হচ্ছে স্ট্যাকওভারফ্লো . com/ প্রশ্নগুলি/ 16930328/… এর একটি উত্তর আছে। plt.plot((x1,x2),(y1,y2))
এডওয়ার্ড নেড হার্ভে

1
দয়া করে মনে রাখবেন, ইয়াম্যাক্স এবং ইয়ামিন 0 এবং 1, 0 এর মধ্যে হওয়া উচিত প্লটের নীচে, 1 প্লটের শীর্ষে। আপনি যদি এই সীমার বাইরে মানগুলি ব্যবহার করে থাকেন তবে আপনাকে সঠিক অনুপাতের সাথে y অবস্থানগুলি অনুবাদ করতে হবে।
ডিলান ক্যাপ

50

একাধিক লাইনের জন্য

xposition = [0.3, 0.4, 0.45]
for xc in xposition:
    plt.axvline(x=xc, color='k', linestyle='--')

1
কিভাবে আমরা উল্লম্ব লাইনে একটি কিংবদন্তি রাখি?
চার্লি পার্কার

@ চারলিপার্কার একটি পৃথক প্রশ্ন জিজ্ঞাসা করুন। ম্যাটপ্ল্লিটিব ডকুমেন্টেশনের এই অংশটি আপনাকে সাহায্য করতে পারে
সিপ্রিয়ান টোমাইগা

@ চর্লিপার্কার একটি অতিরিক্ত বিকল্প label='label'কাজ করে তবে আপনাকে plt.legend([options])পরে কল করতে হবে
kon psych

29

যদি কেউ একটি legendএবং / অথবা colorsকিছু উল্লম্ব লাইনে যোগ করতে চায় তবে এটি ব্যবহার করুন:


import matplotlib.pyplot as plt

# x coordinates for the lines
xcoords = [0.1, 0.3, 0.5]
# colors for the lines
colors = ['r','k','b']

for xc,c in zip(xcoords,colors):
    plt.axvline(x=xc, label='line at x = {}'.format(xc), c=c)

plt.legend()
plt.show()

ফলাফল:

আমার আশ্চর্যজনক প্লট seralouk


27

লুপে অ্যাক্ল্যাভলাইন কল করা, যেমন অন্যেরা পরামর্শ দিয়েছে, কাজ করে, তবে অসুবিধে হতে পারে কারণ

  1. প্রতিটি লাইন একটি পৃথক প্লট অবজেক্ট, যা আপনার যখন অনেকগুলি লাইন থাকে তখন জিনিসগুলি খুব ধীর হয়।
  2. আপনি যখন কিংবদন্তি তৈরি করেন প্রতিটি লাইনে একটি নতুন প্রবেশ থাকে যা আপনি যা চান তা নাও হতে পারে।

পরিবর্তে আপনি নিম্নলিখিত সুবিধামূলক ফাংশনগুলি ব্যবহার করতে পারেন যা একক প্লট অবজেক্ট হিসাবে সমস্ত লাইন তৈরি করে:

import matplotlib.pyplot as plt
import numpy as np


def axhlines(ys, ax=None, **plot_kwargs):
    """
    Draw horizontal lines across plot
    :param ys: A scalar, list, or 1D array of vertical offsets
    :param ax: The axis (or none to use gca)
    :param plot_kwargs: Keyword arguments to be passed to plot
    :return: The plot object corresponding to the lines.
    """
    if ax is None:
        ax = plt.gca()
    ys = np.array((ys, ) if np.isscalar(ys) else ys, copy=False)
    lims = ax.get_xlim()
    y_points = np.repeat(ys[:, None], repeats=3, axis=1).flatten()
    x_points = np.repeat(np.array(lims + (np.nan, ))[None, :], repeats=len(ys), axis=0).flatten()
    plot = ax.plot(x_points, y_points, scalex = False, **plot_kwargs)
    return plot


def axvlines(xs, ax=None, **plot_kwargs):
    """
    Draw vertical lines on plot
    :param xs: A scalar, list, or 1D array of horizontal offsets
    :param ax: The axis (or none to use gca)
    :param plot_kwargs: Keyword arguments to be passed to plot
    :return: The plot object corresponding to the lines.
    """
    if ax is None:
        ax = plt.gca()
    xs = np.array((xs, ) if np.isscalar(xs) else xs, copy=False)
    lims = ax.get_ylim()
    x_points = np.repeat(xs[:, None], repeats=3, axis=1).flatten()
    y_points = np.repeat(np.array(lims + (np.nan, ))[None, :], repeats=len(xs), axis=0).flatten()
    plot = ax.plot(x_points, y_points, scaley = False, **plot_kwargs)
    return plot

15

উপরের উত্তরে প্রদত্ত plt.axvlineplt.plot((x1, x2), (y1, y2))ওআর plt.plot([x1, x2], [y1, y2])পাশাপাশি, একটিও ব্যবহার করতে পারে

plt.vlines(x_pos, ymin=y1, ymax=y2)

এ উল্লম্ব লাইন চক্রান্ত x_posথেকে spanning y1করতে y2যেখানে মান y1এবং y2পরম তথ্য স্থানাঙ্ক আছে।

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