在 Python 中基于条件绘制多色时间序列图 [重复]
Posted
技术标签:
【中文标题】在 Python 中基于条件绘制多色时间序列图 [重复]【英文标题】:Plot Multicolored Time Series Plot based on Conditional in Python [duplicate] 【发布时间】:2018-07-01 18:18:36 【问题描述】:我有一个带有两列和一个日期时间索引的 pandas Financial timeseries DataFrame。
TOTAL.PAPRPNT.M Label
1973-03-01 25504.000 3
1973-04-01 25662.000 3
1973-05-01 25763.000 0
1973-06-01 25996.000 0
1973-07-01 26023.000 1
1973-08-01 26005.000 1
1973-09-01 26037.000 2
1973-10-01 26124.000 2
1973-11-01 26193.000 3
1973-12-01 26383.000 3
如您所见,每个数据集对应一个“标签”。如果从前一个“点”到下一个“点”的线具有某些特征(不同类型的股票图变化),则该标签应该基本上分类,因此对每个图使用单独的颜色。这个问题与Plot Multicolored line based on conditional in python 这个问题有关,但“groupby”部分完全跳过了我的理解,这个方案是双色方案而不是多色方案(我有四个标签)。
我想根据与数据框中每个条目关联的标签创建图形的多色图。
【问题讨论】:
您不需要 groupby,您需要按照另一个问题中 MPL 文档中的示例进行操作:matplotlib.org/examples/pylab_examples/multicolored_line.html 我也看到了,但我不明白如何将它与日期时间索引一起使用。这个特殊的 pylab 涉及使用 linspace 的数学函数。 它只是对数据使用布尔掩码/索引。您可以将其应用于数据框中的任何列。 如果您不想使用 groupby,则无需使用。我建议您尝试使用 LineCollection 实现基于 matplotlib 示例的解决方案。显示此尝试的代码,并清楚地说明您在什么时候遇到了问题。另请查看this question,它实际上使用 x 轴上的日期。再次明确说明它在多大程度上无济于事。 【参考方案1】:这是我认为您尝试做的一个示例。它基于 cmets 中提到的 MPL 文档,并使用随机生成的数据。 只需将颜色图边界映射到由类数给出的离散值即可。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection
from matplotlib.colors import ListedColormap, BoundaryNorm
import pandas as pd
num_classes = 4
ts = range(10)
df = pd.DataFrame(data='TOTAL': np.random.rand(len(ts)), 'Label': np.random.randint(0, num_classes, len(ts)), index=ts)
print(df)
cmap = ListedColormap(['r', 'g', 'b', 'y'])
norm = BoundaryNorm(range(num_classes+1), cmap.N)
points = np.array([df.index, df['TOTAL']]).T.reshape(-1, 1, 2)
segments = np.concatenate([points[:-1], points[1:]], axis=1)
lc = LineCollection(segments, cmap=cmap, norm=norm)
lc.set_array(df['Label'])
fig1 = plt.figure()
plt.gca().add_collection(lc)
plt.xlim(df.index.min(), df.index.max())
plt.ylim(-1.1, 1.1)
plt.show()
每个线段都根据df['Label']
中给出的类标签着色这是一个示例结果:
【讨论】:
非常感谢。上帝祝福你。有效!虽然我确实必须使用 'mdates.date2num' 将索引更改为数字,因为在您的方案中,数据框没有日期时间索引。 @DanishAmjadAlvi 不客气!很高兴我能帮上忙。以上是关于在 Python 中基于条件绘制多色时间序列图 [重复]的主要内容,如果未能解决你的问题,请参考以下文章