ابزارک Matplotlib هوش داده PlatoBlockchain. جستجوی عمودی Ai.

ابزارک های Matplotlib

Matplotlib فقط برای نمودارهای استاتیک نیست. در حالی که رابط های کاربری گرافیکی معمولا با کتابخانه های رابط کاربری گرافیکی و چارچوب هایی مانند پایکیوت, تینکر, کیوی و wxPython، و در حالی که پایتون ادغام عالی با PyQt، Tkinter دارد و wxPython – نیازی به استفاده از هیچ یک از اینها برای برخی از عملکردهای رابط کاربری گرافیکی اساسی نیست ابزارک های Matplotlib.

La matplotlib.widgets ماژول چندین کلاس دارد، از جمله AxesWidget، از آن Buttons, CheckButtons, Sliders, TextBoxes و غیره مشتق شده اند. اینها همه قبول دارند Axes آنها به عنوان یک و تنها آرگومان سازنده اجباری اضافه می شوند و موقعیت آنها باید به صورت دستی تنظیم شود. نکته قابل توجه این است که ویجت محور است، بنابراین شما یک را ایجاد خواهید کرد Axes نمونه ای برای هر ویجت

نکته دیگری که باید به آن توجه کرد این است شما باید ارجاع به ویجت ها را حفظ کنید در غیر این صورت، آنها ممکن است زباله جمع آوری شود.

هر یک از آنها را نیز می توان با تنظیم غیرفعال کرد active به False، در این صورت به هیچ رویدادی مانند کلیک روی آن پاسخ نمی دهند. همانطور که گفته شد، ما می توانیم از طریق عناصر و اجزای مختلف رابط کاربری گرافیکی، نوع جدیدی از تعامل را به طرح های خود معرفی کنیم.

توجه داشته باشید: قرار نیست Matplotlib برای ایجاد رابط کاربری گرافیکی با کیفیت بالا و همچنین سیستم‌های کاربرپسند استفاده شود. این ویجت ها ابتدایی هستند، واقعا عالی به نظر نمی رسند و عملکرد محدودی دارند. آنها به‌عنوان راهی برای نمونه‌سازی اولیه و آزمایش چیزها هستند، نه اینکه واقعاً آنها را ارسال کنند.

اگر قبلاً با PyQt کار کرده‌اید - ممکن است متوجه شوید که نحو کلی و رویکرد اضافه کردن این ویجت‌ها و همچنین اتصال آنها به کنترل‌کننده‌های رویداد نسبتاً آشناست.

اضافه کردن دکمه ها

بیایید شروع کنیم دکمه ها - از matplotlib.widgets ماژول a را تعریف می کند Button کلاس برای اتصال به آن، با شماره تماس می گیریم on_clicked() تابع، که تابعی را که ما عرضه می کنیم اجرا می کند. هنگامی که یک کلیک شناسایی شد، تابع اجرا می شود.

در حین ایجاد دکمه، یک را اختصاص می دهیم Axes به آن، برای موقعیت یابی استفاده می شود. ما همچنین می توانیم در یک عبور کنیم label در آن زمان، برای اضافه کردن متن و حاشیه نویسی آن برای یک کاربر. را color و hovercolor آرگومان ها رنگ دکمه را قبل و بعد از قرار گرفتن روی آن مشخص می کنند.

از آنجایی که ما از موقعیت و فضای همه ویجت ها مراقبت می کنیم - بیایید a ایجاد کنیم Figure و Axes، مقداری فاصله در پایین برای اضافه کردن یک دکمه در نظر بگیرید و یک Scatter Plot خالی را رسم کنید. سپس، یک را تعریف می کنیم 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:

ابزارک Matplotlib هوش داده PlatoBlockchain. جستجوی عمودی Ai.

و پس از چند ده بار فشار دادن دکمه، ما ax با نشانگرهای تصادفی پر می شود:

ابزارک Matplotlib هوش داده PlatoBlockchain. جستجوی عمودی Ai.

در شرایط عملی تر، ما می توانیم یک را ایجاد کنیم چرخه ویژگی هایی که با فشار دادن هر دکمه ترسیم می شوند. این به چند ترفند نیاز دارد 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()

La 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:

ابزارک Matplotlib هوش داده PlatoBlockchain. جستجوی عمودی Ai.

