Python / Matplotlib -- 按一年中的某一天列出的日期直方图

2023-12-26

我有一个跨越数百年的日期列表。我想制作一个包含 366 个桶的直方图,一个桶代表一年中的每一天,x 轴以清晰的方式标记,让我可以看到哪个日期是哪个日期(我预计 2 月 29 日会出现下降) , 例如)。

我制作了以下直方图,但易于阅读的 X 轴日期标签会很棒。下面的代码看起来很麻烦,但得到了我想要的(没有 X 轴标签):

from datetime import date, datetime, timedelta
from collections import Counter
import pylab


def plot_data(data):
    """data is a list of dicts that contain a field "date" with a datetime."""

    def get_day(d):
        return d.strftime("%B %d")  # e.g. January 01

    days = []
    n = 366
    start_date = date(2020, 1, 1)  # pick a leap year
    for i in range(n):
        d = start_date + timedelta(days=i)
        days.append(get_day(d))

    counts = Counter(get_day(d['date']) for d in data)
    
    Y = [counts.get(d) for d in days]
    X = list(range(len(days)))

    pylab.bar(X, Y)
    pylab.xlim([0, n])

    pylab.title("Dates day of year")
    pylab.xlabel("Day of Year (0-366)")
    pylab.ylabel("Count")
    pylab.savefig("Figure 1.png")

任何帮助缩短此时间并使 x 轴日期更加灵活和清晰的帮助将不胜感激!


UPDATE

我已将以下想法纳入以下要点 https://gist.github.com/jsundram/ef0543b7c86128faba2c81b887459eaf,它产生如下所示的输出:


尝试检查这段代码:

# import section
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as md
import numpy as np
from datetime import date
from itertools import product

# generate a dataframe like yours
date = [date(2020, m, d).strftime("%B %d") for m, d in product(range(1, 13, 1), range(1, 29, 1))]
value = np.abs(np.random.randn(len(date)))
data = pd.DataFrame({'date': date,
                     'value': value})
data.set_index('date', inplace = True)

# convert index from str to date
data.index = pd.to_datetime(data.index, format = '%B %d')

# plot
fig, ax = plt.subplots(1, 1, figsize = (16, 8))
ax.bar(data.index,
       data['value'])

# formatting xaxis
ax.xaxis.set_major_locator(md.DayLocator(interval = 5))
ax.xaxis.set_major_formatter(md.DateFormatter('%B %d'))
plt.setp(ax.xaxis.get_majorticklabels(), rotation = 90)
ax.set_xlim([data.index[0], data.index[-1]])

plt.show()

这给了我这个情节:

我将数据帧的索引从字符串转换为日期,然后应用了我想要的 xaxis 格式ax.xaxis.set_major_locator and ax.xaxis.set_major_formatter方法。
为了绘制我使用的matplotlib,但将这种方法转化为应该不难pylab.


EDIT

