Я строю графический интерфейс с использованием Tkinter в Python.Мне нужно нарисовать прямоугольник поверх гистограммы и заполнить пространство прозрачным цветом.Я дошел до точки добавления прямоугольника к гистограмме, но изо всех сил пытался заполнить прямоугольное пространство цветом.Ниже приведен пример файла данных:
Файл данных (dummy.csv):
Val X Y
4.386535946 4.386535946 2.362683533
3.230578487 3.230578487 1.927068162
2.67663787 2.67663787 1.300859395
2.236096646 2.236096646 1.477402735
1.963946814 1.963946814 1.498125697
1.779245978 1.779245978 0.199055215
-1.38320155 1.159057936 1.38320155
-1.417788412 0.605276953 1.417788412
-1.471051567 1.013028135 1.471051567
-1.477383756 0.996565505 1.477383756
-1.601125344 0.963508674 1.601125344
-3.145657478 0.5902837 3.145657478
-3.241919109 2.796858598 3.241919109
Я публикую код ниже.Буду очень признателен, если вы поможете мне решить головоломку
import tkinter as tk
import pandas as pd
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
class BarGUI(tk.Frame):
def __init__(self, parent_container):
tk.Frame.__init__(self, parent_container)
self.parent_container = parent_container
self.fig = Figure(figsize=(7, 3))
self.a = self.fig.add_subplot(111)
self.canvas = FigureCanvasTkAgg(self.fig, master=self.parent_container)
self.canvas.get_tk_widget().grid(column = 0, row = 0, padx = 40, pady = 0)
tk.Button(self.parent_container, text = "Draw", width = 10, command = self.plot).grid(column = 0, row = 1)
def read_inputs(self):
df = pd.read_csv('dummy.csv')
data = list(df.loc[:, 'Val'])
data.sort(reverse = True)
ind = np.arange(len(data)) # the x locations for the groups
width = 0.95
return (ind, data, width)
def plot(self):
self.a.cla()
ind, data, width = self.read_inputs()
self.a.bar(ind, data, width)
self.a.plot([-1, 13], [1, 1], color = 'orange')
self.a.plot([13, 13], [1, -1], color = 'orange')
self.a.plot([13, -1], [-1, -1], color = 'orange')
self.a.plot([-1, -1], [-1, 1], color = 'orange')
self.a.set_title ("Scatter Plot", fontsize=16)
self.a.set_ylabel("Y", fontsize=14)
self.a.set_xlabel("X", fontsize=14)
self.canvas.draw()
root = tk.Tk()
app_window = BarGUI(root)
root.mainloop()