颜色代码基于列值的pandas图

时间:2017-06-23 14:01:26

标签: pandas matplotlib

我有一个大型的pandas数据框,我想创建一个图 - 这是一个简化的例子:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
colors = iter(cm.rainbow(np.linspace(0, 1, 4)))


sample = pd.DataFrame({'X': [1,2,3,1,2,3,1,2,1,2,3],
                   'Y': [1,1,1,2,2,2,3,3,4,4,4]})

我想创建一个彩色编码的线图,颜色根据X列值变化(X值总是重复相同的数字,但长度并不总是相同) - 默认情节是:

plt.plot(sample['X'], sample['Y'], linestyle = '-')

enter image description here

但我希望自动化这个过程,所以每次X列重新启动都会有一个新的颜色 - 这是我想要的结果

plt.plot(sample['X'][0:3], sample['Y'][0:3], linestyle = '-', color = next(colors))
plt.plot(sample['X'][3:6], sample['Y'][3:6], linestyle = '-', color = next(colors))
plt.plot(sample['X'][6:8], sample['Y'][6:8], linestyle = '-', color = next(colors))
plt.plot(sample['X'][8:], sample['Y'][8:], linestyle = '-', color = next(colors))

关于如何实现这一目标的任何建议?

enter image description here

1 个答案:

答案 0 :(得分:1)

我会建立你已经提出的建议:

cwaitpipenewrow, node=2

或者,如果您为数据添加额外的列:

slices = [slice(0, 3), slice(3, 6), slice(6, 8), slice(8, None)]
for _slice, color in zip(slices, colors):
    plt.plot(sample['X'][_slice], sample['Y'][_slice], c=color)
plt.show()