python - 在 matplotlib 中绘制分类数据时避免将字符串解释为日期
问题描述
我正在尝试使用看起来像日期但不是日期的字符串条目在 matplotlib 中绘制分类数据。Matplotlib 尝试自动将字符串转换为日期时间对象,但失败了。如何强制 matplotlib 将类别视为字符串并阻止它尝试将字符串转换为日期时间对象?
这是我的例子:
import matplotlib.pyplot as plt
categories = ['2019-20', '2020-21']
vals = [5, 10]
plt.plot(categories, vals)
这使
ValueError: could not convert string to float: '2019-20'
<...snip...>
calendar.IllegalMonthError: bad month number 20; must be 1-12
对于它的价值,在我的示例中,字符串代表学年(2019-2020 和 2020-2021),但 matplotlib 假定它们是 YYYY-MM 形式的日期,并在尝试转换“20”和“ 21" 为有效月份。
如果我将类别更改为 ['2019-2020', '2020-2021'],则代码可以正常工作(matplotlib 不再假定字符串表示日期时间对象)。
import matplotlib.pyplot as plt
categories = ['2019-2020', '2020-2021']
vals = [5, 10]
plt.plot(categories, vals)
但我更喜欢使用较短的版本 YYYY-YY 而不是较长的 YYYY-YYYY。
解决方案
虽然您的代码在我的旧版本 ( matplotlib 2.2.2
) 中运行良好,但您可以尝试以下解决方法。诀窍是使用categories
自定义 x-ticklabels
import matplotlib.pyplot as plt
categories = ['2019-20', '2020-21']
vals = [5, 10]
plt.plot(range(len(categories)), vals)
plt.xticks(range(len(categories)), categories);
推荐阅读
- linux - 具有root访问权限的Linux电子构建
- java - 如何使用原生 JDBC SQL 查询为 DAO 层编写单元测试用例?
- javascript - 时区偏移在 ios 设备中不起作用
- joomla - 如何覆盖 joomla 任何组件控制器、模型、帮助文件?
- html - 如何使用 Selenium Java 中的包含文本来获取元素的立即标记
- c# - IronPDF EAP 不会将 C# 字符串解释为 UTF-16
- node.js - npm 错误!404 未找到 - 获取 http://registry.npmjs.org/amcharts4 - 未找到
- c# - 为什么 Shift+Tab 组合会改变控件的值?
- flutter - 用于扩展子的 toJson 方法的父类 - 或如何使用干净的架构模式嵌套 json
- jenkins - git checkouts 多次,尽管在 Jenkins 管道中只签出一次