我有一个使用
创建的数据框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开始绘制两半,这不是我需要的。
我只是喜欢原始的图形,但有些点为红色,有些为蓝色。这不是新的观点,也没有改变立场的观点。这是原始图表。
答案 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")
这将使用线条绘制整个带下划线的数据,没有点标记。然后它将使用各自的颜色覆盖两个设定点。