Python库matplotlib之四

小部件(widget)

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

RadioButtons

RadioButtons的属性

  • ax,该属性的类型是Axes,RadioButtons将在其中显示。
  • activecolor,该属性的类型是color。所选按钮的颜色。
  • labels,该属性的类型是Text列表。按钮标签。
  • value_selected,该属性的类型是字符串。当前所选按钮的标签文本。
  • index_selected,该属性的类型是int。所选按钮的索引。

构造器

词法:matplotlib.widgets.RadioButtons(ax, labels, active=0, activecolor=None, *, useblit=True, label_props=None, radio_props=None)

构造一个单选按钮。为了使按钮保持响应,您必须保留对此对象的引用。使用 on_clicked方法连接到RadioButton。

参数说明

  • ax,该参数类型是Axes。按钮将被放置到该Axes中。
  • labels,该参数类型是字符串列表。按钮标签。
  • active,该参数类型是int。最初选择的按钮的索引。
  • activecolor,该参数类型是color。当前所选按钮的颜色。如果activecolor或 radio_props 中未指定,则默认值为“蓝色”。
  • useblit,该参数类型是bool,默认值为True。如果后端支持,使用位块传送,加快绘制速度。
  • label_props,该参数类型是dict或dict列表,是可选的。用于标签的Text属性字典。
  • radio_props,该参数类型是dict,是可选的。分散字典 用于单选按钮的Collection属性。

APIs

函数说明
clear()将活动按钮重置为最初活动的按钮。
disconnect(cid)删除连接 ID 为 cid 的观察者
on_clicked(func)将回调函数 func 连接到按钮单击事件。
set_active(index)选择带有数字索引的按钮。如果 eventon 为 True,则会触发回调。
set_label_props(props)设置文本标签的属性。
set_radio_props(props)设置文本标签的属性。

应用实列

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

freqs = np.arange(0.2, 2, 0.3)
global w_radio
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.35, 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_radio
    line_style = ['-', '-.', ':']
    index = labels.index(label)
    l.set(linestyle=line_style[index])
    plt.draw()

if __name__ == "__main__":
    global w_radio
    ax = plt.axes([0.01, 0.5, 0.20, 0.4])
    labels = ["solid", "dash-dotted", "dotted"]
    w_radio = RadioButtons(ax, labels, activecolor="#00FF00")
    w_radio.on_clicked(on_clicked)

    plt.show()

在这里插入图片描述

Slider

Slider的属性

  • val,float。滑动条值。

构造器

词法:matplotlib.widgets.Slider(ax, label, valmin, valmax, *, valinit=0.5, valfmt=None, closedmin=True, closedmax=True, slidermin=None, slidermax=None, dragging=True, valstep=None, orientation=‘horizontal’, initcolor=‘r’, track_color=‘lightgrey’, handle_style=None, **kwargs)

构造一个代表浮点范围的滑动条。

在 Axes中创建从 valmin 到 valmax 的滑动条。为了使滑动条保持响应,必须维护对其的引用。调用 on_changed() 连接到滑动条事件。

参数说明

  • ax,该参数类型是Axes。按钮将被放置到该Axes中。
  • labels,该参数类型是字符串列表。滑动条标签。
  • valmin,该参数类型是float。滑动条的最小值。
  • valmax,该参数类型是float。滑动条的最大值。
  • valinit,该参数类型是float, 默认为0.5。滑动条初始位置。
  • valfmt,该参数类型是字符串,默认为None。%-格式滑块值的格式字符串。如果None,则使用ScalarFormatter。
  • closemin,该参数类型是bool,默认值为True。滑动条区间底部是否闭合。
  • closemax,该参数类型是bool,默认值为True。滑动条区间顶部是否封闭。
  • slidermin,该参数类型是Slider,默认为None。不允许当前滑动条的值小于滑动条 slidermin 的值。
  • slidermax,该参数类型是Slider,默认为None。不允许当前滑动条的值大于滑动条 slidermax 的值。
  • dragging,该参数类型是bool,默认为True。如果为 True,则可以用鼠标拖动滑块。
  • valstep,该参数类型是float 或类似数组,默认值为None。如果是浮动的,滑动条将捕捉到 valstep 的倍数。如果是数组,滑动条将捕捉到数组中的值。
  • orientation,该参数类型是{‘horizontal’, ‘vertical’}, 默认为’horizontal’。滑动条的方向。
  • initcolor,该参数类型是color,默认为’r’。valinit 位置处线条的颜色。设置为None,表示没有线。
  • track_color,该参数类型是color,默认为’lightgrey’。背景轨道的颜色。可以通过 track 属性访问,该轨道以进行进一步的样式设置。
  • handle_style,该参数类型是dict。滑动条手柄的属性。

APIs

词法:on_changed(func)
将 func 作为回调函数连接到滑块值的更改。

参数

  • func,更改滑块时调用的函数。该函数必须接受单个浮点数作为其参数。

返回值

  • int,连接id(可用于断开func)。

词法:set_val(val)
将滑动条值设置为 val。

参数

  • val,参数类型int。

应用实列

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

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(left=0.15, 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_changed(val):
    i = (int)(val % len(freqs))
    ydata = np.sin(2*np.pi*freqs[i]*t)
    l.set_ydata(ydata)
    l.set_color("#0000FF")
    plt.draw()

if __name__ == "__main__":
    ax = plt.axes([0.2, 0.01, 0.60, 0.2])
    style = {"facecolor":"#8F0000", "edgecolor":"#00008F"}
    w_radio = Slider(ax, "Slider", 0.10, len(freqs), track_color="#00FF00", handle_style=style)
    w_radio.on_changed(on_changed)

    plt.show()

实列屏幕输出

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值