在Matplotlib中绘制预测线的最佳方法

时间:2017-10-29 17:27:38

标签: pandas matplotlib

问题的标题有点集中,但总的来说,我想知道是否有更有效的方法在matplotlib中为一部分行设置不同的线条样式。

例如,我在单列数据框中有随机数据:

           0
0   0.750712
1   0.568953
2   0.270217
3   0.912791
4   0.313565
5   0.428776
6   0.874447
7   0.437500
8   0.295404
9   0.628610

但是,索引值5-9是预测值,因此当我绘制它们时,我希望该行(在本例中为红色和虚线)有助于将它们与其余数据区分开来。

我知道的唯一方法是正常的第二行图,但这会复制数据,我认为对于具有多列的更复杂的数据集来说会有问题且效率低下:

fig, ax = plt.subplots()
ax.plot(df[0], 'r--')
ax.plot(df.iloc[0:5, 0], 'b')
plt.show()

产生:

enter image description here

这是实现这一目标的最佳方式吗?或者是否有一个我不知道的参数会告诉matplot lib在x值n处使用不同的样式?

2 个答案:

答案 0 :(得分:3)

从问题中可以清楚地看出" best"意思是。最好尽量避免"最好"在提问时。

一种简单的方法是直接使用pandas。

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

df = pd.DataFrame({"y" : np.random.rand(10)})

ax = df.iloc[:5,:].plot(ls="-", color="b")
df.iloc[4:,:].plot(ls="--", color="r", ax=ax)

plt.show()

enter image description here

如果"最好"关于抽奖时间的效率,LineCollection是最佳方式。

import matplotlib.pyplot as plt
import numpy as np; np.random.seed(1)
import pandas as pd
from matplotlib.collections import LineCollection

df = pd.DataFrame({"y" : np.random.rand(10)})

fig, ax = plt.subplots()

points = np.array([df.index.values, df["y"].values]).T.reshape(-1,1,2)
segments = np.concatenate([points[:-1],points[1:]], axis=1)

colors = plt.cm.bwr_r((df.index < 4).astype(float))
ls = ["-"]*4 + ["--"]*5
lc = LineCollection(segments, colors=colors, linestyles=ls )
ax.add_collection(lc)

ax.autoscale_view()

plt.show()

enter image description here

答案 1 :(得分:0)

this example,开始,一个简单的解决方案就是:

head

对于

enter image description here