matplotlib 中的 Pandas 自动日期时间格式

2023-12-02

我经常在一个图中绘制来自不同来源的多个时间序列数据,其中一些需要使用 matplotlib。格式化 x 轴时,我使用 matplotlibautofmt_xdate(),但我更喜欢 pandas 的自动格式化。我知道我可以使用手动设置格式set_major_formatter(),但我创建的图的总范围从年到天不等,因此我需要根据每个图调整格式。有没有办法将 matplotlib 设置为使用类似于 pandas 的日期自动格式化 x 轴?

我还使用交互式绘图,并且在使用 pandas 时df.plot()当缩放到各自的范围时,x 轴会更新,如下所示,我也想使用 matplotlib 来实现:

pandas format month pandas format day pandas format inter-day

版本:

Python: 3.7.1
Pandas: 0.23.3
Matplotlib: 2.2.2

所需格式:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

ix = pd.date_range('1/1/2017', '11/1/2018', freq='D')
vals = np.random.randn(len(ix))
df = pd.DataFrame({'Values': vals}, index=ix)

fig, ax = plt.subplots(1, 1, figsize=[8,6])
df.plot(ax=ax, lw=1)
plt.show()

desired pandas format

当前格式:

fig, ax = plt.subplots(1, 1, figsize=[8,6])
ax.plot(df, lw=1)
fig.autofmt_xdate()
plt.show()

Current matplotlib format


在第二行显示年份的一个选项是使用主要和次要刻度标签。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.dates import MonthLocator, YearLocator, DateFormatter

ix = pd.date_range('1/1/2017', '11/1/2018', freq='D')
vals = np.random.randn(len(ix))
s = pd.DataFrame({'Values': vals}, index=ix)

fig, ax = plt.subplots(figsize=[8,6])
ax.plot(s, lw=1)

ax.xaxis.set_major_locator(YearLocator())
ax.xaxis.set_major_formatter(DateFormatter("\n%Y"))

ax.xaxis.set_minor_locator(MonthLocator((1,4,7,10)))
ax.xaxis.set_minor_formatter(DateFormatter("%b"))

plt.show()

如果您需要次要刻度用于其他用途,则以下内容将单独格式化主要刻度 - 具有相同的结果。在这里,您将使用 FuncFormatter 根据月份确定格式。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.dates import MonthLocator, DateFormatter
from matplotlib.ticker import FuncFormatter

ix = pd.date_range('1/1/2017', '11/1/2018', freq='D')
vals = np.random.randn(len(ix))
s = pd.DataFrame({'Values': vals}, index=ix)

fig, ax = plt.subplots(figsize=[8,6])
ax.plot(s, lw=1)

monthfmt = DateFormatter("%b")
yearfmt = DateFormatter("%Y")

def combinedfmt(x,pos):
    string = monthfmt(x)
    if string == "Jan":
        string += "\n" + yearfmt(x)
    return string

ax.xaxis.set_major_locator(MonthLocator((1,4,7,10)))
ax.xaxis.set_major_formatter(FuncFormatter(combinedfmt))

plt.show()

两种情况的结果是相同的:

enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

matplotlib 中的 Pandas 自动日期时间格式 的相关文章

