我正在使用pd.DataFrame.plot()可视化多个品牌之间的同比变化。我不确定如何访问每个子图并将> = 0的值设置为绿色,<0的值设置为红色。我想避免不得不在无花果,斧头中拆分代码。想知道是否有一种方法可以将其包含在df.plot()的参数中。
data= {'A': [np.nan, -0.5, 0.5],
'B': [np.nan, 0.3, -0.3],
'C': [np.nan, -0.7, 0.7],
'D': [np.nan, -0.1, 1]}
df = pd.DataFrame(data=data, index=['2016', '2017', '2018'])`
df.plot(kind='bar', subplots=True, sharey=True, layout=(2,2), legend=False,
grid=False, colormap='RdBu')
我尝试使用颜色图,但是它不会将各个条设置为不同的颜色,而是将每个子图设置为不同的颜色。我确定我想念什么。任何帮助表示赞赏。
答案 0 :(得分:0)
您可以使用以下策略:
matplotlib
和sharey=True
,使用子图创建图形对象ax=ax
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
fig, axes = plt.subplots(ncols=3, sharey=True)
data= {'A': [np.nan, -0.5, 0.5],
'B': [np.nan, 0.3, -0.3],
'C': [np.nan, -0.7, 0.7]}
df = pd.DataFrame(data=data, index=['2016', '2017', '2018'])
for ax, col in zip(axes, df.columns):
df[col].plot(kind='bar', color=(df[col] > 0).map({True: 'g', False: 'r'}), ax=ax)
ax.set_title(col)
plt.show()
答案 1 :(得分:0)
解决如下
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
fig, axes = plt.subplots(nrows=2, ncols=2, sharey=True)
data= {'A': [np.nan, -0.5, 0.5],
'B': [np.nan, 0.3, -0.3],
'C': [np.nan, -0.7, 0.7],
'D': [np.nan, -1, 1]}
df = pd.DataFrame(data=data, index=['2016', '2017', '2018'])
for i, col in enumerate(df.columns):
df[col].plot(kind='bar', color=(df[col] > 0).map({True: 'g', False: 'r'}),
ax=axes[i // 2][i % 2], sharex=True, sharey=True, grid=False)
axes[i // 2][i % 2].set_title(col)
plt.show()