Matplotlib ไม่ได้มีไว้สำหรับแปลงแบบคงที่เท่านั้น ในขณะที่ GUI ถูกสร้างขึ้นด้วยไลบรารี GUI และเฟรมเวิร์กเช่น ไพคิว, ไทเกอร์, ที่ผิดหวัง และ wxPythonและในขณะที่ Python มีการรวมที่ยอดเยี่ยมกับ PyQt, Tkinter และ wxPython – ไม่จำเป็นต้องใช้สิ่งเหล่านี้สำหรับฟังก์ชัน GUI พื้นฐานบางอย่างผ่าน วิดเจ็ต Matplotlib.
พื้นที่ 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()
ฟังก์ชั่นซึ่งดำเนินการฟังก์ชั่นที่เราจัดหา เมื่อตรวจพบการคลิกแล้ว ฟังก์ชันจะทำงาน
ขณะสร้างปุ่ม เรากำหนดan Axes
ไปใช้สำหรับวางตำแหน่ง เรายังสามารถผ่านใน label
ในขณะนั้น เพื่อเพิ่มข้อความและใส่คำอธิบายประกอบให้กับผู้ใช้ ดิ color
และ hovercolor
อาร์กิวเมนต์กำหนดสีของปุ่มก่อนและหลังวางเมาส์เหนือ
เนื่องจากเราดูแลตำแหน่งและพื้นที่สำหรับวิดเจ็ตทั้งหมด – มาสร้าง a . กันเถอะ Figure
และ Axes
อนุญาตให้มีระยะห่างที่ด้านล่างเพื่อเพิ่มปุ่ม และพล็อตแผนการกระจายที่ว่างเปล่า จากนั้นเราจะนิยาม an 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
จะถูกเติมด้วยเครื่องหมายสุ่ม:
ในทางปฏิบัติเราสามารถสร้าง a วงจร ของคุณสมบัติที่จะได้รับการวางแผนในการกดปุ่มแต่ละครั้ง สิ่งนี้ต้องการการปรับแต่งเล็กน้อยเพื่อ EventHandler
รวมถึงปุ่มอื่นเพื่อย้อนกลับไปยังรอบนั้น
มาใช้ไฟล์ คุณภาพไวน์แดง ชุดข้อมูลอีกครั้ง และแสดงภาพคุณลักษณะหลายอย่างเทียบกับ แอลกอฮอล์ คุณสมบัติ. เนื่องจากเราไม่สามารถใส่ใจที่จะพล็อตสิ่งเหล่านี้ทีละรายการโดยการเขียนโค้ดเพื่อพล็อตจุดสนใจหนึ่งเทียบกับอีกจุดหนึ่ง จากนั้นจึงแก้ไขโค้ดนั้นเพื่อพล็อตจุดสนใจอื่นเทียบกับอีกจุดหนึ่ง
การสร้าง Scatter Matrix อาจช่วยเราได้ แต่ถ้าชุดข้อมูลมีคุณลักษณะมากมาย ก็จะอ่านไม่ได้และเราจะไปได้ไม่ไกล หากคุณต้องการที่จะมี ทั้งสอง แปลงขนาดใหญ่ที่คุณสามารถดูและตีความได้อย่างง่ายดาย เช่นกัน เนื่องจากมีคุณสมบัติหลายอย่างที่หมุนเวียนไปโดยไม่ต้องใช้ความพยายามใดๆ เป็นพิเศษ คุณสามารถทำให้กระบวนการนี้เป็นไปโดยอัตโนมัติด้วยปุ่มต่างๆ:
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หู aเอ็กซ์). คุณยังสามารถสร้างความสัมพันธ์ของคุณลักษณะได้เช่นกัน โดยพล็อตทับกันและใช้ cla()
คำสั่งเมื่อรีเซ็ตดัชนีเมื่อสิ้นสุด/เริ่มรอบ
หลังจากล้าง Axes
– เรามีผ้าใบใสสำหรับทาสีด้วย ax.scatter()
การทำงาน. ในตัวอย่างนี้ คุณลักษณะคงที่คือ แอลกอฮอล์ดังนั้นจึงมีอยู่ตลอดเวลา คุณสมบัติอื่น ๆ แตกต่างกันไปและสามารถเข้าถึงได้ผ่าน iloc[]
ผ่านดัชนีของคอลัมน์ ส่งคืน a Series
ที่เราสามารถนำมาใช้ในพล็อตนี้ได้ ในทำนองเดียวกันเราสามารถเข้าถึง ชื่อคอลัมน์ ผ่านดัชนีของพวกเขาเช่นกัน - df.columns[index]
ซึ่งใช้สำหรับตั้งค่าป้ายกำกับแกน Y
สุดท้ายเราเพิ่ม/ลดตัวนับและเรียก plt.draw()
เพื่ออัปเดตไฟล์ Figure
:
เมื่อเราคลิกที่ไฟล์ คุณสมบัติถัดไป ปุ่ม คุณลักษณะถัดไปในรายการของคอลัมน์จะถูกพล็อตกับ แอลกอฮอล์และ 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
เราปิด Line Plot และในทางกลับกัน
เราต้องพึ่งพาความสามารถในตัวเพื่อตรวจสอบการมองเห็นของ Line Plots เนื่องจากเราไม่สามารถตรวจสอบว่ามีการทำเครื่องหมายที่ช่องทำเครื่องหมายก่อนหน้านี้หรือไม่ ความสามารถเดียวกันนี้สามารถจำลองได้ด้วย a status
บูลีนในขอบเขตของ EventHandler()
คลาสซึ่งถูกกำหนดเป็น True
และ False
ทุกครั้งที่คลิก สำหรับประเภทพล็อตที่ไม่รองรับการตรวจสอบว่ามองเห็นได้ทันทีหรือไม่
การรันโค้ดนี้ส่งผลให้ a Figure
ด้วยปุ่มสองชุดที่ด้านล่าง หากเราทำเครื่องหมายที่ช่องทั้งสอง แผนผังเส้นทั้งสองจะปรากฏขึ้น:
เราสามารถปิดได้ทีละรายการ:
และเราสามารถเปลี่ยนช่วงของ Axes
ผ่านปุ่มตัวเลือก:
การเพิ่มกล่องข้อความ
กล่องข้อความ จะใช้ในการ รวบรวม ข้อมูลจากผู้ใช้ – และเราสามารถแก้ไขแปลงตามข้อมูลนี้ ตัวอย่างเช่น เราสามารถขอให้ผู้ใช้ป้อนชื่อของจุดสนใจ หรือแทรกฟังก์ชันเพื่อให้โครงเรื่องของเราแสดงเป็นภาพ แน่นอนว่าการทำงานกับข้อมูลที่ผู้ใช้ป้อนอาจเป็นเรื่องยุ่งยาก – มักมีกรณีที่ต้องระวังอยู่เสมอ
มาเขียนสคริปต์ที่อนุญาตให้ผู้ใช้ป้อน 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
อินสแตนซ์บน an Axes
. ตั้งแต่ Axes
มีแล้ว Text
ที่เป็นของเรา TextBox
, เราไม่ต้องการที่จะลบอะไรถ้ามี 2 หรือน้อยกว่า Text
อินสแตนซ์ที่มีอยู่ – ข้อความแสดงข้อผิดพลาดและ TextBox
ฉลาก.
หากเกินสอง เราได้รับข้อความแสดงข้อผิดพลาดแล้ว ซึ่งควรลบออก
ถ้าคุณสมบัติ is ปัจจุบันใน DataFrame
แม้ว่าเราจะล้าง Axes
และพล็อตมัน:
การเพิ่มตัวเลือกช่วง
ตัวเลือกช่วง สามารถใช้เพื่อให้ผู้ใช้เลือกช่วงข้อมูลและโฟกัสไปที่ข้อมูลนั้นได้ โดยตั้งค่าขีดจำกัดของแกนตามการเลือกนั้น ตามค่าเริ่มต้น ไลบรารีจำนวนมากรองรับฟังก์ชันนี้ แม้ว่า Matplotlib ไม่รองรับและเราจะต้องดำเนินการด้วยตนเอง นอกจากนี้เราจะต้องเพิ่มพิเศษ “ รีเซ็ต” ปุ่มถ้าเราต้องการ ซูมออก เช่นกัน
เพื่อเพิ่มไฟล์ ตัวเลือกช่วง,เราไม่ต้องทุ่มเทใหม่หมด Axes
สำหรับมัน – เราสามารถแนบมันกับสิ่งที่มีอยู่ซึ่งสมเหตุสมผลมาก เมื่อสร้าง SpanSelector
เราจัดหา Axes
มันเป็นของเช่นเดียวกับตัวจัดการเหตุการณ์ตามด้วย 'horizontal'
or 'vertical'
ซึ่งหมุน Axes
และ Span Selector ทั้งคู่.
พื้นที่ useblit
อาร์กิวเมนต์มักจะถูกตั้งค่าเป็น True
เพราะมันช่วยเพิ่มประสิทธิภาพให้กับแบ็กเอนด์ส่วนใหญ่ นอกจากนี้ เราได้เพิ่มคุณสมบัติการจัดรูปแบบบางอย่าง เช่น การตั้งค่า alpha
ของสี่เหลี่ยมที่สร้างเป็น Span Selector to 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 เป็นค่าที่ให้มา:
การเพิ่มแถบเลื่อน
Sliders ให้ผู้ใช้เลือกระหว่างค่าต่างๆ ได้โดยสัญชาตญาณโดยการเลื่อนเครื่องหมายและเลือกค่า โดยทั่วไป แถบเลื่อนจะใช้เพื่ออัปเดตค่าบางอย่างบนพล็อตอย่างต่อเนื่อง เช่น range 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()
เราได้ปรับ padding เพื่อให้มีแถบเลื่อนทางด้านซ้ายและด้านล่างของ Axes
และพล็อตเส้นพล็อตอย่างง่าย การเพิ่มตัวเลื่อนต้องการให้เราทำ Axes
สำหรับมัน เช่นเดียวกับวิดเจ็ตอื่น ๆ ส่วนใหญ่ และกำหนดให้กับ ax
อาร์กิวเมนต์ของ Slider
ผ่านตัวสร้าง นอกจากนี้ เราสามารถตั้งค่าต่ำสุด สูงสุด และเริ่มต้นของตัวเลื่อนได้ โดยทั่วไปแล้วสิ่งเหล่านี้จะเป็นช่วงไดนามิก โดยขึ้นอยู่กับข้อมูลที่คุณกำลังวางแผน แต่สามารถตั้งค่าสเกลาร์ด้วยตนเองได้เช่นกัน
ในที่สุด Slider
s สามารถวางในแนวนอนหรือแนวตั้งได้ เนื่องจากพวกเขาตั้งใจที่จะอัปเดตอย่างต่อเนื่องผ่านการปัดเมาส์ – the on_changed()
ฟังก์ชั่นใช้เพื่อกระตุ้นการตอบสนองเมื่อผู้ใช้ป้อนข้อมูล เราได้ปรับแต่ง EventHandler
ชั้นเรียนที่มี an update()
ฟังก์ชันที่เพียงแค่ปรับค่าของขีดจำกัด X และ Y ตามค่า val
ue ของตัวเลื่อนตามลำดับ
การรันโค้ดนี้จะสร้างพล็อตที่มีตัวเลื่อนสองตัว ซึ่งเราสามารถใช้เพื่อเปลี่ยนขอบเขตของ Axes
:
- เข้า
- ทั้งหมด
- การอนุญาต
- แล้ว
- อื่น
- API
- เข้าใกล้
- ข้อโต้แย้ง
- รอบ
- การเริ่มต้น
- กำลัง
- กล่อง
- built-in
- โทรศัพท์
- ซึ่ง
- กรณี
- เปลี่ยนแปลง
- การตรวจสอบ
- รหัส
- คอลัมน์
- ได้
- คู่
- การสร้าง
- ปัจจุบัน
- สถานะปัจจุบัน
- ข้อมูล
- ทุ่มเท
- ตรวจพบ
- โหล
- พลวัต
- อย่างง่ายดาย
- ขอบ
- เหตุการณ์
- เหตุการณ์
- ตัวอย่าง
- ยอดเยี่ยม
- ลักษณะ
- คุณสมบัติ
- ชื่อจริง
- โฟกัส
- พบ
- ฟังก์ชัน
- ฟังก์ชั่น
- General
- ไป
- ยิ่งใหญ่
- สีเขียว
- มี
- ช่วย
- โปรดคลิกที่นี่เพื่ออ่านรายละเอียดเพิ่มเติม
- สรุป ความน่าเชื่อถือของ Olymp Trade?
- HTTPS
- ความคิด
- รวมทั้ง
- ดัชนี
- บูรณาการ
- IT
- ป้ายกำกับ
- ใหญ่
- ถูก จำกัด
- Line
- รายการ
- มดลูก
- มากที่สุด
- ตัวเลข
- Options
- อื่นๆ
- มิฉะนั้น
- การปฏิบัติ
- มุมมอง
- นำเสนอ
- กด
- กระบวนการ
- ก่อ
- คุณสมบัติ
- วิทยุ
- พิสัย
- RE
- คำตอบ
- ผลสอบ
- รับคืน
- ความปลอดภัย
- กล่าวว่า
- ขนาด
- จอภาพ
- เลือก
- ความรู้สึก
- ชุด
- การตั้งค่า
- ง่าย
- เล็ก
- So
- ช่องว่าง
- เริ่มต้น
- สถานะ
- คำแถลง
- สหรัฐอเมริกา
- Status
- จัดหาอุปกรณ์
- สนับสนุน
- ระบบ
- ทดสอบ
- ตลอด
- เวลา
- ด้านบน
- บันทึก
- การปรับปรุง
- us
- ผู้ใช้
- ความคุ้มค่า
- รายละเอียด
- ความชัดเจน
- มองเห็นได้
- ว่า
- ไม่มี
- ทำงาน
- การทำงาน
- การเขียน
- X
- ปี
- ซูมเข้า