首页 > 解决方案 > 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).

你能帮我解决这个问题吗?

标签: pythonmatplotlibcolors

解决方案


推荐阅读