You could use masks for your datasets. A basic example could be the following:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(10)
y = np.arange(10) * 0.1
mask1 = y < 0.5
mask2 = y >= 0.5
plt.bar(x[mask1], y[mask1], color = 'red')
plt.bar(x[mask2], y[mask2], color = 'blue')
plt.show()
The result should be:
UPDATE:
As you updated your question I update the code. For your simple case, and if I understood correctly, you could do the following (ugly) hack:
import pandas as pd
df = pd.DataFrame({'col1':[1,2,3], 'col2':[4,5,6]},
index = ['row1','row2','row3'])
dfstacked = df.stack()
mask = dfstacked <= 3
colors = np.array(['b']*len(dfstacked))
colors[mask.values] = 'r'
dfstacked.plot(kind = 'bar', rot = 45, color = colors)
plt.show()
Or use a more OO solution.
The code briefly explained:
- I create a mask for my red columns
- I create an array of colors
- Change the the array of colors in order to use other color for my masked values
- As the
dfstacked
dataframe has a MultiIndex
the ticks are not well printed so I use the rot
keyword to rotate them. If you want to automate it in order to get a nice plot you can use plt.tight_layout()
before plt.show()
.
I hope it helps.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…