Reputation: 4018
Following the pylab_examples, I have created a simple 2x5 cells table in matplotlib.
Code:
# Prepare table
columns = ('A', 'B', 'C', 'D', 'E')
rows = ["A", "B"]
cell_text = [["1", "1","1","1","1"], ["2","2","2","2","2"]]
# Add a table at the bottom of the axes
ax[4].axis('tight')
ax[4].axis('off')
the_table = ax[4].table(cellText=cell_text,colLabels=columns,loc='center')
Now, I want to color cell A1 with color = "#56b5fd"
and cell A2 with color = "#1ac3f5"
. All other cells should remain white. Matplotlib's table_demo.py as well as this example only show me how to apply a color map with pre-defined colors that depend on the values in the cell.
How to assign specific colors to specific cells in a Matplotlib-generated table?
Upvotes: 20
Views: 38214
Reputation: 2013
@ImportanceOfBeingErnest provided an excellent answer. However, for earlier versions of Matplotlib, the second approach:
the_table[(1, 0)].set_facecolor("#56b5fd")
will result in a TypeError: TypeError: 'Table' object has no attribute '__getitem__'
The TypeError can be overcome by using the following syntax instead:
the_table.get_celld()[(1,0)].set_facecolor("#56b5fd")
the_table.get_celld()[(2,0)].set_facecolor("#1ac3f5")
(Confirmed on Matplotlib 1.3.1)
Upvotes: 3
Reputation: 339200
The easiest way to colorize the background of cells in a table is to use the cellColours
argument. You may supply a list of lists or an array with the same shape as the data.
import matplotlib.pyplot as plt
# Prepare table
columns = ('A', 'B', 'C', 'D', 'E')
rows = ["A", "B"]
cell_text = [["1", "1","1","1","1"], ["2","2","2","2","2"]]
# Add a table at the bottom of the axes
colors = [["#56b5fd","w","w","w","w"],[ "#1ac3f5","w","w","w","w"]]
fig, ax = plt.subplots()
ax.axis('tight')
ax.axis('off')
the_table = ax.table(cellText=cell_text,cellColours=colors,
colLabels=columns,loc='center')
plt.show()
Alternatively, you can set the facecolor of a specific cell as
the_table[(1, 0)].set_facecolor("#56b5fd")
the_table[(2, 0)].set_facecolor("#1ac3f5")
Resulting in the same output as above.
Upvotes: 34