我试图在matplotlib中用看起来像日期但不是日期的字符串条目绘制分类数据。Matplotlib尝试将字符串自动转换为datetime对象,但失败。如何强制matplotlib将类别视为字符串,并阻止它尝试将字符串转换为datetime对象
下面是我的例子:
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”转换为有效月份时抛出和出错
如果我将categories更改为['2019-2020'、'2020-2021'],代码工作正常(matplotlib不再假设字符串表示datetime对象)
import matplotlib.pyplot as plt
categories = ['2019-2020', '2020-2021']
vals = [5, 10]
plt.plot(categories, vals)
但我更喜欢使用较短的YYYY-YY版本,而不是较长的YYYY-YYYY版本
如果传入两个位置参数,plt.plot将尝试进行X-Y笛卡尔坐标类型的打印。我想您只需要像
plot(vals)
这样的东西,然后调用plt.xticks:请参阅https://matplotlib.org/api/_as_gen/matplotlib.pyplot.xticks.html
虽然在我的旧版本(
matplotlib 2.2.2
)中编写的代码可以正常工作,但您可以尝试以下解决方法。诀窍是使用categories
作为定制的x标签相关问题 更多 >
编程相关推荐