绘制不同颜色的点

时间:2014-03-07 14:28:58

标签: python matplotlib pandas

我有一个使用

创建的数据框
results = df2[(df2['R'] > 100)].sort(columns='ZR', ascending=False)

我想做

plt.plot(results['ZR'], marker='o')

除了我想要的结果是['我'] == foo为红色,结果['我']!= foo为蓝色。

我试过

firstset = results.ZR[results.I.str.contains('foo')]
secondset = results.ZR[~results.I.str.contains('foo)]
plt.plot(firstset, marker='o', color='red')
plt.plot(secondset, marker='o', color='blue')

但这会从x轴0开始绘制两半,这不是我需要的。

enter image description here

我只是喜欢原始的图形,但有些点为红色,有些为蓝色。这不是新的观点,也没有改变立场的观点。这是原始图表。 enter image description here

1 个答案:

答案 0 :(得分:3)

首先,在没有任何X参数的情况下,plt.show将其视为1的连续整数。为了使用逻辑运算找到正确的索引,请执行以下操作:

firstIndex = results.index[results.I.str.contains('foo')]
secondIndex = results.index[~results.I.str.contains('foo)]

如果原始索引很复杂,请为新索引创建一个虚拟pandas DataFrame。

newDf = pd.DataFrame(range(len(results)))
firstIndex = newDf.index[results.I.str.contains('foo')]
secondIndex = newDf.index[~results.I.str.contains('foo')]

这可以保证创建两个索引,这些索引是1:230的子集。

接下来,将字符串qulifier传递给plt.plot以指定颜色和标记类型。

plt.plot(results['ZR'])
plt.plot(firstIndex, firstset, "bo")
plt.plot(secondIndex, secondset, "ro")

这将使用线条绘制整个带下划线的数据,没有点标记。然后它将使用各自的颜色覆盖两个设定点。