如何使 xtick 与 Python matplotlib 中的 xlim 不同?

2024-03-13

我想用 Python 制作一年中每天的动态图。

X轴的axes将是12个月,这个过程在Matplotlib中将是一个barh,代码如下:

import random
import datetime
import matplotlib.pyplot as plt

def get_percent():
    today = datetime.date.today()
    start = datetime.date(today.year, 1, 1)
    diff = today - start
    percent = diff.days/365.0
    return percent

fig = plt.figure(figsize=(8,2))
ax = fig.add_subplot(1,1,1)
percent = get_percent()

ax.axis([0, 12, 0, 1])
month = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug','Sep', 'Nov', 'Dec']
ax.set_xticklabels(month)
ax.set_xlim(0, 100)
ax.barh(bottom=0.5,width=int(percent*100),height=0.2)

plt.show()
plt.close()

但情节结束后,xtick 显示七月是全年的 100%,这不是我想要的。

我搜索了matplotlib的文档,但没有找到答案:(。如何让x轴刻度线显示一月-十二月,条形图显示一年的百分比?


如何使 xtick 与 Python matplotlib 中的 xlim 不同?

这是不可能的。xtick本质上是您的子域xlim(你的x范围)。 “刻度线”只不过是您的限制内的离散点,这些点是由您选择的产生的Locator https://matplotlib.org/api/ticker_api.html#tick-locating。从视觉上看,刻度线以两种方式呈现给您:首先,小正交线,我认为它给出了“刻度线”的名称,其次,显示在它附近的值。然而,如何向用户呈现价值又取决于所选择的Formatter https://matplotlib.org/api/ticker_api.html#matplotlib.ticker.Formatter。设置自定义标签归结为使用FixedFormatter https://matplotlib.org/api/ticker_api.html#matplotlib.ticker.FixedFormatter它只是返回本地刻度索引的任意标签。

See https://matplotlib.org/api/ticker_api.html https://matplotlib.org/api/ticker_api.html了解更多详情。


你的代码出了什么问题?

fig = plt.figure(figsize=(8,2))
ax = fig.add_subplot(1,1,1)
ax.axis([0, 12, 0, 1])
ax.get_xticks()
# returns array([  0.,   2.,   4.,   6.,   8.,  10.,  12.])

设置限制你如何精确地产生6 ticks:

如果您现在分配more自定义标签的数量大于实际的刻度数,超出的标签将被忽略。这是您经历过的行为。

有趣的事情。如果您设置自定义标签并随后增加刻度数(以及范围),会发生什么?

fig = plt.figure(figsize=(8,2))
ax = fig.add_subplot(1,1,1)
ax.axis([0, 12, 0, 1])
ax.set_xticklabels(['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep','Oct', 'Nov', 'Dec'])
ax.set_xticks(range(24))  # [0, 1, ..., 22, 23]
ax.get_xlim()
# returns (0.0, 23.0)

它会增加您的 x 范围 (!),并且不会显示超过 12 个刻度的标签:

请注意,您在设置标签后还显式更改了 x 范围。但因为底层格式化程序并不真正关心具体值,而是关心本地刻度索引,并且新的 x 范围具有相同数量的刻度,因此您无法真正看到发生了什么。设置后xlim(0, 100)你的蜱虫实际上是[0, 20, 40, ... 100]并不是[0 ... 12]不再了。这很容易导致错误,这就是为什么您应该始终尝试在一个域(第 0-12 个月,百分比 0-100/0-1)中一致地操作。


解决问题:选择域名!

在本示例中,我选择月份作为域,这意味着我们在 0 到 12 的范围内运行。请注意,下限 0 对应于 1 月 1 日,上限 12 对应于 12 月 31 日。我们现在可以左对齐每月刻度(等于ax.set_xticks(range(12)))或将它们集中在相应的月份下(等于import numpy as np; ax.set_xticks(np.arange(0, 12, 1) + 0.5))。当我们设定限制时(0, 12)修改刻度不会改变限制。

使用月份作为域还意味着您的百分比值(0, 1)是相对于(0, 12)并不是(0, 100)。因此,您必须将其乘以 12 才能获得所需的宽度。

把它们放在一起:

import random
import datetime
import matplotlib.pyplot as plt

def get_percent():
    today = datetime.date.today()
    start = datetime.date(today.year, 1, 1)
    diff = today - start
    percent = diff.days/365.0
    return percent

fig = plt.figure(figsize=(8,2))
ax = fig.add_subplot(1,1,1)
percent = get_percent()

ax.axis([0, 12, 0, 1])
month = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dec']
ax.set_xticks(range(12))  # ticks placed on [0, 1, ..., 11]
ax.set_xticklabels(month)
ax.barh(bottom=0.5,width=int(percent*12),height=0.2)

plt.show()
plt.close()

当您还删除类型转换时int设置条形宽度时,您会收到以下结果:

附:请原谅我用“Okt”而不是“Oct”。那是我工作中的德国灵魂..:)

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

