我在matplotlib
创建了一个饼图。我想在python 中实现this结果。每当鼠标悬停在任何切片上时,它的颜色都会改变。我已经搜索了很多并且想出了使用bind
方法但是这样做并没有效果,因此无法提出积极的结果。如果可以通过任何其他库(例如tkinter
,plotly
等)完成此操作,我将毫无疑问,但我需要使用matplotlib
提出解决方案,所以我希望更多请仔细看看我的问题,热烈欢迎任何建议......
这是我的代码:
import matplotlib.pyplot as plt
labels = 'A', 'B', 'C', 'D'
sizes = [10, 35, 50, 5]
explode = (0, 0, 0.1, 0) # only "explode" the 3rd slice (i.e. 'C')
fig1, ax1 = plt.subplots()
ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%',
shadow=True, startangle=90)
ax1.axis('equal') # Equal aspect ratio ensures that pie is drawn as a circle.
plt.show()
...问候
答案 0 :(得分:3)
motion_notify_event
需要matplotlib event handler。
这可以连接到一个函数,该函数检查鼠标是否在饼图的一个楔形内。这是通过contains_point
完成的。在这种情况下,不同地着色楔形,否则将其颜色设置为原始颜色。
import matplotlib.pyplot as plt
labels = 'A', 'B', 'C', 'D'
sizes = [10, 35, 50, 5]
explode = (0, 0, 0.1, 0) # only "explode" the 3rd slice (i.e. 'C')
fig1, ax1 = plt.subplots()
wedges, _, __ = ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%',
shadow=True, startangle=90)
ax1.axis('equal') # Equal aspect ratio ensures that pie is drawn as a circle.
ocols= [w.get_facecolor() for w in wedges]
ncols= ["gold", "indigo", "purple", "salmon"]
def update(event):
if event.inaxes == ax1:
for i, w in enumerate(wedges):
if w.contains_point([event.x, event.y]):
w.set_facecolor(ncols[i])
else:
w.set_facecolor(ocols[i])
fig1.canvas.draw_idle()
fig1.canvas.mpl_connect("motion_notify_event", update)
plt.show()
答案 1 :(得分:0)
首先,你要找的是the documentation on Event handling in matplotlib。特别是,每次鼠标移动时都会触发var comboBoxItem = sexCombo.Items.OfType<ComboBoxItem>().FirstOrDefault(x => x.Content.ToString() == teacherInfo["sex"].ToString());
int index = sexCombo.SelectedIndex = sexCombo.Items.IndexOf(comboBoxItem);
。但是,我想不出一个简单的方法来确定鼠标现在在哪个楔形物上。
如果点击是可以接受的,那么问题就容易多了:
motion_notify_event