Ответ 1
AFAIK, вы не можете произвольно разместить таблицу на графике matplotlib
, используя только собственные функции matplotlib
. Что вы можете сделать, это воспользоваться возможностью latex
текстового рендеринга. Однако для этого у вас должна быть рабочая среда latex
в вашей системе. Если у вас есть, вы должны иметь возможность создавать графики, например, ниже:
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()
Результат:
Пожалуйста, имейте в виду, что это быстрый пример; вы должны правильно разместить таблицу, играя с текстовыми координатами. Пожалуйста, также обратитесь к документам, если вам нужно изменить шрифты и т.д.
ОБНОВЛЕНИЕ: больше на pyplot.table
В соответствии с документацией plt.table
добавляет таблицу к текущим осям. Из источников очевидно, что расположение таблицы на графике определяется относительно осей. Координату Y
можно контролировать с помощью ключевых слов top
(выше графика), upper
(в верхней половине), center
(в центре), lower
(в нижней половине) и bottom
( ниже графика). Координата X
контролируется ключевыми словами left
и right
. Любая комбинация двух произведений, например. любой из top left
, center right
и bottom
подходит для использования.
Итак, ближайший график к тому, что вы хотите, можно сделать с помощью
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()
И это дает вам
Надеюсь, это поможет!