如何使 xtick 与 Python matplotlib 中的 xlim 不同? 的相关文章

  • InterfaceError:连接已关闭(使用 django + celery + Scrapy)

    当我在 Celery 任务中使用 Scrapy 解析函数 有时可能需要 10 分钟 时 我得到了这个信息 我用 姜戈 1 6 5 django celery 3 1 16 芹菜 3 1 16 psycopg2 2 5 5 我也使用了psyc
  • 如何使用包含代码的“asyncio.sleep()”进行单元测试?

    我在编写 asyncio sleep 包含的单元测试时遇到问题 我要等待实际的睡眠时间吗 I used freezegun到嘲笑时间 当我尝试使用普通可调用对象运行测试时 这个库非常有用 但我找不到运行包含 asyncio sleep 的测
  • 为 pandas 数据透视表中的每个值列定义 aggfunc

    试图生成具有多个 值 列的数据透视表 我知道我可以使用 aggfunc 按照我想要的方式聚合值 但是如果我不想对两列求和或求平均值 而是想要一列的总和 同时求另一列的平均值 该怎么办 那么使用 pandas 可以做到这一点吗 df pd D
  • 安装后 Anaconda 提示损坏

    我刚刚安装张量流GPU创建单独的后环境按照以下指示here https github com antoniosehk keras tensorflow windows installation 但是 安装后当我关闭提示窗口并打开新航站楼弹出
  • 从 scikit-learn 导入 make_blobs [重复]

    这个问题在这里已经有答案了 我收到下一个警告 D Programming Python ML venv lib site packages sklearn utils deprecation py 77 DeprecationWarning
  • 如何使用装饰器禁用某些功能的中间件?

    我想模仿的行为csrf exempt see here https docs djangoproject com en 1 11 ref csrf django views decorators csrf csrf exempt and h
  • 运行多个 scrapy 蜘蛛的正确方法

    我只是尝试使用在同一进程中运行多个蜘蛛新的 scrapy 文档 http doc scrapy org en 1 0 topics practices html但我得到 AttributeError CrawlerProcess objec
  • 在 NumPy 中获取 ndarray 的索引和值

    我有一个 ndarrayA任意维数N 我想创建一个数组B元组 数组或列表 其中第一个N每个元组中的元素是索引 最后一个元素是该索引的值A 例如 A array 1 2 3 4 5 6 Then B 0 0 1 0 1 2 0 2 3 1 0
  • 使用 Pycharm 在 Windows 下启动应用程序时出现 UnicodeDecodeError

    问题是当我尝试启动应用程序 app py 时 我收到以下错误 UnicodeDecodeError utf 8 编解码器无法解码位置 5 中的字节 0xb3 起始字节无效 整个文件app py coding utf 8 from flask
  • Abaqus 将曲面转化为集合

    我一直试图在模型中找到两个表面的中心 参见照片 但未能成功 它们是元素表面 面 查询中没有选项可以查找元素表面的中心 只能查找元素集的中心 找到节点集的中心也很好 但是我的节点集没有出现在工具 gt 查询 gt 质量属性选项中 而且我找不到
  • Pandas Dataframe 中 bool 值的条件前向填充

    问题 如何转发 fill boolTruepandas 数据框中的值 如果是当天的第一个条目 True 到一天结束时 请参阅以下示例和所需的输出 Data import pandas as pd import numpy as np df
  • 表达式中的 Python 'in' 关键字与 for 循环中的比较 [重复]

    这个问题在这里已经有答案了 我明白什么是in运算符在此代码中执行的操作 some list 1 2 3 4 5 print 2 in some list 我也明白i将采用此代码中列表的每个值 for i in 1 2 3 4 5 print
  • Python:尝试检查有效的电话号码

    我正在尝试编写一个接受以下格式的电话号码的程序XXX XXX XXXX并将条目中的任何字母翻译为其相应的数字 现在我有了这个 如果启动不正确 它将允许您重新输入正确的数字 然后它会翻译输入的原始数字 我该如何解决 def main phon
  • 循环中断打破tqdm

    下面的简单代码使用tqdm https github com tqdm tqdm在循环迭代时显示进度条 import tqdm for f in tqdm tqdm range 100000000 if f gt 100000000 4 b
  • 通过数据框与函数进行交互

    如果我有这样的日期框架 氮 EG 00 04 NEG 04 08 NEG 08 12 NEG 12 16 NEG 16 20 NEG 20 24 datum von 2017 10 12 21 69 15 36 0 87 1 42 0 76
  • Python 3 中“map”类型的对象没有 len()

    我在使用 Python 3 时遇到问题 我得到了 Python 2 7 代码 目前我正在尝试更新它 我收到错误 类型错误 map 类型的对象没有 len 在这部分 str len seed candidates 在我像这样初始化它之前 se
  • Python:计算字典的重复值

    我有一本字典如下 dictA unit1 test1 alpha unit1 test2 beta unit2 test1 alpha unit2 test2 gamma unit3 test1 delta unit3 test2 gamm
  • 如何从没有结尾的管道中读取 python 中的 stdin

    当管道来自 打开 时 不知道正确的名称 我无法从 python 中的标准输入或管道读取数据 文件 我有作为例子管道测试 py import sys import time k 0 try for line in sys stdin k k
  • 如何使用google colab在jupyter笔记本中显示GIF?

    我正在使用 google colab 想嵌入一个 gif 有谁知道如何做到这一点 我正在使用下面的代码 它并没有在笔记本中为 gif 制作动画 我希望笔记本是交互式的 这样人们就可以看到代码的动画效果 而无需运行它 我发现很多方法在 Goo
  • Python - 字典和列表相交

    给定以下数据结构 找出这两种数据结构共有的交集键的最有效方法是什么 dict1 2A 3A 4B list1 2A 4B Expected output 2A 4B 如果这也能产生更快的输出 我可以将列表 不是 dict1 组织到任何其他数

