I have a code which converts a pandas dataframe to table from here Now, I want to change the whole row color based on specific condition. If one of the cell meets my condition then the text color of whole row will be changed.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import six
trend = ['uptrend', 'downtrend', '10 uptrend', '20 downtrend']
value = ['10', '20', '30', '50']
df = pd.DataFrame({'Trend':trend, 'Value':value})
def render_mpl_table(data, col_width=3.0, row_height=0.625, font_size=14,
header_color='#40466e', row_colors=['#f1f1f2', 'w'], edge_color='w',
bbox=[0, 0, 1, 1], header_columns=0,
ax=None, **kwargs):
if ax is None:
size = (np.array(data.shape[::-1]) + np.array([0, 1])) * np.array([col_width, row_height])
print(size)
fig, ax = plt.subplots(figsize=size)
ax.axis('off')
mpl_table = ax.table(cellText=data.values, bbox=bbox, colLabels=data.columns, **kwargs)
mpl_table.auto_set_font_size(False)
mpl_table.set_fontsize(font_size)
for k, cell in six.iteritems(mpl_table._cells):
cell.set_edgecolor(edge_color)
if k[0] == 0 or k[1] < header_columns:
cell.set_text_props(weight='bold', color='w')
cell.set_facecolor(header_color)
else:
cell.set_facecolor(row_colors[k[0]%len(row_colors) ])
if 'uptrend' in cell.get_text().get_text():
cell.set_text_props(weight='bold', color='g')
elif 'downtrend' in cell.get_text().get_text():
cell.set_text_props(weight='bold', color='r')
return ax
render_mpl_table(
df,
header_columns=0,
header_color='#40466e',
edge_color='grey',
row_height = 1,
col_width=2.5
)