هنگامی که ما بر روی ویژگی بعدی را فشار دهید، ویژگی بعدی در لیست ستون ها در مقابل رسم می شود الکل، و Figure به طور مناسب به روز می شود - برچسب ها، نشانگرها و مقیاس. همین امر برعکس است - ویژگی قبلی لیست را در جهت مخالف طی می کند و به ما امکان می دهد با یک مکانیسم ایمنی که هر بار به پایان یا ابتدای چرخه می رسیم شمارنده ما را تنظیم مجدد می کند، به جلو و عقب بچرخیم.

اضافه کردن دکمه های رادیویی و چک باکس ها

دکمه های رادیویی برای اجازه دادن به کاربر برای انتخاب استفاده می شود یک ارزش بیرون از چندین مقدار. فقط یک دکمه رادیویی را می توان در یک زمان انتخاب کرد و آنها معمولاً یک انتخاب را نشان می دهند. چک باکس ها اگر می خواهید به کاربر اجازه دهید چندین گزینه را همزمان انتخاب کند، می تواند استفاده شود.

توجه داشته باشید: توانایی بسیار محدودی برای بررسی وجود چک باکس وجود دارد on or خاموش. در واقع، هیچ چیزی خارج از جعبه وجود ندارد. شما فقط می توانید بررسی کنید که آیا جعبه وجود دارد یا خیر فشرده or نه، که محدودیت جدی برای نحوه استفاده از آن ایجاد می کند زیرا ما نمی دانیم که قبل از آن در چه وضعیتی بوده است. تنها گزینه این است که شمارنده/بررسی وضعیت فعلی جعبه را با یک بولی حفظ کنید و منطق را بر اساس آن تغییر دهید.

این به شما امکان می دهد، برای مثال، یک چک باکس برای هر کدام اضافه کنید استدلال سفارشی سازی از یک طرح خاص، به کاربر اجازه می دهد آنها را تنظیم کند True or False (بررسی شده، یا بدون علامت)، یا هر نقشه غیر متضاد دیگری بر اساس این حالت ها.

اگرچه، از آنجایی که API به خودی خود محدود است، ما خود را به استفاده مورد نظر محدود می کنیم - روشن و خاموش کردن همه چیز. ما دو ویژگی خواهیم داشت که می توانیم آنها را تغییر دهیم 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 فیلد Line Plots که قبلاً بر اساس جریان آنها ساخته ایم visible وضعیت اگر visible == True، خط خط را خاموش می کنیم و بالعکس.

ما باید به توانایی داخلی برای بررسی نمایان بودن خطوط خطی تکیه کنیم، زیرا نمی توانیم بررسی کنیم که آیا چک باکس قبلاً علامت زده شده است یا خیر. همین توانایی را می توان با a تقلید کرد status بولی در محدوده EventHandler() کلاس، که تنظیم شده است True و False در هر کلیک، برای انواع نمودارهایی که از بررسی اینکه آیا خارج از کادر قابل مشاهده هستند پشتیبانی نمی کنند.

اجرای این کد منجر به a Figure با دو مجموعه دکمه در پایین. اگر هر دو چک باکس را علامت بزنیم، هر دو Line Plot ظاهر می شوند:

ابزارک Matplotlib هوش داده PlatoBlockchain. جستجوی عمودی Ai.

ما می توانیم آنها را به صورت جداگانه خاموش کنیم:

ابزارک Matplotlib هوش داده PlatoBlockchain. جستجوی عمودی Ai.

و ما می توانیم محدوده را تغییر دهیم Axes از طریق دکمه های رادیویی:

ابزارک Matplotlib هوش داده PlatoBlockchain. جستجوی عمودی Ai.

اضافه کردن جعبه متن

جعبه های متنی عادت کرده اند جمع آوری داده های کاربر - و ما می توانیم نمودارها را بر اساس این داده ها تغییر دهیم. برای مثال، می‌توانیم از یک کاربر بخواهیم نام یک ویژگی را وارد کند، یا تابعی را برای تجسم نمودار ما درج کند. البته، کار با ورودی کاربر می تواند مشکل باشد - همیشه موارد لبه ای وجود دارد که باید به آنها توجه کرد.

بیایید یک اسکریپت بنویسیم که به کاربر اجازه دهد a را وارد کند نام ویژگی از یک مجموعه داده، و 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 هوش داده PlatoBlockchain. جستجوی عمودی Ai.