如果您想要几天和几个月的单独刻度,您可以添加辅助轴(选中此example https://matplotlib.org/examples/axes_grid/demo_parasite_axes2.html)如这段代码所示:

# import section
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as md
import numpy as np
from datetime import date
from itertools import product
from mpl_toolkits.axes_grid1 import host_subplot
import mpl_toolkits.axisartist as AA

# generate a dataframe like yours
date = [date(2020, m, d).strftime("%B %d") for m, d in product(range(1, 13, 1), range(1, 29, 1))]
value = np.abs(np.random.randn(len(date)))
data = pd.DataFrame({'date': date,
                     'value': value})
data.set_index('date', inplace = True)

# convert index from str to date
data.index = pd.to_datetime(data.index, format = '%B %d')

# prepare days and months axes
fig = plt.figure(figsize = (16, 8))
days = host_subplot(111, axes_class = AA.Axes, figure = fig)
plt.subplots_adjust(bottom = 0.1)
months = days.twiny()

# position months axis
offset = -20
new_fixed_axis = months.get_grid_helper().new_fixed_axis
months.axis['bottom'] = new_fixed_axis(loc = 'bottom',
                                       axes = months,
                                       offset = (0, offset))
months.axis['bottom'].toggle(all = True)

#plot
days.bar(data.index, data['value'])

# formatting days axis
days.xaxis.set_major_locator(md.DayLocator(interval = 10))
days.xaxis.set_major_formatter(md.DateFormatter('%d'))
plt.setp(days.xaxis.get_majorticklabels(), rotation = 0)
days.set_xlim([data.index[0], data.index[-1]])

# formatting months axis
months.xaxis.set_major_locator(md.MonthLocator())
months.xaxis.set_major_formatter(md.DateFormatter('%b'))
months.set_xlim([data.index[0], data.index[-1]])

plt.show()

产生这个图:

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

Python / Matplotlib -- 按一年中的某一天列出的日期直方图 的相关文章

  • Gunicorn 工作人员无论如何都会超时

    我正在尝试通过gunicorn运行一个简单的烧瓶应用程序 但是无论我做什么 我的工作人员都会超时 无论是否有针对应用程序的活动 工作人员在我设置任何内容后总是会超时timeout值到 是什么导致它们超时 当我发出请求时 请求成功通过 但工作
  • 如何在 __init__ 中使用await设置类属性

    我如何定义一个类await在构造函数或类体中 例如我想要的 import asyncio some code class Foo object async def init self settings self settings setti
  • 在 Python 中将列表元素作为单独的项目返回

    Stackoverflow 的朋友们大家好 我有一个计算列表的函数 我想单独返回列表的每个元素 如下所示 接收此返回的函数旨在处理未定义数量的参数 def foo my list 1 2 3 4 return 1 2 3 4 列表中的元素数
  • 在 Celery 任务中调用 Google Cloud API 永远不会返回

    我正在尝试拨打外部电话Google Cloud Natural Language API从一个内Celery任务 使用google cloud python包裹 问题是对 API 的调用永远不会返回 挂起 celery task def g
  • pandas DataFrame.join 的运行时间是多少(大“O”顺序)?

    这个问题更具概念性 理论性 与非常大的数据集的运行时间有关 所以我很抱歉没有一个最小的例子来展示 我有一堆来自两个不同传感器的数据帧 我需要最终将它们连接成两个very来自两个不同传感器的大数据帧 df snsr1 and df snsr2
  • python multiprocessing 设置生成进程等待

    是否可以生成一些进程并将生成进程设置为等待生成的进程完成 下面是我用过的一个例子 import multiprocessing import time import sys def daemon p multiprocessing curr
  • Python 3d 绘图设置固定色阶

    我正在尝试绘制两个 3d 数组 第一个数组的 z 值在范围内 0 15 0 15 第二个来自 0 001 0 001 当我绘图时 色标自动遵循数据范围 如何设置自定义比例 我不想看到 0 001 的浅色 而应该看到 0 15 的浅色 如何修
  • PyQt 使用 ctrl+Enter 触发按钮

    我正在尝试在我的应用程序中触发 确定 按钮 我当前尝试的代码是这样的 self okPushButton setShortcut ctrl Enter 然而 它不起作用 这是有道理的 我尝试查找一些按键序列here http ftp ics
  • MongoEngine 查询具有以列表中指定的前缀开头的属性的对象的列表

    我需要在 Mongo 数据库中查询具有以列表中任何前缀开头的特定属性的元素 现在我有一段这样的代码 query mymodel terms term in query terms 并且这会匹配在列表 term 上有一个项目的对象 该列表中的
  • 打印包含字符串和其他 2 个变量的变量

    var a 8 var b 3 var c hello my name is var a and var b bye print var c 当我运行程序时 var c 会像这样打印出来 hello my name is 8 and 3 b
  • 使用 Python Oauthlib 通过服务帐户验证 Google API

    我不想使用适用于 Python 的 Google API 客户端库 但仍想使用 Python 访问 Google APIOauthlib https github com idan oauthlib 创建服务帐户后谷歌开发者控制台 http
  • 导入错误:没有名为flask.ext.login的模块

    我的flask login 模块有问题 我已经成功安装了flask login模块 另外 从命令提示符我可以轻松运行此脚本 不会出现错误 Python 2 7 r27 82525 Jul 4 2010 07 43 08 MSC v 1500
  • 获取两个工作日之间的天数差异

    这听起来很简单 但我不明白其中的意义 那么获取两次之间的天数的最简单方法是什么DayOfWeeks当第一个是起点时 如果下一个工作日较早 则应考虑在下周 The DayOfWeek 枚举 http 20 20 5B1 5D 3a 20htt
  • 尽管我已在 python ctypes 中设置了信号处理程序,但并未调用它

    我尝试过使用 sigaction 和 ctypes 设置信号处理程序 我知道它可以与python中的信号模块一起使用 但我想尝试学习 当我向该进程发送 SIGTERM 时 但它没有调用我设置的处理程序 只打印 终止 为什么它不调用处理程序
  • 如何将 ascii 值列表转换为 python 中的字符串?

    我在 Python 程序中有一个列表 其中包含一系列数字 这些数字本身就是 ASCII 值 如何将其转换为可以在屏幕上回显的 常规 字符串 您可能正在寻找 chr gt gt gt L 104 101 108 108 111 44 32 1
  • 如何将 GAE 中一种 Kind 中的所有实体复制到另一种 Kind 中,而无需显式调用每个属性

    我们如何使用function clone entity 如中所述在 Python 中复制 Google App Engine 数据存储中的实体 而无需在 编译 时知道属性名称 https stackoverflow com question
  • 在 Google App Engine 中,如何避免创建具有相同属性的重复实体?

    我正在尝试添加一个事务 以避免创建具有相同属性的两个实体 在我的应用程序中 每次看到新的 Google 用户登录时 我都会创建一个新的播放器 当新的 Google 用户在几毫秒内进行多个 json 调用时 我当前的实现偶尔会创建重复的播放器
  • Javascript转换时区问题

    我在转换当前时区的日期时间时遇到问题 我从服务器收到此日期字符串 格式为 2015 10 09T08 00 00 这是中部时间 但是当我使用 GMT 5 中的 new Date strDate 转换此日期时间时 它返回给我的信息如下 这是不
  • 制作一份 Python 文档的 PDF 文件

    Python 官方网站提供 PDF 文档下载 但它们是按章节分隔的 我下载了源代码并构建了 PDF 文档 这些文档也是单独的 PDF 我怎么能够从源代码中的 Makefile 构建一个 PDF 文件 我认为这样阅读起来会更方便 如果连接单独
  • 如何在 Flask 中的视图函数/会话之间传递复杂对象

    我正在编写一个 Web 应用程序 当 且仅当 用户登录时 该应用程序从第三方服务器接收大量数据 这些数据被解析为自定义对象并存储在list 现在 用户在应用程序中使用这些数据 调用不同的视图 例如发送不同的请求 我不确定什么是最好的模式在视

随机推荐

  • Python 在 OS X 上的文本文件中捕获击键值

    我正在尝试监视 Macbook 上的击键 以构建统计分析器 但是我如何将字符与 事件 隔离开来 这更像是 NSEvent 类型 KeyDown loc 850 248 时间 66551 8标志 0x100胜利 0x0 winNum 0 ct
  • ASP.NET Core 中的 URL 编码和解码

    HttpContext Current Server UrlEncode 这仅适用于 NET Framework 如何在 ASP NET Core 中对 URI 参数进行编码或解码 对于 ASP NET Core 2 0 只需添加Syste
  • WPF Dispatcher {“调用线程无法访问此对象,因为另一个线程拥有它。”}

    首先我需要说我对 WPF 和 C 很菜鸟 应用程序 创建 Mandelbrot 图像 GUI 我的调度程序在这种情况下工作得很好 private void progressBarRefresh while con Progress lt 9
  • jquery/javascript 将纯文本消息转换为文本输入字段

    我有以下请求 创建一个纯文本字段 单击编辑触发器时该字段会转换为文本输入元素 离开输入元素时 文本将存储在数据库中 并且该字段将转换回包含新内容的纯文本字段 当在输入中按下 ESC 时 将恢复最近的值 为此 我使用以下代码 div span
  • 从 Laravel 5 中的中间件获取当前路由操作名称

    我有一个这样的中间件
  • 使用 PHP 从 HTTP 重定向到 HTTPS

    我正在开发一个购物车网站 我想在用户输入帐单详细信息时将其重定向到 HTTPS 页面 并保持下一页的 HTTPS 连接 直到他注销 为了做到这一点 我需要在服务器上安装什么 我正在使用 Apache 以及如何从 PHP 完成此重定向 尝试这
  • Angular2 中的错误处理程序

    我有一个关于新类 ErrorHandler 包含在 RC 6 中 的问题 我从官方文档中做了示例 https angular io docs ts latest api core index ErrorHandler class html
  • 如何配置 Vue 路由器来响应查询字符串?

    我的路由器配置如下 它有效并且做了它应该做的事情 import Demo1 from vuex modules demo demo1 vue import Demo2 from vuex modules demo demo2 vue exp
  • ECS无效参考格式错误

    我尝试通过运行任务 由任务定义定义 来使用 Amazon ECS 部署和运行简单的 Dockerized Ruby 后端 但它无法运行我的命令并返回以下错误 CannotPullContainerError API 错误 400 参考格式无
  • void 大小未知时的指针算术 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Ansible,使用 if then else 语句 set_fact

    我试图在运行时根据另一个变量在 Ansible 中使用 set fact 设置一个变量 无论实际值是多少 都使用第一个值 这是我的代码示例 name Global vars get date info set fact jm env loo
  • 表达式树在哪些情况下很有用?

    我完全理解表达式树的概念 但我很难找到它们有用的情况 是否有可以应用表达式树的特定实例 或者它仅作为代码传输机制有用 我觉得我在这里错过了一些东西 谢谢 一些单元测试模拟框架利用表达式树来建立强类型的期望 验证 IE myMock Veri
  • LinkedIn 视频分析 API - timeRange 无效

    使用 linkedIn 视频分析 API 我想每天收集有关我的视频帖子的分析 我的请求 https api linkedin com v2 videoAnalytics q entity entity urn li ugcPost 6662
  • 子/子子域等中间是否可以有通配符?

    如果我想要一个网站域名 其内容如下at last com 其中中间的单词 域可以更改或根本不存在 例如at long last com at final last com或者没有例如at last com 这是否可能 或者是否需要为每个条目
  • ASP.NET 网站 DLL:调试版本与发布版本

    将 ASP NET Web 应用程序 dll 文件上传到网站的 bin 目录时 与重新编译发布版本相比 使用调试版本是否有任何缺点 例如 在网站本地工作时 构建配置设置为 调试 当一切看起来不错时 我会继续上传网站 网络应用程序的最新 dl
  • Tridion UGC 评论显示作者为空

    我已经为用户生成的内容配置了 Tridion 并使用默认 演示模板创建了一个网页 该模板使用文本输入字段来提供评论作者的姓名 评论已被接受 但在显示时 它们将用户名显示为 null 我认为问题在于存储名称 而不是检索它 如果我在内容管理器
  • 使用强名称签署我的程序集会使其无法工作

    我的一位同事在 VB net 中创建了一个程序集 以便通过 COM 互操作与 JScript 一起使用 该程序集过去运行良好 但我们对其进行了签名 现在它似乎只能在 Windows 7 计算机上运行 我测试了 2 台 Windows 7 机
  • 如何使 QTextDocument 适合打印机的整个页面宽度

    在之前的 stackoverflow 之后讨论 https stackoverflow com a 47879329 3336423 我正在尝试使用以下命令生成包含文本和图像的 pdfQt and QTextDocument 这是我作为 M
  • 使用 SQLAlchemy 进行简单验证

    我是 sqlalchemy 的新手 我正在尝试实现模型字段的简单验证 如 Django ORM 提供的那样 整数 电子邮件等的最小值和最大值 SQLAlchemy 可以开箱即用地进行这种字段验证吗 顺便说一句 我将 SQLAlchemy 与
  • Python / Matplotlib -- 按一年中的某一天列出的日期直方图

    我有一个跨越数百年的日期列表 我想制作一个包含 366 个桶的直方图 一个桶代表一年中的每一天 x 轴以清晰的方式标记 让我可以看到哪个日期是哪个日期 我预计 2 月 29 日会出现下降 例如 我制作了以下直方图 但易于阅读的 X 轴日期标