随机推荐

  • 如何停用 Spring Data 异常转换

    The new org springframework orm hibernate5 HibernateExceptionTranslator使用失败是指它首先尝试使用普通 Hibernate 来映射异常 SessionFactoryUti
  • 如何更新 vueJs 数组列表的特定行?

    有没有一种正确的方法可以刷新 vueJS 数组列表中的某一特定行而不重新加载所有数据 在本例中 它是一个电话列表
  • 为什么 AngularJS $http success/error 方法被弃用?从 v1.6 中删除?

    AngularJS 文档有一个弃用通知 http success and error方法 这个抽象被从库中删除有什么具体原因吗 问题是 success and error方法是不可链接因为他们忽略返回值 这给熟悉的人带来了问题chainin
  • 表单以 windows-1252 编码提交

    I am getting the following warning in the JS tab of the Firefox web console Ctrl Shift K 表单以 windows 1252 编码提交 无法编码 所有 U
  • 带选项的 Python 装饰器

    我有一个模块 它的函数原型与线程类的原型类似 def do fn argtuple kwargdict priority 0 block False timeout 0 callback None daemon False do stuff
  • 如何正确编写异步方法?

    所以我试图学习在 C 中使用 async 和 await 的基础知识 但我不确定我在这里做错了什么 我期待以下输出 Calling DoDownload DoDownload done output here 但我没有得到下载的输出 我也期
  • 使用 Ionic 框架生成 PDF 文件

    Ionic 框架是否有任何插件可以使用 html 内容生成 pdf 文件 基本上 我需要使用从 Ionic 移动应用程序传递的值和一些 css 样式创建一个 html 然后将其转换为 pdf 文件 该文件可以保存在设备 Android 设备
  • 多人游戏同步

    我实现了服务器 客户端架构 其中所有状态更改都发送到函数 经过验证并广播到所有连接的客户端 这工作得相当好 但系统目前无法维持游戏客户端实例之间的同步 如果服务器和特定客户端之间恰好有 5 秒的延迟 那么他将在其他客户端之后 5 秒收到状态
  • 在 MATLAB 中从一维数组生成二维数组

    有谁知道是否有一种方法可以从 1D 数组生成 2D 数组 其中 2D 中的行是通过重复 1D 数组中的相应元素生成的 I e 1D array 2D array 1 1 1 1 1 1 2 2 2 2 2 2 3 gt 3 3 3 3 3
  • 是否可以对分块数据使用 DictVectorizer?

    我正在尝试使用 python pandas csv reader 导入分块数据 以克服内存错误 并使用 DicVectorizer 将字符串转换为浮点数据类型 但我可以看到两个不同的字符串在转换后具有相同的代码 我们是否有替代 选项来对分块
  • 如果父节点值匹配,则将相应父节点的所有子节点合并到第一个父节点下

    嗨 我的输入是这样的
  • 如何在 Linq To SQL 中为连接设置 ARITHABORT ON

    默认情况下 对于 OLEDB 连接 SQL 连接选项 ARITHABORT 为 OFF 我假设 Linq To SQL 正在使用该连接 不过我需要它处于开启状态 原因是我的数据库包含一些索引视图 如果连接没有启用 ARITHABORT 则对
  • 从一个原始整数列表生成打乱整数列表的算法

    有一个 ArrayList 为x unique Integers 我需要将它们随机分配y数组列表z尺寸 请记住 x y z是变量值 结果数组中的数字不能重复 结果列表不能包含相同的数字 订购它们必须不同 如果计算结果数组中的出现次数 则原始
  • 来自字符串的 PHP 变量值

    如何从字符串变量中获取值 Member Student 3600 selectedItem Member Student price selectedItem print r price prints Member Student inst
  • Python Sympy 求解返回列表与字典

    我正在使用 sympy 及其求解函数 但我注意到它有时返回列表中的字典 但在其他情况下仅返回字典 没有列表 from sympy import x y symbols x y q 16 x 0 5 y 0 5 solve diff q x
  • 如何使 Autodesk Forge Viewer 支持 .rcp 文件

    我有一个 Web 项目 React 使用 Autodesk Forge Viewer 显示我们的企业 BIM360 帐户中的 3D 和 2D 模型 自去年以来 在 BIM360 中运行的同一查看器现在支持 rcp文件 我们也希望允许它 但到
  • 下载文件时文件名中出现空格问题

    以下 java 代码用于通过 Web 应用程序下载请求日志文件 protected HttpServletResponse response response setContentType application octet stream
  • W3C HTML 验证器中的 Angular2 语法

    Angular 1 x 允许将元素放入 HTML 中 而这在当时并不为人所知W3C HTML 验证器 https validator w3 org nu 解决方法是添加data 前缀并写入例如data ng repeat代替ng repea
  • 从 Java 中的 JSON 数组对象获取字符串值

    编辑 我实际上找到了答案 我无法关闭问题 因为我是新人 我能够使用 Array getString i 返回所需的字符串值 感谢您的所有帮助 我有这样的 JSON List example1 example2 example3 exampl
  • 如何使 xtick 与 Python matplotlib 中的 xlim 不同?

    我想用 Python 制作一年中每天的动态图 X轴的axes将是12个月 这个过程在Matplotlib中将是一个barh 代码如下 import random import datetime import matplotlib pyplo