我有一个包含一列数据的数据框。我想要显示数据,使水平轴上方的所有条形为blue
,低于它的条形为red
。
我该如何做到这一点?
答案 0 :(得分:1)
您可以使用where
选择0
上方和下方的值到新列b
和c
:
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()
答案 1 :(得分:0)
使用numpy.where,您可以获得数据低于0的索引:np.where(x < 0)
和0:np.where(x >= 0)
,因此您将获得两个不重叠的数组,您可以使用不同的颜色进行可视化。
实际上,pandas框架有自己的等效numpy.where
,请看这个问题:pandas equivalent of np.where