I'm not having any success in getting the matplotlib table commands to work. Here's an example of what I'd like to do:
Can anyone help with the table construction code?
import pylab as plt plt.figure() ax=plt.gca() y=[1,2,3,4,5,4,3,2,1,1,1,1,1,1,1,1] plt.plot([10,10,14,14,10],[2,4,4,2,2],'r') col_labels=['col1','col2','col3'] row_labels=['row1','row2','row3'] table_vals=[11,12,13,21,22,23,31,32,33] # the rectangle is where I want to place the table plt.text(11,4.1,'Table Title',size=8) plt.plot(y) plt.show()
BboxTransformTo is a transformation that linearly transforms points from the unit bounding box to a given Bbox. In your case, the transform itself is based upon a TransformedBBox which again has a Bbox upon which it is based and a transform - for this nested instance an Affine2D transform.
AFAIK, you can't arbitrarily place a table on the matplotlib
plot using only native matplotlib
features. What you can do is take advantage of the possibility of latex
text rendering. However, in order to do this you should have working latex
environment in your system. If you have one, you should be able to produce graphs such as below:
import pylab as plt import matplotlib as mpl mpl.rc('text', usetex=True) plt.figure() ax=plt.gca() y=[1,2,3,4,5,4,3,2,1,1,1,1,1,1,1,1] #plt.plot([10,10,14,14,10],[2,4,4,2,2],'r') col_labels=['col1','col2','col3'] row_labels=['row1','row2','row3'] table_vals=[11,12,13,21,22,23,31,32,33] table = r'''\begin{tabular}{ c | c | c | c } & col1 & col2 & col3 \\\hline row1 & 11 & 12 & 13 \\\hline row2 & 21 & 22 & 23 \\\hline row3 & 31 & 32 & 33 \end{tabular}''' plt.text(9,3.4,table,size=12) plt.plot(y) plt.show()
The result is:
Please take in mind that this is quick'n'dirty example; you should be able to place the table correctly by playing with text coordinates. Please also refer to the docs if you need to change fonts etc.
UPDATE: more on pyplot.table
According to the documentation, plt.table
adds a table to current axes. From sources it's obvious, that table location on the graph is determined in relation to axes. Y
coordinate can be controlled with keywords top
(above graph), upper
(in the upper half), center
(in the center), lower
(in the lower half) and bottom
(below graph). X
coordinate is controlled with keywords left
and right
. Any combination of the two works, e.g. any of top left
, center right
and bottom
is OK to use.
So the closest graph to what you want could be made with:
import matplotlib.pylab as plt plt.figure() ax=plt.gca() y=[1,2,3,4,5,4,3,2,1,1,1,1,1,1,1,1] #plt.plot([10,10,14,14,10],[2,4,4,2,2],'r') col_labels=['col1','col2','col3'] row_labels=['row1','row2','row3'] table_vals=[[11,12,13],[21,22,23],[31,32,33]] # the rectangle is where I want to place the table the_table = plt.table(cellText=table_vals, colWidths = [0.1]*3, rowLabels=row_labels, colLabels=col_labels, loc='center right') plt.text(12,3.4,'Table Title',size=8) plt.plot(y) plt.show()
And this gives you
Hope this helps!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With