Python库matplotlib之三

小部件(widget)

小部件(widget)可与任何GUI后端一起工作。所有这些小部件都要求预定义一个Axes实例,并将其作为第一个参数传递。 Matplotlib不会试图布局这些小部件,所以,您必须自己决定Axes的宽度和高度,以便容纳这些小部件。

小部件的基类

词法:class matplotlib.widgets.AxesWidget(ax)

该小部件连接到单个Axes。

为了保证小部件保持响应,并且防止被垃圾收集,用户应该维护对该对象的引用。

这是必要的,因为回调登记仅维护函数的弱引用,这些函数是小部件的成员函数。如果没有对小部件对象的引用,它可能会被垃圾收集,这将断开回调。

connect_event

词法:connect_event(event, callback)
将回调函数与事件连接起来。
这应该用来代替figure.canvas.mpl_connect,因为该函数存储回调ID以供以后清理。

disconnect_events()

词法:disconnect_events()
断开此小部件创建的所有事件。

Button

Button的属性

  • ax,是一个Axes,Button将在其中显示。
  • label,一个文本实例。
  • color,按钮未悬停时的颜色。
  • hovercolor,悬停时按钮的颜色。

词法:matplotlib.widgets.Button(ax, label, image=None, color=‘0.85’, hovercolor=‘0.95’, *, useblit=True)

为了使按钮保持响应,您必须保留对其的引用。调用on_clicked 连接到按钮

参数说明

  • ax,变量类型是Axes。按钮将被放置到的 Axes 实例。
  • label,变量类型是字符串。按钮文本。
  • image,变量类型是array-like或者PIL Image。如果不是None,要放置在按钮中的图像。参数直接转发给imshow。
  • color,变量类型是color。按钮未激活时的颜色。
  • hovercolor,变量类型是color。当鼠标悬停在按钮上时按钮的颜色。
  • useblit,变量类型是bool,默认值为True
    如果后端支持,请使用位块传送,以加快绘制速度。

disconnect

词法:disconnect(cid)
删除连接ID为cid的回调函数。

on_clicked

词法:on_clicked(func)
将回调函数 func 连接到按钮单击事件。返回一个连接id,这个id可用于断开连接回调。

应用实列

freqs = np.arange(0.2, 2, 0.3)

fig, ax = plt.subplots()
ax.set_ylabel('Frequency', color='#00ff00')
ax.set_xlabel('Time', color='#0000ff')
ax.set_facecolor('#eafff5')
plt.subplots_adjust(bottom=0.2)
t = np.arange(0.0, 10.0, 0.01)
s = np.sin(2*np.pi*freqs[0]*t)
l, = plt.plot(t, s, lw=2)

class Index:
    ind = 0

    def reset(self, event):
        self.ind = 0
        i = self.ind % len(freqs)
        ydata = np.sin(2*np.pi*freqs[i]*t)
        l.set_ydata(ydata)
        l.set_color("#0000FF")
        plt.draw()

    def next(self, event):
        self.ind += 1
        i = self.ind % len(freqs)
        ydata = np.sin(2*np.pi*freqs[i]*t)
        l.set_ydata(ydata)
        l.set_color("#00FF00")
        plt.draw()

if __name__ == "__main__":
    callback = Index()
    axnext = plt.axes([0.81, 0.05, 0.1, 0.075])
    ax_reset = plt.axes([0.70, 0.05, 0.1, 0.075])
    bnext = Button(axnext, 'Next', color='#00FF00', hovercolor='#00FFFF')
    bnext.on_clicked(callback.next)
    b_reset = Button(ax_reset, 'Reset', color='#FF0000', hovercolor='#00FFFF')
    b_reset.on_clicked(callback.reset)

    plt.show()

在这里插入图片描述

CheckButtons

CheckButtons的属性

  • ax,是一个Axes,CheckButtons将在其中显示。
  • labels,是一个Text表。CheckButton的文本标签对象。

构造器

matplotlib.widgets.CheckButtons(ax, labels, actives=None, *, useblit=True, label_props=None, frame_props=None, check_props=None)

这个构造器构造一组GUI的检查按钮。为了始终保持检查按钮的响应,必须保留对此对象的引用。
使用 on_clicked 方法连接到 CheckButton。

参数说明

  • ax,这个参数类型是Axes。Button将在这个Axes中显示。
  • labels,这个参数类型是一个字符串表,检查按钮的标签。
  • actives,这个参数类型是一个bool值表, 这个参数是可选的。指示CheckButton的初始状态。该列表的长度必须与标签列表的长度相同。如果未给出,则所有CheckButton状态都将是uncheck。
  • useblit,这个参数类型bool,默认值为True。如果后端支持,使用位块传送,以加快绘制速度。
  • label_props,这个参数类型是dict,是可选。用于标签的Text属性字典。
  • frame_props,这个参数类型是dict,是可选。scatter的Collection属性的字典,用于复选按钮框架。
  • check_props,这个参数类型是dict,是可选。scatter的Collection属性的字典,用于检查按钮检查。

APIs

函数名功能
clear()Uncheck all checkboxes
disconnect(cid)删除连接ID为cid的观察者
get_checked_labels()返回用户当前检查的标签列表
get_status()返回所有检查按钮的状态(True/False)列表
on_clicked(func)将回调函数 func 连接到按钮单击事件。
set_active(index, state=None)通过索引修改复选按钮的状态。如果 eventon 为 True,则会触发回调。
set_check_props(props)设置检查按钮检查的属性。
set_frame_props(props)设置复选按钮框架的属性。
set_label_props(props)设置文本标签的属性。

应用实列

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import CheckButtons

freqs = np.arange(0.2, 2, 0.3)
global w_check
fig, ax = plt.subplots()
ax.set_ylabel('Frequency', color='#00ff00')
ax.set_xlabel('Time', color='#0000ff')
ax.set_facecolor('#eafff5')
plt.subplots_adjust(left=0.3, bottom=0.1, right=0.9, top=0.9, wspace=0.2, hspace=0.2)

plt.subplots_adjust(bottom=0.25)
t = np.arange(0.0, 10.0, 0.01)
s = np.sin(2*np.pi*freqs[0]*t)
l, = plt.plot(t, s, lw=2)

def on_clicked(label):
    global w_check
    index = labels.index(label)
    l_status = w_check.get_status()
    s = ''
    for x in l_status:
        if x == True:
            s += 'FF'
        else:
            s += '00'
    color = '#'+s
    l.set_color(color)
    plt.draw()

if __name__ == "__main__":
    global w_check
    ax = plt.axes([0.01, 0.5, 0.13, 0.4])
    labels = ["Red", "Blue", "Green"]
    check_status = [False, True, False]
    w_check = CheckButtons(ax, labels, check_status)
    w_check.on_clicked(on_clicked)

    plt.show()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值