python - python线图,颜色基于x轴上带有日期的向量
问题描述
我有一个向量[1,2,3,4,5,6,7,8,9]
和一个着色方案[0,1,1,1,1,1,0,1,1]
,我想制作一个简单的线图,其颜色取决于配色方案,xaxis 上的日期由时间戳向量定义[ pd.Timestamp(i,1,1) for i in range(2000,2009)]
。这是一个玩具示例。在我无法在此处显示的数据中,此向量是从某处加载的,并且是时间戳格式。
我使用以下答案生成此代码,这使我的情节:
import numpy as np
import pylab as pl
from matplotlib import collections as mc
import matplotlib.dates as mdates
x = [1,2,3,4,5,6,7,8,9]
colors = [0,1,1,1,1,1,0,1,1]
segments = []
y = x
cols = np.zeros(shape=(len(colors),4))
index = 0
for x1, x2, y1,y2 in zip(x, x[1:], y, y[1:]):
if colors[index]==0:
cols[index] = tuple([1,0,0,1])
else:
cols[index] = tuple([0,1,0,1])
index += 1
segments.append([(x1, y1), (x2, y2)])
lc = mc.LineCollection(segments, colors=cols, linewidths=2)
fig, ax = pl.subplots()
ax.add_collection(lc)
ax.autoscale()
ax.margins(0.1)
ax.set_xticklabels([ pd.Timestamp(i,1,1) for i in range(2000,2009)])
fig.autofmt_xdate()
pl.show()
但我在 x 轴上格式化日期时遇到问题。之前添加这两行pl.show()
ax.xaxis.set_major_locator(mdates.AutoDateLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y/%m/%d'))
结果ValueError: ordinal must be >= 1
。当 x 轴最初设置为某种日期格式时,通常不会发生这种情况,但这里的构造是特殊的,因为ax.add_collection(lc)
.
你能帮我解决这个问题吗?
解决方案
推荐阅读
- ansible - 如何替换ansible中的字符串列表?
- javascript - 根据其他两个组件的选定值更新焦点/单击的第三个组件
- sql - 列组合的 SQL 计数实例
- google-sheets - 因为没有带有 OR 的计数
- flutter - 如何通过不同的选项卡使一个小部件持久化?
- arrays - 使用两个名称列表创建带有批处理文件的嵌套文件夹
- flutter - Flutter:如何制作超过一屏的Form
- ember.js - 尝试运行 ./watch 时出现以下错误
- python - 比较 Pandas 数据框中不同行的两个值
- java - 将 txt 文件中的二维数组转换为 JavaFx(数独)