随机推荐

  • 在远程计算机上安装软件? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 这看起来像是一个垃圾问题 但我对 VbScript 的完全无知让我没有机会尝试解
  • Python sqlite3 和并发

    我有一个使用 线程 模块的Python 程序 每秒 我的程序都会启动一个新线程 从网络上获取一些数据 并将这些数据存储到我的硬盘上 我想使用 sqlite3 来存储这些结果 但我无法让它工作 问题似乎与以下行有关 conn sqlite3
  • jQuery MultiSelect dropdownlist 如何访问结果?

    如何从按 mvc3 razor 调用的 JQUery 多选下拉列表中获取结果 http abeautifulsite net blog 2008 04 jquery multiselect 多选插件使用 符号将选定的值发送到服务器 一如既往
  • 如何在 C# 中加载程序图标

    我有某个程序的路径 例如explorer 如何获取程序图标 将其转换为png jpeg 然后显示在PictureBox中 我有这样的事情 string filePath C myfile exe Icon TheIcon IconFromF
  • SQL转置数据

    我有一个名为 Forecast 的表 如下所示 Product BK 有大约 80 000 条记录 而 Month 有 12 条记录 States 保持不变 为 5 条 如何编写查询将数据转置为如下所示 这是在 SQL 服务器上 并且不喜欢
  • 数组除法 - 将数组中存储的两个数字相除的最佳方法是什么?

    我有两个数组 被除数 除数 dividend 1 2 0 9 8 7 5 6 6 divisor 9 8 我需要的结果 股息 除数 为 quotient 1 2 3 4 5 6 7 我使用数组减法做到了这一点 从被除数中减去除数 直到被除数
  • C# WebClient - DownloadString 编码错误

    我正在尝试从 Amazon 下载 html 文档 但由于某种原因 我得到了一个错误的编码字符串 例如 K g g e 这是我尝试过的代码 using var webClient new System Net WebClient var ur
  • 如何重塑和交错矩阵元素?

    有了时间序列的值 我想将其重塑为 nx4 矩阵 X y 以便使用这些值作为机器学习算法的输入和输出值 X i 是 1x3 输入向量 y 是输出标量值 该算法将每个第二个序列值 3 个值 作为输入 以便预测第四个值 举一个实际的例子 假设我们
  • 如何在 vscode 中查看全角代码

    我想在 VS Code 中编码时使用完整视口 但是当我展开 VS Code 窗口时 这些行并没有扩展 有修复吗 使用的正确配置 为了配置 V S 代码使得代码行在 你的编辑器只会在视口的末尾换行 并且 以前从未如此 您需要将正确的值分配给
  • 如何在使用 playwright-python 运行代码结束时保持浏览器打开?

    我想使用 playwright python 自动填写一些表格 然后在提交之前仔细检查填写内容 但它总是在代码运行结束时关闭浏览器 即使我使用了handleSIGHUP False handleSIGINT False handleSIGT
  • Espresso 测试被后台线程阻止。应用程序不空闲异常:“AppNotIdleException。”

    我的 android espresso 单元测试由于某些后台线程不空闲而被阻止 我如何找出哪个线程正在阻止我的应用程序执行 android support test espresso AppNotIdleException Looped f
  • 可以从现有的 java/scala 接口和数据类型生成 .thrift 文件吗?

    有没有一种简单的方法可以采用现有的 Java scala 数据类型和 API 接口并生成相应的 thrift 文件 让 Thrift 生成server数据结构具有过度侵入性 因为它会产生以下后果 我无法注释我的数据结构 例如 XML JSO
  • 如何仅在另一个元素内部时选择一个元素?

    我有一个关于 CSS 选择器的问题 我如何选择一个 div 仅当其位于 ul 有类名saft 这个 CSS 类在其他地方使用 我不想到处改变样式 div ul class saft li div class textSlide div li
  • 使用量角器 js 剪贴板中的文本

    如何使用量角器复制特定文本 我想使用此命令加载要粘贴的文本 return browser actions sendKeys Keys CONTROL v perform Sample 加载我的文本 test 然后使用此命令粘贴 test 我
  • 如何测量 Stackdriver 上的 Firestore 读写计数

    我需要监控 Firestore 数据库的实时读 写计数 我已经使用指标创建了仪表板 所附图像显示了当前配置 但是 这会显示速率 每秒 如何计算实际计数 或者是否有不同的聚合对齐器 如果您想将 计数 添加到现有图表中 请按照以下步骤操作 在仪
  • 如何使移动键盘外观与 div 发生碰撞而不是绝对将其自身定位在其上方?

    我正在开发一个简单的聊天组件 但遇到一个问题 在移动设备上 如果我单击文本框发送消息 而不是弹出其上方的消息列表 虚拟键盘会将自己绝对定位在它 这是不可取的 因为我希望用户在键入消息时能够看到最新消息 但是 我不知道如何纠正这种行为 而且我
  • 打算播放 YouTube 播放列表 [重复]

    这个问题在这里已经有答案了 我想从我的应用程序启动 YouTube 播放列表 对于单个视频来说这是显而易见的 startActivity new Intent Intent ACTION VIEW Uri parse http www yo
  • 从 SQL 到 MS Access 查询数据:本地表与传递表

    我创建了一个应用程序 它使用以下逻辑将数据从 SQL 查询到我的 MS Access 应用程序 我使用 ODBC 连接执行存储过程 使用此指定为传递查询以在本地提取数据 它看起来像这样 strSQL EXEC StoredProcedure
  • ImageIcon 不会更新具有相同 URL 的新图像

    我想使用 JLabel Icon 来显示来自我网站的图像 http xxx xxx xxx xxx java pic test jpg 我有一个刷新按钮来新建一个新的 JLabel 和 ImageIcon 为了获取最新的图像 程序运行成功
  • matplotlib 中的 Pandas 自动日期时间格式

    我经常在一个图中绘制来自不同来源的多个时间序列数据 其中一些需要使用 matplotlib 格式化 x 轴时 我使用 matplotlibautofmt xdate 但我更喜欢 pandas 的自动格式化 我知道我可以使用手动设置格式set