I'm visualizing %YoY change across multiple brands using pd.DataFrame.plot(). I'm unsure how to access each individual subplot and set values >=0 as green and <0 as red. I'd like to avoid having to split code out in fig, ax. Wondering if there is a way to include it in the parameters of 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')
I've tried using colormap, but it doesn't set the individual bars in different colors but each subplot. I'm sure I'm missing something. Any help appreciated.
You can use the following strategy:
matplotlib
using 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()
Solved as follows
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()
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.