当前位置: 首页 > news >正文

Python库matplotlib之五

Python库matplotlib之五

  • 小部件(widget)
    • RangeSlider
      • 构造器
      • APIs
      • 应用实列
    • TextBox
      • 构造器
      • APIs
      • 应用实列

小部件(widget)

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

RangeSlider

RangeSlider的属性

  • val,浮点元组

构造器

词法:RangeSlider(ax, label, valmin, valmax, valinit=None, valfmt=None, closedmin=True, closedmax=True, dragging=True, valstep=None, orientation=‘horizontal’, track_color=‘lightgrey’, handle_style=None, **kwargs)

产生一个滑动条,这个滑动条代表浮点值范围。通过 (min, max) 的元组属性val,定义范围的最小值和最大值。

创建一个滑动条,定义包含在ax中的 [valmin, valmax] 的范围。为了使滑动条保持响应,必须维护对其的引用。调用 on_changed() 连接到滑块事件。

参数说明

  • ax,该参数类型是Axes。RangeSlider将被放置到该Axes中。
  • label,该参数类型是字符串。滑动条标签。
  • valmin,该参数类型是float。滑动条的最小值。
  • valmax,该参数类型是float。滑块的最大值。
  • valinit,该参数类型是浮点元组或None, 默认值为None。滑动条的初始位置。如果是None,初始位置将位于范围的25%和75%。
  • valfmt,该参数类型是字符串,默认值为None。%-格式字符串用于格式化滑动条的值。如果没有,则使用 ScalarFormatter。
  • closemin,该参数类型是bool,默认值为True。滑块区间底部是否闭合。
  • closemax,该参数类型是bool,默认值为True。滑块区间顶部是否封闭。
  • dragging,该参数类型是bool,默认值为True。如果为True,则可以用鼠标拖滑动条。
  • valstep,该参数类型是float,默认值为None。如果有一个给定值,则滑动条将捕捉到 valstep 的倍数。
  • orientation,该参数类型是{‘horizontal’, ‘vertical’},默认值为’horizontal’。滑动条的方向。
  • track_color,该参数类型是color, 默认值为’lightgrey’。背景轨道的颜色。可以通过track属性访问该轨道,以进行进一步的样式设置。
  • handle_style,该参数类型是dict

APIs

函数说明
on_changed(func)将 func 作为回调函数,连接到滑块值的更改。返回值是一个整数,它是连接id,可用于断开func
set_max(max)将滑块的下限值设置为最大值。
set_min(min)将滑块的下限值设置为最小值。
set_val(val)将滑块值设置为 val。

应用实列

