Matplotlib শুধুমাত্র স্ট্যাটিক প্লটের জন্য নয়। যদিও GUI গুলি সাধারণত GUI লাইব্রেরি এবং ফ্রেমওয়ার্কগুলির সাথে তৈরি করা হয় যেমন পিকিউটি, টিকিন্টার, কিভি এবং wxPython, এবং পাইথনের সাথে PyQt, Tkinter এর সাথে চমৎকার একীকরণ রয়েছে এবং wxPython - কিছু মৌলিক GUI কার্যকারিতার জন্য এর কোনোটি ব্যবহার করার প্রয়োজন নেই, এর মাধ্যমে ম্যাটপ্লটলিব উইজেট.
সার্জারির matplotlib.widgets
মডিউল সহ বেশ কয়েকটি ক্লাস রয়েছে AxesWidget
, যা থেকে Button
s, CheckButton
s, Slider
s, TextBox
es, ইত্যাদি উদ্ভূত হয়। এই সব গ্রহণ Axes
এগুলিকে এক এবং একমাত্র বাধ্যতামূলক কনস্ট্রাক্টর আর্গুমেন্ট হিসাবে যুক্ত করা হচ্ছে এবং তাদের অবস্থান ম্যানুয়ালি সেট করতে হবে। উল্লেখ্য একটি বিষয় হল যে উইজেট হল অক্ষ, তাই আপনি একটি তৈরি করবেন Axes
প্রতিটি উইজেটের জন্য উদাহরণ।
আরেকটি বিষয় লক্ষণীয় আপনাকে উইজেটের রেফারেন্স রাখতে হবে অন্যথায়, তারা আবর্জনা সংগ্রহ করতে পারে।
তাদের প্রতিটি সেট করে নিষ্ক্রিয় করা যেতে পারে active
থেকে False
, এই ক্ষেত্রে, তারা কোনো ইভেন্টে সাড়া দেবে না, যেমন ক্লিক করা হচ্ছে। এটি বলা হচ্ছে, আমরা বিভিন্ন GUI উপাদান এবং উপাদানগুলির মাধ্যমে আমাদের প্লটে একটি নতুন ধরণের ইন্টারঅ্যাক্টিভিটি প্রবর্তন করতে পারি।
বিঃদ্রঃ: Matplotlib উচ্চ-মানের GUI তৈরির জন্য ব্যবহার করার জন্য নয়, বা ব্যবহারকারী-বান্ধব সিস্টেমের জন্যও নয়। এই উইজেটগুলি প্রাথমিক, সত্যিই দুর্দান্ত দেখায় না এবং সীমিত কার্যকারিতা রয়েছে৷ এগুলি আসলে তাদের পাঠানোর পরিবর্তে প্রোটোটাইপ এবং জিনিসগুলি পরীক্ষা করার উপায় হিসাবে বোঝানো হয়েছে।
আপনি যদি আগে PyQt-এর সাথে কাজ করে থাকেন - আপনি লক্ষ্য করতে পারেন যে এই উইজেটগুলি যোগ করার সাধারণ বাক্য গঠন এবং পদ্ধতি, সেইসাথে ইভেন্ট হ্যান্ডলারদের সাথে তাদের সংযোগ করা মোটামুটি পরিচিত।
বোতাম যোগ করা হচ্ছে
এর সঙ্গে শুরু করা যাক বোতাম - দ্য matplotlib.widgets
মডিউল সংজ্ঞায়িত করে a Button
ক্লাস এটি সংযোগ করতে, আমরা কল on_clicked()
ফাংশন, যা আমরা যে ফাংশন সরবরাহ করি তা কার্যকর করে। একবার একটি ক্লিক সনাক্ত করা হলে, ফাংশনটি কার্যকর হয়।
বোতাম তৈরি করার সময়, আমরা একটি বরাদ্দ করি Axes
এটিতে, অবস্থান নির্ধারণের জন্য ব্যবহৃত হয়। আমরা এও পাস করতে পারি label
সেই সময়ে, কিছু টেক্সট যোগ করতে এবং একজন ব্যবহারকারীর জন্য এটি টীকা করতে। দ্য color
এবং hovercolor
আর্গুমেন্টগুলি বোতামের রঙকে সংজ্ঞায়িত করে আগে এবং পরে এটিকে হোভার করার পরে।
যেহেতু আমরা সমস্ত উইজেটের অবস্থান এবং স্থানের যত্ন নিই - আসুন একটি তৈরি করি Figure
এবং Axes
, একটি বোতাম যোগ করার জন্য নীচে কিছু ব্যবধানের অনুমতি দিন এবং একটি খালি স্ক্যাটার প্লট প্লট করুন। তারপর, আমরা একটি সংজ্ঞায়িত করব EventHandler
ক্লাস, যে একটি একক পদ্ধতি আছে add_random()
. পদ্ধতিটি দুটি র্যান্ডম সংখ্যা তৈরি করে এবং তাদের জন্য একটি মার্কার প্লট করে Axes
আমরা আগে তৈরি করেছি এবং কল করেছি plt.draw()
, যা পুনরায় আঁকে Figure
. প্লট আপডেট করার সময়, আমাদের সবসময় কল করতে হবে plt.draw()
আবার আসলে এটি আপডেট করতে:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Button fig, ax = plt.subplots()
fig.subplots_adjust(bottom=0.2)
plot = ax.scatter([], []) class EventHandler: def add_random(self, event): x = np.random.randint(0, 100) y = np.random.randint(0, 100) ax.scatter(x, y) plt.draw() # Axes for the Button and positioning
# xposition and yposition in percentages, width, height
button_ax = plt.axes([0.7, 0.05, 0.2, 0.07])
# Create Button and assign it to `button_ax` with label
button = Button(button_ax, 'Add Random', color='green', hovercolor='red')
# On a detected click, execute add_random()
button.on_clicked(EventHandler().add_random) plt.show()
এর ফলাফল এ Figure
, একটি খালি সঙ্গে Axes
এর ভিতরে এবং স্ক্রিনের উপরের ডানদিকের কোণায় একটি বোতাম, তার নিজের মধ্যে Axes
:
এবং বোতামটি কয়েক ডজন বার চাপার পরে, আমাদের ax
র্যান্ডম মার্কার দিয়ে জনবহুল হবে:
আরও ব্যবহারিক পদে, আমরা একটি তৈরি করতে পারি চক্র প্রতিটি বোতাম প্রেসে প্লট করার বৈশিষ্ট্যগুলি। এই কয়েক tweaks প্রয়োজন EventHandler
, সেইসাথে সেই চক্রের মধ্য দিয়ে ফিরে যেতে আরেকটি বোতাম।
এর ব্যবহার করা যাক রেড ওয়াইন গুণমান আবার ডেটাসেট, এবং এর বিপরীতে বেশ কয়েকটি বৈশিষ্ট্য কল্পনা করুন এলকোহল বৈশিষ্ট্য যেহেতু আমরা একটি বৈশিষ্ট্য অন্যটির বিরুদ্ধে প্লট করার জন্য কোডটি লিখে, এবং তারপরে অন্যটির বিরুদ্ধে আরেকটি বৈশিষ্ট্য প্লট করার জন্য সেই কোডটি সংশোধন করে পৃথকভাবে প্লট করতে বিরক্ত হতে পারি না।
একটি স্ক্যাটার ম্যাট্রিক্স তৈরি করা আমাদের এখানে সাহায্য করতে পারে, কিন্তু যদি ডেটাসেটে অনেক বৈশিষ্ট্য থাকে তবে এটি মোটামুটি অপঠিত হবে এবং আমরা বেশিদূর যেতে পারব না। আপনি যদি চান উভয় বড় আকারের প্লট যা আপনি সহজেই দেখতে এবং ব্যাখ্যা করতে পারেন, যেমন কোনো অতিরিক্ত প্রচেষ্টা ছাড়াই সাইকেল চালানোর একাধিক বৈশিষ্ট্য থাকার কারণে - আপনি বোতামগুলির সাহায্যে এই প্রক্রিয়াটিকে স্বয়ংক্রিয় করতে পারেন:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.widgets import Button fig, ax = plt.subplots()
fig.subplots_adjust(bottom=0.2) df = pd.read_csv('winequality-red.csv')
plot = ax.scatter([], []) class EventHandler: i = 0 # Find and plot next feature, re-draw the Axes def next_feature(self, event): # If the counter is at the end of the columns # Revert it back to 0 to cycle through again if self.i >= len(df.columns): self.i = 0 # Clear Axes from last plot ax.cla() # Plot a feature against a feature located on the `i` column ax.scatter(df['alcohol'], df.iloc[:,self.i]) # Set labels ax.set_xlabel('Alcohol') ax.set_ylabel(df.columns[self.i]) # Increment i self.i += 1 # Update Figure plt.draw() def previous_feature(self, event): # If the counter is at the start of the columns # Revert it back to the last column to cycle through if self.i <= 0: self.i = len(df.columns)-1 ax.cla() ax.scatter(df['alcohol'], df.iloc[:,self.i]) ax.set_xlabel('Alcohol') ax.set_ylabel(df.columns[self.i]) self.i -= 1 plt.draw() # Add buttons
button1_ax = plt.axes([0.7, 0.02, 0.2, 0.07])
next_button = Button(button1_ax, 'Next Feature')
next_button.on_clicked(EventHandler().next_feature) button2_ax = plt.axes([0.45, 0.02, 0.2, 0.07])
previous_button = Button(button2_ax, 'Previous Feature')
previous_button.on_clicked(EventHandler().previous_feature) plt.show()
সার্জারির EventHandler
ক্লাসের এখন দুটি পদ্ধতি রয়েছে- next_feature()
এবং previous_feature()
. এই দুই পাল্টা কিনা চেক i
কলাম তালিকার শেষ বা শুরুতে পৌঁছেছে - এবং একটি এড়াতে IndexError
, আমরা সূচকটিকে বিপরীত মানের সাথে রিসেট করি এবং a অনুকরণ করি চক্র. নিচে যাচ্ছে 0
আমাদের ফিরে পেতে হবে শেষ কলাম তালিকার, এবং শেষ কলামের উপরে যাওয়া আমাদের প্রথমটিতে ফিরে যাবে।
আমরা কোথায় অবস্থান করছি তা নিশ্চিত করার পরে - আমরা সাফ করুন Axes
, যেহেতু আমরা একটি বিদ্যমান প্লটের উপরে এটি পরিষ্কার না করেই আবার প্লট করব৷ cla()
(clকান axes)। আপনি বিকল্পভাবে একে অপরের উপরে প্লট করে এবং ব্যবহার করে বৈশিষ্ট্য সম্পর্কগুলিও গাদা করতে পারেন cla()
চক্রের শেষে/শুরুতে সূচক রিসেট করার সময় বিবৃতি।
সাফ করার পর Axes
- আমরা এর সাথে আঁকার জন্য একটি পরিষ্কার ক্যানভাস পেয়েছি ax.scatter()
ফাংশন এই উদাহরণে, নির্দিষ্ট বৈশিষ্ট্য হল এলকোহল, তাই এটা সব সময়ে উপস্থিত. অন্যান্য বৈশিষ্ট্য পরিবর্তিত হয়, এবং এর মাধ্যমে অ্যাক্সেস করা যেতে পারে iloc[]
, কলামের সূচীতে ক্ষণস্থায়ী। এটি একটি ফেরত দেয় Series
যা আমরা এই প্লটে ব্যবহার করতে পারি। একইভাবে, আমরা অ্যাক্সেস করতে পারি কলামের নাম তাদের সূচকের মাধ্যমেও - df.columns[index]
, যা Y-অক্ষ লেবেল সেট করতে ব্যবহৃত হয়।
অবশেষে, আমরা কাউন্টার এবং কল বাড়াই/কমাই plt.draw()
আপডেট করতে Figure
:
একবার আমরা ক্লিক করুন পরবর্তী বৈশিষ্ট্য বোতাম, কলামের তালিকার পরবর্তী বৈশিষ্ট্যটির বিরুদ্ধে প্লট করা হবে এলকোহল, এবং Figure
যথাযথভাবে আপডেট করা হবে - লেবেল, মার্কার এবং স্কেল। একইভাবে অন্য পথে যায় - পূর্ববর্তী বৈশিষ্ট্য তালিকাটিকে বিপরীত দিকে অতিক্রম করবে, আমাদেরকে একটি নিরাপত্তা ব্যবস্থার সাহায্যে সাইকেলটি সামনে এবং পিছনে ঘুরতে দেয় যা প্রতিবার আমরা চক্রের শেষ বা শুরুতে পৌঁছানোর সময় আমাদের কাউন্টার রিসেট করে।
রেডিও বোতাম এবং চেক বক্স যোগ করা হচ্ছে
রেডিও বোতাম একটি ব্যবহারকারী নির্বাচন করার অনুমতি দিতে ব্যবহৃত হয় একটি মান বাহিরে বেশ কিছু মান. একটি সময়ে শুধুমাত্র একটি রেডিও বোতাম নির্বাচন করা যেতে পারে, এবং তারা সাধারণত একটি পছন্দ প্রতিনিধিত্ব করে। বক্স চেক করুন ব্যবহার করা যেতে পারে যদি আপনি ব্যবহারকারীকে একবারে একাধিক বিকল্প নির্বাচন করতে দিতে চান।
বিঃদ্রঃ: একটি চেকবক্স আছে কিনা তা পরীক্ষা করার ক্ষমতা খুবই সীমিত on or বন্ধ. আসলে, বাক্সের বাইরে কিছুই নেই। আপনি শুধুমাত্র বাক্স আছে কিনা তা পরীক্ষা করতে পারেন চিপা or না, যা এটিকে কীভাবে ব্যবহার করা যেতে পারে তার একটি গুরুতর সীমাবদ্ধতা তৈরি করে কারণ এর আগে এটি কোন অবস্থায় ছিল তা আমাদের কাছে কোনো ধারণা নেই। একমাত্র বিকল্প হল একটি বুলিয়ানের সাহায্যে বক্সের বর্তমান অবস্থা আপনার নিজস্ব কাউন্টার/চেক করা এবং তার উপর ভিত্তি করে যুক্তি পরিবর্তন করা।
এটি আপনাকে, উদাহরণস্বরূপ, প্রতিটির জন্য একটি চেকবক্স যোগ করার অনুমতি দেবে কাস্টমাইজেশন যুক্তি একটি নির্দিষ্ট প্লটের, ব্যবহারকারীকে সেগুলি সেট করার অনুমতি দেয় True
or False
(চেক করা, বা আনচেক করা), বা এই অবস্থার উপর ভিত্তি করে অন্য কোন অ-বিরোধপূর্ণ ম্যাপিং।
যদিও, যেহেতু এপিআই নিজেই সীমিত, তাই আমরা নিজেদেরকে উদ্দেশ্যপ্রণোদিত ব্যবহারে সীমাবদ্ধ রাখব - জিনিসগুলি চালু এবং বন্ধ করা। আমাদের দুটি বৈশিষ্ট্য থাকবে, যা আমরা চালু করতে পারি on এবং বন্ধ একটি চেকবক্সের মাধ্যমে। মনে রাখবেন যে এমনকি এই কার্যকারিতা বস্তুর মধ্যে সীমাবদ্ধ যার জন্য আপনি দেখতে পারেন যে তারা দৃশ্যমান কিনা।
অন্যদিকে, আমরা ব্যবহারকারীকে একবারে দুটি স্কেল প্রয়োগ করার অনুমতি দিতে চাই না, বা একবারে দুটি X-সীমা সেট করতে চাই না, যেহেতু শুধুমাত্র অনুক্রমের দ্বিতীয় নামক বিবৃতিটি প্রয়োগ করা হবে। এর জন্য - আমরা রেডিও বোতাম ব্যবহার করব।
ব্যবহারকারীকে কয়েকটি রেডিও বোতামের মাধ্যমে অক্ষের পরিসর নির্বাচন করতে দেওয়ার জন্য কয়েকটি রেডিও বোতাম যুক্ত করা যাক, তবে তাদের বৈশিষ্ট্য ভিজ্যুয়ালাইজেশনগুলিকে চালু করার অনুমতি দিন on এবং বন্ধ:
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.widgets import CheckButtons
from matplotlib.widgets import RadioButtons fig, ax = plt.subplots()
fig.subplots_adjust(bottom=0.2) df = pd.read_csv('winequality-red.csv') # Plot two line plots for two features, and turn them invisible
line1, = ax.plot(df['fixed acidity'], visible=False)
line2, = ax.plot(df['citric acid'], visible=False) class EventHandler: # set_range handler def set_range(label): if (label == 'Small Range'): ax.set_xlim(0, 1600) ax.set_ylim(0, 25) else: ax.set_xlim(0, 1600) ax.set_ylim(0, 50) plt.draw() # Turn off, if on, and on if off def apply_features(label): if (label == 'Fixed Acidity'): line1.set_visible(not line1.get_visible()) elif (label == 'Citric Acid'): line2.set_visible(not line2.get_visible()) plt.draw() # Add radio buttons and checkboxes
ranges_ax = plt.axes([0.7, 0.02, 0.2, 0.1])
range_radio_buttons = RadioButtons(ranges_ax, ('Small Range', 'Large Range'))
range_radio_buttons.on_clicked(EventHandler.set_range) checkboxes_ax = plt.axes([0.4, 0.02, 0.25, 0.1])
checkboxes = CheckButtons(checkboxes_ax, ('Fixed Acidity', 'Citric Acid'))
checkboxes.on_clicked(EventHandler.apply_features) plt.show()
আবার, আমরা দুটি পদ্ধতি পেয়েছি EventHandler()
ক্লাস - set_range()
এবং apply_features()
. দ্য set_range()
পদ্ধতিটি সামঞ্জস্য করে পরিসরটিকে "ছোট" বা "বড়"-এ সেট করে Axes
' X এবং Y-সীমা। দ্য apply_features()
ফাংশন পরিবর্তন করে visible
লাইন প্লটগুলির ক্ষেত্র আমরা আগে তৈরি করেছি, তাদের বর্তমানের উপর ভিত্তি করে visible
অবস্থা যদি visible == True
, আমরা লাইন প্লট বন্ধ, এবং তদ্বিপরীত.
লাইন প্লটগুলির দৃশ্যমানতা পরীক্ষা করার জন্য আমাদের অন্তর্নির্মিত ক্ষমতার উপর নির্ভর করতে হবে, যেহেতু আমরা চেকবক্সটি আগে চেক করা হয়েছে কিনা তা পরীক্ষা করতে পারি না। এই একই ক্ষমতা একটি সঙ্গে অনুকরণ করা যেতে পারে status
এর সুযোগে বুলিয়ান EventHandler()
ক্লাস, যা সেট করা আছে True
এবং False
প্রতিটি ক্লিকে, প্লট প্রকারের জন্য যেগুলি বাক্সের বাইরে দৃশ্যমান কিনা তা পরীক্ষা করা সমর্থন করে না৷
এই কোড চালানোর ফলে একটি Figure
নীচে দুই সেট বোতাম সহ। যদি আমরা উভয় চেকবক্স চেক করি, উভয় লাইন প্লট প্রদর্শিত হবে:
আমরা তাদের পৃথকভাবে বন্ধ করতে পারি:
এবং আমরা পরিসীমা পরিবর্তন করতে পারেন Axes
রেডিও বোতামের মাধ্যমে:
টেক্সটবক্স যোগ করা হচ্ছে
টেক্সটবক্স অভ্যস্ত সংগ্রহ করা ব্যবহারকারীর কাছ থেকে ডেটা - এবং আমরা এই ডেটার উপর ভিত্তি করে প্লট পরিবর্তন করতে পারি। উদাহরণস্বরূপ, আমরা একজন ব্যবহারকারীকে একটি বৈশিষ্ট্যের নাম ইনপুট করতে বা আমাদের প্লটকে কল্পনা করার জন্য একটি ফাংশন সন্নিবেশ করতে বলতে পারি। অবশ্যই, ব্যবহারকারীর ইনপুট নিয়ে কাজ করা কঠিন হতে পারে - সর্বদা এজ কেস খুঁজে বের করতে হবে।
আসুন একটি স্ক্রিপ্ট লিখি যা ব্যবহারকারীকে একটি ইনপুট করতে দেয় বৈশিষ্ট্যের নাম একটি ডেটাসেটের, এবং Axes
ইনপুট প্রতিফলিত প্রতিটি জমা উপর আপডেট. ব্যবহারকারীর সুবিধার জন্য, আমরা তাদের জানাব যদি ইনপুটটি কলামের নামের সাথে মেলাতে না পারে:
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.widgets import TextBox fig, ax = plt.subplots()
fig.subplots_adjust(bottom=0.2) df = pd.read_csv('winequality-red.csv') class EventHandler: def submit(feature_name): if feature_name != "" or feature_name != None: if feature_name in df: ax.cla() ax.plot(df[feature_name]) else: if len(textbox_ax.texts) > 2: del textbox_ax.texts[-1] textbox_ax.text(-2, 0.4, feature_name + ' was not found.') plt.draw() textbox_ax = plt.axes([0.7, 0.02, 0.2, 0.1])
textbox = TextBox(textbox_ax, 'Feature Name')
textbox.on_submit(EventHandler.submit) plt.show()
প্রদান করা হয়েছে কিনা তা দেখার জন্য আমাদের একটি সহজ চেক আছে feature_name
ফাঁকা বা None
, এই ক্ষেত্রে, আমরা কিছুই করি না। যদি না হয়, আমরা যদি চেক feature_name
উপস্থিত আছে DataFrame
, একটি বার্তা সংযুক্ত করা যে বৈশিষ্ট্যটি উপস্থিত না থাকলে এটি পাওয়া যায়নি। যদিও পাঠ্যটি সংযুক্ত করার আগে, আমাদের নিশ্চিত করতে হবে যে পূর্ববর্তী বার্তাটি মুছে ফেলা হয়েছে, যাতে নতুনটি এটির সাথে ওভারল্যাপ না করে। দ্য axes.texts
সম্পত্তি সব একটি তালিকা Text
একটি উপর উদাহরণ Axes
। যেহেতু Axes
ইতিমধ্যে একটি আছে Text
উদাহরণস্বরূপ, আমাদের অন্তর্গত TextBox
, 2 বা কম থাকলে আমরা কিছু সরাতে চাই না Text
উদাহরণ উপস্থিত - ত্রুটি বার্তা এবং TextBox
লেবেল।
উপরের দুটি হলে, আমরা ইতিমধ্যে একটি ত্রুটি বার্তা পেয়েছি, যা সরানো উচিত।
যদি বৈশিষ্ট্য is উপস্থিত DataFrame
, যদিও, আমরা সাফ Axes
এবং এটি প্লট করুন:
স্প্যান নির্বাচক যোগ করা হচ্ছে
স্প্যান নির্বাচক ব্যবহারকারীকে ডেটার একটি স্প্যান নির্বাচন করতে এবং সেই নির্বাচনের উপর ভিত্তি করে অক্ষের সীমা নির্ধারণ করে তাতে ফোকাস করার অনুমতি দেওয়ার জন্য ব্যবহার করা যেতে পারে। ডিফল্টরূপে, অনেক লাইব্রেরি এই কার্যকারিতা সমর্থন করে, যদিও দুর্ভাগ্যবশত, Matplotlib তা করে না এবং আমাদের ম্যানুয়ালি এটি করতে হবে। উপরন্তু, আমরা একটি অতিরিক্ত যোগ করতে হবে "রিসেট" বাটন যদি আমরা চাই ছোট করা যেমন.
যুক্ত করতে স্প্যান নির্বাচক, আমাদের সম্পূর্ণ নতুন উৎসর্গ করার দরকার নেই Axes
এটির জন্য - আমরা এটিকে বিদ্যমান একটির সাথে সংযুক্ত করতে পারি, যা অনেক অর্থবহ করে তোলে। একটি উৎপন্ন করার সময় SpanSelector
, আমরা সরবরাহ করি Axes
এটি, সেইসাথে ইভেন্ট হ্যান্ডলারের, অনুসরণ করে 'horizontal'
or 'vertical'
, যা ঘোরে Axes
এবং স্প্যান নির্বাচক উভয়.
সার্জারির useblit
যুক্তি সাধারণত সেট করা হয় True
কারণ এটি বেশিরভাগ ব্যাকএন্ডে কর্মক্ষমতা বাড়ায়। উপরন্তু, আমরা কয়েকটি স্টাইলিং বৈশিষ্ট্য যোগ করেছি, যেমন সেট করা alpha
একটি স্প্যান নির্বাচক হিসাবে তৈরি আয়তক্ষেত্রের 0.5
এবং facecolor
একটি সুন্দর থেকে tab:blue
:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.widgets import SpanSelector
from matplotlib.widgets import Button fig, ax = plt.subplots()
fig.subplots_adjust(bottom=0.2) df = pd.read_csv('AmesHousing.csv') ax.scatter(x = df['Year Built'], y = df['Total Bsmt SF'], alpha = 0.6) class EventHandler: def select_horizontal(x, y): ax.set_xlim(x, y) plt.draw() def reset(self): ax.set_xlim(df['Year Built'].min(), df['Year Built'].max()) plt.draw span_horizontal = SpanSelector(ax, EventHandler.select_horizontal, 'horizontal', useblit=True, rectprops=dict(alpha=0.5, facecolor='tab:blue')) button_ax = plt.axes([0.7, 0.02, 0.2, 0.07])
button = Button(button_ax, 'Reset')
button.on_clicked(EventHandler.reset) plt.show()
এটি চালানোর ফলে একটি প্লট তৈরি হয় যার উপর আমরা স্প্যান নির্বাচন করতে পারি এবং প্রদত্ত মানগুলিতে অক্ষ-সীমা সেট করে তাদের জুম করতে পারি:
স্লাইডার যোগ করা হচ্ছে
স্লাইডার ব্যবহারকারীদের একটি মার্কার স্লাইড করে এবং একটি মান নির্বাচন করে স্বজ্ঞাতভাবে অনেক মানগুলির মধ্যে নির্বাচন করতে দেয়৷ সাধারণত, স্লাইডারগুলি একটি প্লটের কিছু মান ক্রমাগত আপডেট করতে ব্যবহৃত হয়, যেমন এর পরিসর or এমনকি একটি বৈশিষ্ট্য। উদাহরণস্বরূপ, আপনি একটি স্লাইডারের মাধ্যমে একটি ধ্রুবকের মান সামঞ্জস্য করতে পারেন, যা সেই ধ্রুবকের উপর নির্ভর করে এমন একটি ফাংশনকে প্রভাবিত করে।
আসুন একটি স্ক্রিপ্ট লিখি যা আমাদের একটি স্লাইডারের মাধ্যমে Y এবং X-অক্ষের সীমা পরিবর্তন করতে দেয়, যা আমাদের সেই দৃষ্টিকোণটি পরিবর্তন করতে দেয় যেখান থেকে আমরা আমাদের ডেটা দেখছি:
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider fig, ax = plt.subplots()
fig.subplots_adjust(bottom=0.2, left=0.2) df = pd.read_csv('winequality-red.csv')
plot, = ax.plot(df['volatile acidity']) class EventHandler: def update(val): ax.set_ylim(0, yslider.val) ax.set_xlim(0, xslider.val) plt.draw() xslider_ax = plt.axes([0.35, 0.03, 0.5, 0.07])
xslider = Slider( ax=xslider_ax, label="X-limit", valmin=0, valmax=len(df['volatile acidity']), valinit=len(df['volatile acidity']), orientation="horizontal"
) yslider_ax = plt.axes([0.03, 0.2, 0.07, 0.5])
yslider = Slider( ax=yslider_ax, label="Y-limit", valmin=0, valmax=3, valinit=1.5, orientation="vertical"
) xslider.on_changed(EventHandler.update)
yslider.on_changed(EventHandler.update) plt.show()
আমরা বাম এবং নীচে একটি স্লাইডারের জন্য অনুমতি দেওয়ার জন্য প্যাডিং সামঞ্জস্য করেছি Axes
, এবং একটি সাধারণ লাইন প্লট প্লট করেছে৷ একটি স্লাইডার যোগ করার জন্য আমাদের একটি তৈরি করতে হবে Axes
এটির জন্য, অন্যান্য উইজেটের মতো, এবং এটিকে বরাদ্দ করুন ax
এর যুক্তি Slider
কনস্ট্রাক্টরের মাধ্যমে। উপরন্তু, আমরা স্লাইডারের সর্বনিম্ন, সর্বোচ্চ এবং প্রাথমিক মান সেট করতে পারি। আপনি যে ডেটা প্লট করছেন তার উপর ভিত্তি করে এগুলি সাধারণত গতিশীল রেঞ্জ হবে, তবে ম্যানুয়ালি স্কেলার মানও সেট করা যেতে পারে।
অবশেষে, Slider
s অনুভূমিকভাবে বা উল্লম্বভাবে ভিত্তিক হতে পারে। যেহেতু তারা একটি মাউস-সোয়াইপ-এর মাধ্যমে ক্রমাগত আপডেট করা বোঝানো হয়েছে on_changed()
ব্যবহারকারী যখন ইনপুট দেয় তখন ফাংশন একটি প্রতিক্রিয়া ট্রিগার করতে ব্যবহৃত হয়। আমরা tweaked করেছি EventHandler
একটি সহ ক্লাস update()
ফাংশন যা কেবলমাত্র X এবং Y-সীমার মানগুলির উপর ভিত্তি করে সামঞ্জস্য করে val
সংশ্লিষ্ট স্লাইডারের ue.
এই কোডটি চালানোর ফলে দুটি স্লাইডার সহ একটি প্লট তৈরি হবে, যা আমরা এর সুযোগ পরিবর্তন করতে ব্যবহার করতে পারি Axes
:
- প্রবেশ
- সব
- অনুমতি
- ইতিমধ্যে
- অন্য
- API
- অভিগমন
- আর্গুমেন্ট
- কাছাকাছি
- শুরু
- হচ্ছে
- বক্স
- বিল্ট-ইন
- কল
- যত্ন
- মামলা
- পরিবর্তন
- পরীক্ষণ
- কোড
- স্তম্ভ
- পারা
- দম্পতি
- তৈরি করা হচ্ছে
- বর্তমান
- বর্তমান অবস্থা
- উপাত্ত
- সমর্পণ করা
- সনাক্ত
- ডজন
- প্রগতিশীল
- সহজে
- প্রান্ত
- ঘটনা
- ঘটনাবলী
- উদাহরণ
- চমত্কার
- বৈশিষ্ট্য
- বৈশিষ্ট্য
- প্রথম
- কেন্দ্রবিন্দু
- পাওয়া
- ক্রিয়া
- কার্যকারিতা
- সাধারণ
- চালু
- মহান
- Green
- জমিদারি
- সাহায্য
- এখানে
- কিভাবে
- HTTPS দ্বারা
- ধারণা
- সুদ্ধ
- সূচক
- ইন্টিগ্রেশন
- IT
- লেবেলগুলি
- বড়
- সীমিত
- লাইন
- তালিকা
- জরায়ু
- সেতু
- সংখ্যার
- অপশন সমূহ
- অন্যান্য
- অন্যভাবে
- কর্মক্ষমতা
- পরিপ্রেক্ষিত
- বর্তমান
- প্রেস
- প্রক্রিয়া
- উৎপাদন করা
- সম্পত্তি
- রেডিও
- পরিসর
- RE
- প্রতিক্রিয়া
- ফলাফল
- আয়
- নিরাপত্তা
- বলেছেন
- স্কেল
- স্ক্রিন
- নির্বাচিত
- অনুভূতি
- সেট
- বিন্যাস
- সহজ
- ছোট
- So
- স্থান
- শুরু
- রাষ্ট্র
- বিবৃতি
- যুক্তরাষ্ট্র
- অবস্থা
- সরবরাহ
- সমর্থন
- সিস্টেম
- পরীক্ষা
- দ্বারা
- সময়
- শীর্ষ
- আপডেট
- আপডেট
- us
- ব্যবহারকারী
- মূল্য
- চেক
- দৃষ্টিপাত
- দৃশ্যমান
- কিনা
- ছাড়া
- কাজ করছে
- কাজ
- লেখা
- X
- বছর
- জুম্