সহজতম পদ্ধতিতে ম্যাটপ্ল্লিটিবের পাইপ্লট-তে কিংবদন্তি যুক্ত করা


263

টি এল; ডিআর -> কিভাবে এক একটি লাইন গ্রাফ জন্য একটি কিংবদন্তি তৈরি করতে পারেন Matplotlib'র PyPlotকোনো অতিরিক্ত ভেরিয়েবল তৈরি ছাড়া?

নীচে গ্রাফিং স্ক্রিপ্ট বিবেচনা করুন:

if __name__ == '__main__':
    PyPlot.plot(total_lengths, sort_times_bubble, 'b-',
                total_lengths, sort_times_ins, 'r-',
                total_lengths, sort_times_merge_r, 'g+',
                total_lengths, sort_times_merge_i, 'p-', )
    PyPlot.title("Combined Statistics")
    PyPlot.xlabel("Length of list (number)")
    PyPlot.ylabel("Time taken (seconds)")
    PyPlot.show()

যেহেতু আপনি দেখতে পারেন, এই একটি খুব মৌলিক ব্যবহার matplotlibএর PyPlot। এটি আদর্শভাবে নীচের মত গ্রাফ উত্পন্ন করে:

চিত্রলেখ

কিছুই বিশেষ, আমি জানি। তবে কোন তথ্যটি প্লট করা হচ্ছে তা অস্পষ্ট নয় (আমি কিছু বাছাই করা অ্যালগরিদমের ডেটা প্লট করার চেষ্টা করছি, সময় গ্রহণের তুলনায় দৈর্ঘ্য, এবং আমি লোকেরা কোন লাইনটি তা নিশ্চিত করে তা নিশ্চিত করতে চাই)। সুতরাং, আমার একটি কিংবদন্তি প্রয়োজন, তবে নীচের নীচের নীচের উদাহরণটি দেখুন ( অফিসিয়াল সাইট থেকে ):

ax = subplot(1,1,1)
p1, = ax.plot([1,2,3], label="line 1")
p2, = ax.plot([3,2,1], label="line 2")
p3, = ax.plot([2,3,1], label="line 3")

handles, labels = ax.get_legend_handles_labels()

# reverse the order
ax.legend(handles[::-1], labels[::-1])

# or sort them by labels
import operator
hl = sorted(zip(handles, labels),
            key=operator.itemgetter(1))
handles2, labels2 = zip(*hl)

ax.legend(handles2, labels2)

আপনি দেখতে পাবেন যে আমার একটি অতিরিক্ত ভেরিয়েবল তৈরি করতে হবে ax। আমি কিভাবে আমার গ্রাফ করার জন্য একটি কিংবদন্তি যোগ করতে পারেন ছাড়া এই অতিরিক্ত পরিবর্তনশীল তৈরি করতে থাকার এবং আমার বর্তমান স্ক্রিপ্ট সরলতা ধারনকারী?


অতিরিক্ত ভেরিয়েবল তৈরির বিষয়ে আপনার উদ্বেগ দেখে আমি বিভ্রান্ত হয়ে পড়েছি। আপনাকে যেভাবেই পর্দার আড়ালে সেই জিনিসগুলি তৈরি করতে হবে।
টাকসওয়েল 21

1
@ টিক্যাসওয়েল ভাল আমাকে তাদের আশ্বাস দেওয়ার চেষ্টা করুন। আমি অতিরিক্ত ভেরিয়েবল তৈরি করতে চাই না, কারণ এটি সম্পূর্ণ স্ক্রিপ্টে জটিলতা যুক্ত করে। আমি একগুচ্ছ শিক্ষার্থীদের এটি শেখানোর চেষ্টা করছি এবং যেহেতু তারা matplotlibআগে ব্যবহার করেনি , তাই আমি বিষয়গুলি যতটা সম্ভব সহজ করে রাখতে চাইছিলাম। এছাড়াও, আপনি যদি রবের উত্তরটি একবার দেখে থাকেন তবে এটি ওয়েবসাইটটিতে প্রদর্শিত উদাহরণের চেয়ে অনেক সহজ। আমি আশা করি এটি সাহায্য করবে.
গেমস ব্রেনিয়াক

1
আমি তর্ক করবে যে রাষ্ট্র মেশিন ইন্টারফেস ব্যবহার করে তোলে কঠিন দীর্ঘ রান বুঝতে কারণ এত এটি 'জাদু দ্বারা' করা হচ্ছে। এছাড়াও, কনভেনশনটি হ'ল import matplotlib.pyplot as pltপরিবর্তেPyPlot
টাকাসওয়েল

উত্তর:


439

label=আপনার প্রতিটি plot()কলগুলিতে একটি যুক্ত করুন এবং তারপরে কল করুন legend(loc='upper left')

এই নমুনাটি বিবেচনা করুন (পাইথন ৩.৮.০ এর সাথে পরীক্ষিত):

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 20, 1000)
y1 = np.sin(x)
y2 = np.cos(x)

plt.plot(x, y1, "-b", label="sine")
plt.plot(x, y2, "-r", label="cosine")
plt.legend(loc="upper left")
plt.ylim(-1.5, 2.0)
plt.show()

এখানে চিত্র বর্ণনা লিখুন সামান্য এই টিউটোরিয়াল থেকে সংশোধিত: http://jakevdp.github.io/mpl_tutorial/tutorial_pages/tut1.html