这个例子使用一个RangeSlider,去控制一个正弦波的频率。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import RangeSliderfreqs = 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_list):l_val = val_list[0]h_val = val_list[1]i = (int)((h_val - l_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 = RangeSlider(ax, "Slider", 0.0, len(freqs), track_color="#00FF00", handle_style=style,valinit=(1,100), valstep=0.5)w_radio.on_changed(on_changed)plt.show()

在这里插入图片描述

TextBox

TextBox的属性

  • ax,参数类型是Axes。TextBox将在该Axes中显示。
  • label,Text。
  • color,参数类型是color。未悬停时文本框的颜色。
  • hovercolor,参数类型是color。悬停时,文本框的颜色。

构造器

matplotlib.widgets.TextBox(ax, label, initial=‘’, color=‘.95’, hovercolor=‘1’, label_pad=0.01, textalignment=‘left’)

该构造器产生一个文本输入框。为了使文本框保持响应,您必须保留对它的引用。

每当文本更改时调用 on_text_change 进行更新。每当用户点击 Enter,或离开文本输入字段时,调用 on_submit 进行更新。

参数说明

  • ax,该参数类型是Axes。TextBox将被放置到该Axes中
  • label,该参数类型是字符串。此文本框的标签。
  • initial,该参数类型是字符串。文本框中的初始值。
  • color,该参数类型是color。文本框的颜色。
  • hovercolor,该参数类型是color。当鼠标悬停在方框上时,该方框的颜色。
  • label_pad,该参数类型是float。标签与文本框右侧之间的距离。
  • textalignment,该参数类型是{‘left’, ‘center’, ‘right’}。指定文本的对齐方式。

APIs

函数说明
disconnect(cid)删除连接 ID 为 cid 的观察者。
on_submit(func)当用户按下回车键或离开提交框时,使用事件调用此函数。返回一个连接 ID,可用于断开连接。
on_text_change(func)当文本更改时,通过事件调用此函数。返回一个连接 ID,可用于断开连接。
position_cursor(x)
set_val(val)
stop_typing()

应用实列

该应用实列使用TextBox改变ylabel,在TextBox中显示的内容,被直接用作有label。3个Slider改变正弦波的显示颜色。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider, TextBoxfreqs = np.arange(0.2, 2, 0.3)
fig, ax = plt.subplots()
ax.set_ylabel('Amplitue', 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.8, wspace=0.4, hspace=0.6)plt.subplots_adjust(bottom=0.45)
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)v_red = 0
v_green = 0
v_blue = 0def re_draw():global v_red, v_green, v_blues_red = hex(int(v_red))[2:]if len(s_red) < 2:s_red = '0' + s_reds_green = hex(int(v_green))[2:]if len(s_green) < 2:s_green = '0' + s_greens_blue = hex(int(v_blue))[2:]if len(s_blue) < 2:s_blue = '0' + s_bluecolor_s = "#{0}{1}{2}".format(s_red, s_green, s_blue)   l.set_color(color_s)plt.draw()def on_changed_red(val):global  v_redv_red = valre_draw()def on_changed_green(val):global v_greenv_green = valre_draw()def on_changed_blue(val):global v_bluev_blue = valre_draw()def on_ylabel_changed(s):ax.set_ylabel(s, color='#00ff00')plt.draw()def on_ylabel_submit(s):ax.set_ylabel(s, color='#ff0000')plt.draw()if __name__ == "__main__":text_ax_1 = plt.axes([0.2, 0.82, 0.60, 0.08])style_1 = {"facecolor":"#8F0000", "edgecolor":"#00008F"}w_text = TextBox(text_ax_1, "ylabel")w_text.on_text_change(on_ylabel_changed)w_text.on_submit(on_ylabel_submit)slider_ax_1 = plt.axes([0.2, 0.20, 0.60, 0.1])style_1 = {"facecolor":"#8F0000", "edgecolor":"#00008F"}w_silder_1 = Slider(slider_ax_1, "Red", 0.0, 255, track_color="#FF0000", handle_style=style_1, valstep=1.0)w_silder_1.on_changed(on_changed_red)slider_ax_2 = plt.axes([0.2, 0.13, 0.60, 0.1])style_2 = {"facecolor":"#008F00", "edgecolor":"#00008F"}w_silder_2 = Slider(slider_ax_2, "Green", 0.0, 255, track_color="#00FF00", handle_style=style_2, valstep=1.0)w_silder_2.on_changed(on_changed_green)slider_ax_3 = plt.axes([0.2, 0.06, 0.60, 0.1])style = {"facecolor":"#8F0000", "edgecolor":"#00008F"}w_silder_3 = Slider(slider_ax_3, "Blue", 0.0, 255, track_color="#0000FF", handle_style=style, valstep=1.0)w_silder_3.on_changed(on_changed_blue)plt.show()

在这里插入图片描述

相关文章:

  • 【RabbitMq源码阅读】分析RabbitMq发送消息源码
  • Robot Operating System——一组三维空间中的位姿(位置和方向)
  • Flink集群部署
  • kafka下载配置
  • Go 1.19.4 序列化和反序列化-Day 16
  • 速盾:视频开cdn合适还是视频点播合适?
  • 大模型智能体在金融公告理解领域的应用 | OPENAIGC开发者大赛高校组AI创新之星奖
  • 语音音频(wav)声纹识别-技术实现-python
  • 【JavaEE初阶】网络原理
  • 性能优化与资源管理:优化Selenium脚本的执行效率,合理管理浏览器实例和系统资源
  • CSS给一行按钮统一设置间隔
  • DarkLabel2.4版本导入MOT17数据集
  • 如何解决跨境电商税务管理难题
  • Android常用C++特性之lambda表达式
  • 2-107 基于matlab的hsv空间双边滤波去雾图像增强算法
  • [数据结构]链表的实现在PHP中
  • Angular Elements 及其运作原理
  • Apache的基本使用
  • canvas 绘制双线技巧
  • Java知识点总结(JavaIO-打印流)
  • MySQL用户中的%到底包不包括localhost?
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • ubuntu 下nginx安装 并支持https协议
  • 前端临床手札——文件上传
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 如何学习JavaEE,项目又该如何做?
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 我有几个粽子,和一个故事
  • 携程小程序初体验
  • 在Mac OS X上安装 Ruby运行环境
  • Prometheus VS InfluxDB
  • 容器镜像
  • ​Redis 实现计数器和限速器的
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • #14vue3生成表单并跳转到外部地址的方式
  • #pragma multi_compile #pragma shader_feature
  • #window11设置系统变量#
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (20)docke容器
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (三)uboot源码分析
  • (十) 初识 Docker file
  • .Net Core中的内存缓存实现——Redis及MemoryCache(2个可选)方案的实现
  • .Net Winform开发笔记(一)
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • .net快速开发框架源码分享
  • @antv/x6 利用interacting方法来设置禁止结点移动的方法实现。
  • [3D游戏开发实践] Cocos Cyberpunk 源码解读-高中低端机性能适配策略
  • [AIGC] Nacos:一个简单 yet powerful 的配置中心和服务注册中心
  • [C++] sqlite3_get_table 的使用
  • [C++]类和对象(中)
  • [CODE:-5504]没有[SYS.SYSOBJECTS]对象的查询权限