ابزارک Matplotlib هوش داده PlatoBlockchain. جستجوی عمودی Ai.

ابزارک Matplotlib هوش داده PlatoBlockchain. جستجوی عمودی Ai.

افزودن انتخابگرهای دهانه

انتخابگرهای دهانه می توان از آن برای اجازه دادن به کاربر برای انتخاب گستره ای از داده ها و تمرکز بر روی آن استفاده کرد و محدودیت های محور را بر اساس آن انتخاب تعیین کرد. به‌طور پیش‌فرض، بسیاری از کتابخانه‌ها از این قابلیت پشتیبانی می‌کنند، اگرچه متأسفانه Matplotlib این کار را نمی‌کند و ما باید این کار را به صورت دستی انجام دهیم. علاوه بر این، ما باید یک مورد اضافی اضافه کنیم "تنظیم مجدد" اگر بخواهیم را فشار دهید کوچک نمایی نیز هست.

برای افزودن انتخابگر دهانه، ما نیازی به اختصاص یک جدید کامل نداریم Axes برای آن - ما می توانیم آن را به یک موجود متصل کنیم، که بسیار منطقی است. هنگام تولید a SpanSelector، ما عرضه می کنیم Axes متعلق به، و همچنین کنترل کننده رویداد، و به دنبال آن است 'horizontal' or 'vertical'، که می چرخد Axes و انتخابگر دهانه هر دو.

La useblit آرگومان معمولاً روی تنظیم می شود True زیرا عملکرد را در اکثر Backend ها افزایش می دهد. علاوه بر این، ما چند ویژگی ظاهری مانند تنظیم کردن اضافه کرده ایم 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()

اجرای این یک نمودار ایجاد می کند که می توانیم با تنظیم Axes-limits بر روی مقادیر ارائه شده، span ها را انتخاب کرده و بزرگنمایی کنیم:

ابزارک Matplotlib هوش داده PlatoBlockchain. جستجوی عمودی Ai.

ابزارک Matplotlib هوش داده PlatoBlockchain. جستجوی عمودی Ai.

ابزارک Matplotlib هوش داده PlatoBlockchain. جستجوی عمودی Ai.

اضافه کردن لغزنده

لغزنده به کاربران این امکان را می دهد که با کشیدن یک نشانگر و انتخاب یک مقدار، بین مقادیر زیادی به طور مستقیم انتخاب کنند. به طور معمول، از لغزنده ها برای به روز رسانی مداوم مقداری از یک نمودار، مانند محدوده آن استفاده می شود 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، و یک Line Plot ساده ترسیم کرد. اضافه کردن یک نوار لغزنده مستلزم ساختن یک نوار لغزنده است Axes برای آن، مانند اکثر ویجت های دیگر، و آن را به آن اختصاص دهید ax استدلال از Slider از طریق سازنده علاوه بر این، می توانیم حداقل، حداکثر و مقادیر اولیه اسلایدر را تنظیم کنیم. اینها معمولاً بر اساس داده‌هایی که ترسیم می‌کنید، محدوده‌های پویا هستند، اما می‌توانند مقادیر اسکالر را نیز به صورت دستی تنظیم کنند.

در نهایت، Sliders را می توان به صورت افقی یا عمودی جهت گیری کرد. از آنجایی که آنها قرار است به طور مداوم از طریق یک ماوس به روز شوند - این on_changed() هنگامی که کاربر ورودی می دهد از تابع برای راه اندازی پاسخ استفاده می شود. ما بهینه سازی کرده ایم EventHandler کلاس با یک update() تابعی که به سادگی مقادیر X و Y-Limit را بر اساس تنظیم می کند value از لغزنده مربوطه.

اجرای این کد یک نمودار با دو لغزنده تولید می کند که می توانیم از آنها برای تغییر دامنه استفاده کنیم. Axes:

ابزارک Matplotlib هوش داده PlatoBlockchain. جستجوی عمودی Ai.

ابزارک Matplotlib هوش داده PlatoBlockchain. جستجوی عمودی Ai.

ابزارک Matplotlib هوش داده PlatoBlockchain. جستجوی عمودی Ai.

تمبر زمان:

بیشتر از Stackabuse