Matplotlib 中 X 轴的换行符导致意外的窗口大小调整/跳跃/闪烁行为

2023-12-20

我正在 matplotlib 中的 x 轴上绘制日期和时间。因为我想绘制尽可能多的标签,所以我在 x 标签中使用换行符,如下所示:

不幸的是,当我将鼠标悬停在图表上时,这会产生调整 matplotlib 窗口大小的副作用,因为它尝试在底部打印包含换行符的 x 值。 请参阅此处的视频作为演示:

YouTube 视频链接 https://youtu.be/TlzE1rB1J70,以全分辨率观看。

有时它甚至会导致整个图表闪烁,这并不会让交互变得有趣。我不想删除工具栏,但我只需要它不打印右下角的 x 点(这就是导致窗口调整大小的原因)。

知道如何保留工具栏但避免这种跳跃/闪烁问题吗?我的代码如下:

import os
import pandas
import matplotlib.pyplot as mp
import matplotlib.dates as md
import numpy as np
import datetime as dt
import time

for entry in os.scandir('estimated_finish_times'):
  if entry.name.endswith('.csv'):
    print(entry.name)
    df = pandas.read_csv(entry.path)
    df['lookahead_finish'] = df['polltime'] + df['lookahead_time']
    df['combined_rate_finish'] = df['polltime'] + df['combined_rate_time']
    
    xd = [dt.datetime.fromtimestamp(ts) for ts in df['polltime']]
    x1 = md.date2num(xd)
    
    yd = [dt.datetime.fromtimestamp(ts) for ts in df['lookahead_finish']]
    y1 = md.date2num(yd) # df['lookahead_finish']
    
    yd = [dt.datetime.fromtimestamp(ts) for ts in df['combined_rate_finish']]
    y2 = md.date2num(yd) # df['lookahead_finish']
    
    fig, ax = mp.subplots(figsize=(22, 11))
    
    yfmt = md.DateFormatter('%b. %d, %Y at %I:%M %p')
    xfmt = md.DateFormatter('%b. %d\n%I:%M\n%p\n%Y')
    ax.xaxis.set_major_formatter(xfmt)
    ax.xaxis.set_major_locator(mp.MaxNLocator(20))
    ax.yaxis.set_major_formatter(yfmt)
    ax.yaxis.set_major_locator(mp.MaxNLocator(20))
    
    mp.plot(x1, y1, linewidth=2, label='lookahead_finish', marker='.', alpha=0.5)
    mp.plot(x1, y2, linewidth=2, label='combined_rate_finish', marker='.', alpha=0.3)
    
    mp.legend(bbox_to_anchor=(1.11, 1.0), loc="upper right")
    mp.title(f'{entry.name} Estimated Finish Time')
    mp.grid()
    # fig.canvas.toolbar.pack_forget()
    mp.show()

请注意,数据帧中的每一列只是 unix 时间戳(诸如1665123089,即dtype: int64)。另外,我使用的是 Windows 10、Python 3.8.2,并且matplotlib==3.2.1.

我仍然希望控件可以访问,而不是隐藏工具栏(这是建议的解决方案):


我不想删除工具栏,但我只需要它不打印右下角的 x 点(这就是导致窗口调整大小的原因)。

你可以猴子补丁ax.format_coord显示给定 x、y 值(或如下 None)的不同格式的字符串。

fig, ax = plt.subplots()
ax.format_coord = lambda x, y : '' # don't display anything
plt.show()

如果要修改原来的字符串ax.format_coord,那么你必须包装原始函数:

fig, ax = plt.subplots()
old_function = ax.format_coord
ax.format_coord = lambda x, y: old_function(x, y) + "some random nonsense"
plt.show()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Matplotlib 中 X 轴的换行符导致意外的窗口大小调整/跳跃/闪烁行为 的相关文章

