我有3个数据帧training_data, validation_data, test_data
,我需要用不同的颜色依次绘制它们,以便看起来像一条线,但分成3种颜色。我尝试通过使用xlim
移动第二和第三时间序列的x轴起点来做到这一点,如下代码所示,但是它绘制了所有从x = 0开始的轴。我该如何解决?
train_data.loc[idx].plot(kind='line'
, use_index=False
, color='blue'
, label='Training Data'
, legend=False)
validation_data.loc[idx].plot(kind='line'
, use_index=False
, figsize=(20, 5)
, xlim=362
, color='red'
, label='Validation Data'
, legend=False)
test_data.loc[idx].plot(kind='line'
, use_index=False
, figsize=(20, 5)
, xlim=481
, color='green'
, label='Test Data'
, legend=False)
plt.xlim(xmin=0)
plt.legend(loc=1, prop={'size': 'xx-small'})
plt.savefig("data.pdf")
plt.clf()
plt.close()
更新:
所有3个数据帧都具有以下形状(N,28),有138个不同的索引(idx
),并且所有数据帧都有每个索引的一部分。实际上,每个索引都是一个时间序列,分为三个部分,分别是训练,验证和测试数据集。我只需要绘制每个索引的第一列var0
。这就是为什么我使用<df>.loc[idx].iloc[:, 0]
df=
idx var0 var1 var2 var3 var4 ... var28
5171 10.0 2.8 0.0 5.0 1.0 ... 9.4
5171 40.9 2.5 3.4 4.5 1.3 ... 7.7
5171 60.7 3.1 5.2 6.6 3.4 ... 1.0
...
5171 0.5 1.3 5.1 0.5 0.2 ... 0.4
4567 1.5 2.0 1.0 4.5 0.1 ... 0.4
4567 4.4 2.0 1.3 6.4 0.1 ... 3.3
4567 6.3 3.0 1.5 7.6 1.6 ... 1.6
...
4567 0.7 1.4 1.4 0.3 4.2 ... 1.7
...
9584 0.3 2.6 0.0 5.2 1.6 ... 9.7
9584 0.5 1.2 8.3 3.4 1.3 ... 1.7
9584 0.7 3.0 5.6 6.6 3.0 ... 1.0
...
9584 0.7 1.3 0.1 0.0 2.0 ... 1.7
我试图将所有三个数据帧合并为一个,然后按照@Brendan Cox的建议使用切片对其进行绘制。但是我没有得到所需的结果,它仍然从x = 0开始绘图。这是代码:
data = pd.concat([train_data.loc[idx].iloc[:, 0], validation_data.loc[idx].iloc[:, 0], test_data.loc[idx].iloc[:, 0]])
data.iloc[0:362].plot(kind='line'
, use_index=False
, figsize=(20,5)
, color='blue'
, label='Training Data'
, legend=False)
data.iloc[362:481].plot(kind='line'
, use_index=False
, figsize=(20, 5)
, color='red'
, label='Validation Data'
, legend=False)
data.iloc[481:].plot(kind='line'
, use_index=False
, figsize=(20, 5)
, color='green'
, label='Test Data'
, legend=False)
之后
答案 0 :(得分:2)
如果我的理解正确,您应该能够简单地沿x轴子集(即切片)您的输入数据并绘制线的每个部分-例如:
df = pd.read_csv("https://vincentarelbundock.github.io/Rdatasets/csv/fpp2/goog200.csv", index_col=0)
df['value'].plot()
df.loc[0:25,'value'].plot()
df.loc[25:150, 'value'].plot()
df.loc[150:, 'value'].plot()
plt.show()
根据以下注释进行编辑:使用iloc[]
和use_index=False
似乎复制了“从0开始绘制每个图”的行为。请注意,您的iloc
不会选择列。因此,您可能需要同时修改iloc
和as_index=False
。
df = pd.read_csv("https://vincentarelbundock.github.io/Rdatasets/csv/fpp2/goog200.csv", index_col=0)
df.iloc[0:25,1].plot(use_index=False)
df.iloc[25:150, 1].plot(use_index=False)
df.iloc[150:, 1].plot(use_index=False)
plt.show()
答案 1 :(得分:0)
从this answer获得帮助,我可以按照以下步骤解决此问题:
class Object