2
সিরিজটি প্লট করার সময় আপনি যদি লেবেলগুলি জানেন না তবে এটি করার কোনও উপায় আছে কি? ইতোমধ্যে প্লট করার পরে কোনও সিরিজে লেবেল যুক্ত করার উপায়? বা কিংবদন্তি দেখানোর আগে প্লেসোল্ডার লেবেলগুলিকে সংশোধন করার কোনও উপায়?
ডেভিডা

13
plt.legend(loc='upper left')এছাড়াও কাজ করে, কোথা pltথেকে এসেছে import matplotlib.pyplot as plt
ম্যাট ক্লিনস্মিথ

ধন্যবাদ, @ এরিক, এটি লক্ষ করার জন্য আমি কোড আপডেট করেছি।
রবি

উত্সাহিত করা হয়েছে কারণ স্ট্যাকের ওভারফ্লো অসাধারণ এবং ভাল উত্তরগুলি পরিবর্তন হতে পারে
এরিক

1
@ ডেভিডা হ্যাঁ, আপনি কেবল স্ট্রিংগুলির একটি তালিকা এতে প্রবেশ করতে পারেন plt.legend:plt.legend(['First Label', 'Second Label'])
অ্যাপলিগুলি মনিকা

36

আপনি অ্যাক্সেস উদাহরণটি ( ax) এর সাথে অ্যাক্সেস করতে পারেন plt.gca()। এই ক্ষেত্রে, আপনি ব্যবহার করতে পারেন

plt.gca().legend()

আপনি label=আপনার প্রতিটি plt.plot()কলগুলিতে কীওয়ার্ড ব্যবহার করে বা এই লেবেলগুলিকে একটি legendকার্যকরী বা তালিকা হিসাবে এই কার্যকারী উদাহরণ হিসাবে নির্ধারিত করে এটি করতে পারেন :

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-0.75,1,100)
y0 = np.exp(2 + 3*x - 7*x**3)
y1 = 7-4*np.sin(4*x)
plt.plot(x,y0,x,y1)
plt.gca().legend(('y0','y1'))
plt.show()

pltGcaLegend

যাইহোক, যদি আপনি যে আরো একবার অক্ষ উদাহরণস্বরূপ অ্যাক্সেস করার দরকার হয়, আমি পরিবর্তনশীল সংরক্ষণ সুপারিশ করবেন axসঙ্গে

ax = plt.gca()

এবং তারপরে কল axকরা plt.gca()


অনুলিপি-পেস্ট উত্তর যা কোনও পড়া প্রয়োজন হয় না, এবং একটি ছবি সহ! এই উত্তরটি আরও credit
গুলজার

14

আপনাকে সাহায্য করার জন্য একটি উদাহরণ এখানে ...

fig = plt.figure(figsize=(10,5))
ax = fig.add_subplot(111)
ax.set_title('ADR vs Rating (CS:GO)')
ax.scatter(x=data[:,0],y=data[:,1],label='Data')
plt.plot(data[:,0], m*data[:,0] + b,color='red',label='Our Fitting 
Line')
ax.set_xlabel('ADR')
ax.set_ylabel('Rating')
ax.legend(loc='best')
plt.show()

এখানে চিত্র বর্ণনা লিখুন


2
আমি শুধু কৌতূহলী, আপনার ফিটিং লাইনটি এতদূর ডেটা বন্ধ কেন?
অ্যাপলিগুলি মনিকা

13

কিংবদন্তি সহ সাইন এবং কোসাইন কার্ভগুলির জন্য একটি সহজ প্লট।

ব্যবহৃত matplotlib.pyplot

import math
import matplotlib.pyplot as plt
x=[]
for i in range(-314,314):
    x.append(i/100)
ysin=[math.sin(i) for i in x]
ycos=[math.cos(i) for i in x]
plt.plot(x,ysin,label='sin(x)')  #specify label for the corresponding curve
plt.plot(x,ycos,label='cos(x)')
plt.xticks([-3.14,-1.57,0,1.57,3.14],['-$\pi$','-$\pi$/2',0,'$\pi$/2','$\pi$'])
plt.legend()
plt.show()

পাপ এবং কোসিন প্লট (চিত্র দেখতে ক্লিক করুন)


6

গ্রাফিকিং হচ্ছে এমন সিরিজটি সম্পর্কিত আপনার প্লট কলটিতে প্রতিটি যুক্তিতে লেবেল যুক্ত করুন label = "series 1"

তারপরে Pyplot.legend()আপনার স্ক্রিপ্টের নীচে কেবল যুক্ত করুন এবং কিংবদন্তি এই লেবেলগুলি প্রদর্শন করবে।


এটি সঠিক ধারণা, তবে আপনি কখনই লেবেল যুক্ত করবেন না যাতে কিংবদন্তি খালি হবে
টাকাসওয়েল


0
    # Dependencies
    import numpy as np
    import matplotlib.pyplot as plt

    #Set Axes
    # Set x axis to numerical value for month
    x_axis_data = np.arange(1,13,1)
    x_axis_data

    # Average weather temp
    points = [39, 42, 51, 62, 72, 82, 86, 84, 77, 65, 55, 44]

    # Plot the line
    plt.plot(x_axis_data, points)
    plt.show()

    # Convert to Celsius C = (F-32) * 0.56
    points_C = [round((x-32) * 0.56,2) for x in points]
    points_C

    # Plot using Celsius
    plt.plot(x_axis_data, points_C)
    plt.show()

    # Plot both on the same chart
    plt.plot(x_axis_data, points)
    plt.plot(x_axis_data, points_C)

    #Line colors
    plt.plot(x_axis_data, points, "-b", label="F")
    plt.plot(x_axis_data, points_C, "-r", label="C")

    #locate legend
    plt.legend(loc="upper left")
    plt.show()
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.