随机推荐

  • 将 RSS feed 输出为 html?

    是否有任何免费的 php javascript 库可以帮助将 RSS feed 显示为 html 在我看来简单派 http simplepie org是最好的 RSS 解析器之一 这是一个例子 require once simplepie
  • 如果我将所有图像保留在drawable-hdpi 文件夹中会发生什么?

    我的所有图像都在drawable hdpi 文件夹中 我完成了所有屏幕尺寸的所有布局 但我忘记将图像放入drawable mdpi文件夹和drawable ldpi文件夹中 如果具有 mdpi 屏幕密度的手机要下载我的应用程序 它会只使用
  • 在不知道高度宽度的情况下用背景图像填充 SVG 路径

    我能够创建一个包含填充 SVG 路径的 SVG 图像 正如这个问题中已经提到的 使用背景图像填充 SVG 路径元素 https stackoverflow com questions 3796025 fill svg path elemen
  • 如何使用7z SDK压缩和解压文件

    根据这个链接如何使用 NET 创建 7 Zip 档案 https stackoverflow com questions 222030 how do i create 7 zip archives with net WOPR 告诉我们如何使
  • 为什么 :host 选择器只能在带有 platform.js 的 chrome 中工作?

    关于如何设计 Web 组件的样式有很多讨论 例如 http www html5rocks com en tutorials webcomponents shadowdom 201 http www html5rocks com en tut
  • 方案:何时使用 let、let* 和 letrec? [复制]

    这个问题在这里已经有答案了 let let 和 letrec 之间有什么区别 请给出详尽的解释和例子 你最好的选择是阅读R5RS 官方说明 http www schemers org Documents Standards R5RS HTM
  • 如何从app.config获取这个配置值?

    我的朋友有以下 app config 他想要获得的价值address 怎么做
  • 如何将 Ransack 搜索保存到数据库?

    我正在尝试将 Ransack 搜索保存到数据库中 我相信我应该能够存储params q 值 然后当我想调用搜索时将其附加到搜索 URL 我不知道如何保存params q 不过 值 Ransack 创建的 URL 是这样的 http site
  • 极限分片:每个用户一个 SQLite 数据库

    我正在开发一个介于电子邮件服务和社交网络之间的网络应用程序 我觉得它未来有潜力变得非常大 所以我担心可扩展性 我决定为每个活动用户创建一个单独的 SQLite 数据库 每个 分片 一个活动用户 而不是使用一个集中式 MySQL InnoDB
  • 如何使用log4j2删除旧日志

    仅供参考 我已经在网上搜索了很多文档 我使用的是storm 0 10 0 beta1 Storm中log4j2的配置文件是worker xml 现在 我尝试使用log4j2 我正在寻找删除旧日志的方法 但我找不到 部分配置如下
  • 在“for in”循环中访问迭代器

    根据我的理解 当运行如下代码时 for i in MyObject print i 我的对象 iter 函数运行 for 循环使用它返回的迭代器来运行循环 是否可以在循环中访问此迭代器对象 它是一个隐藏的局部变量 还是类似的东西 我想做以下
  • UITextView 加载时未滚动到顶部

    当我的文本未填充 UITextView 时 它会按预期滚动到顶部 当文本超出屏幕所能容纳的范围时 UITextView 会滚动到文本的中间 而不是顶部 以下是一些可能相关的详细信息 在 viewDidLoad 中在 UITextView 的
  • 在 Django 模板中显示反向多对多

    我正在为小型销售 CRM 应用程序创建警报 通知系统 我有一个 Lead Contact 模型 用于存储客户的姓名 地址等 以及一个 Contact Notifier 模型 用于跟踪首次联系客户的时间 最后一次联系以及我们何时进行下一步联系
  • Python Tkinter 根标题不起作用

    我似乎无法给我的窗口命名 他们都有标题 Tk 我相信我的代码是正确的 所以如果这是错误的 请纠正我 from Tkinter import root Tk root title Title root mainloop 标题仍然是Tk 我可以
  • 为什么VS代码中的这个问题匹配器不起作用?

    为什么我的 ProblemMatcher 不起作用 我对正则表达式非常确定 但它没有报告任何问题 即使标准输出上有一些问题 the matcher problemMatcher owner typescript fileLocation r
  • PAR::Packer 如何工作?

    我正在使用 PAR Packer 这个问题突然出现在我的脑海中 PAR Packer 在 Perl 中如何工作 真的吗compilePerl 脚本到 exe 就像 g 将 C 源代码编译到 exe 一样 还是像 Python 中的 py2e
  • 自首次启动以来的时间

    我正在开发一个 Android 应用程序 并遇到了确定系统首次启动时间的问题 我的意思是我需要测量多少从设备首次启动起已经过了时间 我知道有关侦听 ACTION BOOT COMPLETED 并将任何内容保存在 SharedPreferen
  • C# 与 C++ - 类型、继承和 vtable

    我无法理解导致 C 和 C 之间差异的原因 首先我们有一个例子 其中基类包含一个虚函数 class Base protected int super public virtual int f 0 class Derived public B
  • 我如何使用.NET 获悉我的客户端IP?

    我需要来自whatismyip com 的客户端IP 但我认为正则表达式模式不正确 你能帮我这个图案吗 您是否阅读了获取的 HTML 中的注释 请设置您的代码以进行抓取 你的IP来自 www whatismyip com automatio
  • Matplotlib 中 X 轴的换行符导致意外的窗口大小调整/跳跃/闪烁行为

    我正在 matplotlib 中的 x 轴上绘制日期和时间 因为我想绘制尽可能多的标签 所以我在 x 标签中使用换行符 如下所示 不幸的是 当我将鼠标悬停在图表上时 这会产生调整 matplotlib 窗口大小的副作用 因为它尝试在底部打印