如何将小于0的行绘制为不同的颜色?

时间:2016-09-26 19:31:22

标签: pandas matplotlib plot dataframe colors

我有一个包含一列数据的数据框。我想要显示数据,使水平轴上方的所有条形为blue,低于它的条形为red

我该如何做到这一点?

2 个答案:

答案 0 :(得分:1)

您可以使用where选择0上方和下方的值到新列bc

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

np.random.seed(1)
data = np.random.randn(10)
df = pd.DataFrame({'a':data})

df['b'] = df.a.where(df.a >= 0)
df['c'] = df.a.where(df.a < 0)
print (df)
          a         b         c
0  1.624345  1.624345       NaN
1 -0.611756       NaN -0.611756
2 -0.528172       NaN -0.528172
3 -1.072969       NaN -1.072969
4  0.865408  0.865408       NaN
5 -2.301539       NaN -2.301539
6  1.744812  1.744812       NaN
7 -0.761207       NaN -0.761207
8  0.319039  0.319039       NaN
9 -0.249370       NaN -0.249370

#plot to same figure
ax = df.b.plot.bar(color='b')
df.c.plot.bar(ax=ax, color='r')
plt.show()

graph

答案 1 :(得分:0)

使用numpy.where,您可以获得数据低于0的索引:np.where(x < 0)和0:np.where(x >= 0),因此您将获得两个不重叠的数组,您可以使用不同的颜色进行可视化。 实际上,pandas框架有自己的等效numpy.where,请看这个问题:pandas equivalent of np.where