Python Matplotlib-在单元格中创建具有线条图的表格?

Python Matplotlib-在单元格中创建具有线条图的表格?,python,pandas,matplotlib,plot,Python,Pandas,Matplotlib,Plot,我有历史棒球数据,我正试图在一个子地块内的一个简单matplotlib图中可视化。我想有一个表格,显示过去一年的平均统计数据,每个统计数据的折线图,然后是独立计算的最终分数 我知道matplotlib有一个表函数,所以创建一个5x3表很简单,但是否可以将图作为值插入表中?如果没有,对我应该做什么有什么建议吗?我想我可以创建几个子绘图,但格式设置会很古怪,也不是很动态。谢谢你的帮助 使用@TheImportanceofBeingErnest的代码,我遇到了matplotlib的一个错误,在使用g

我有历史棒球数据,我正试图在一个子地块内的一个简单matplotlib图中可视化。我想有一个表格,显示过去一年的平均统计数据,每个统计数据的折线图,然后是独立计算的最终分数

我知道matplotlib有一个表函数,所以创建一个5x3表很简单,但是否可以将图作为值插入表中?如果没有,对我应该做什么有什么建议吗?我想我可以创建几个子绘图,但格式设置会很古怪,也不是很动态。谢谢你的帮助

使用@TheImportanceofBeingErnest的代码,我遇到了matplotlib的一个错误,在使用gridspec时,我看不到x轴:

fig = plt.figure(figsize=(8.5,11))

gs_row1left = gridspec.GridSpec(1,1)
gs_row1right = gridspec.GridSpec(1,1)

summaryplot2subplot(fig, gs_row1left[0], data, col1, col2, finalsc)
ax.axis('off')

ax2 = fig.add_subplot(gs_row1right[0, 0])
df = pd.DataFrame({'year':['2001-01','2002-01','2003-01','2004-01','2005-01'], 'value':[100,200,300,400,500]})

barax = ax2.twinx()
df['value1']= df['value']*0.4

df['value2'] = df['value']*0.6# Let them be strings!



df.plot(x = ['year'], y = ['value'], kind = 'line', ax = ax2)

df.plot(x = ['year'], y= ['value1','value2'], kind = 'bar', ax = barax)



gs_row1left.update(left = 0.05, right = 0.48)
gs_row1right.update(left = 0.55, right = 0.98)
plt.show()

无法将绘图插入matplotlib表中。然而,子地块网格允许创建类似表格的行为

import matplotlib.pyplot as plt
import numpy as np

data = np.random.rand(100,4)
col1 = ["WAR", "ERA", "IP", "WHIP", "Final\nScore"]
col2 = [0.23,1.60,0.28,0.02,0.38]
col2colors = ["red", "g", "r", "r", "r"]
finalsc = "D+"

fig, axes = plt.subplots(ncols=3, nrows=5, figsize=(4,2.6),
                         gridspec_kw={"width_ratios":[1,0.5,2]})
fig.subplots_adjust(0.05,0.05,0.95,0.95, wspace=0.05, hspace=0)

for ax in axes.flatten():
    ax.tick_params(labelbottom=0, labelleft=0, bottom=0, top=0, left=0, right=0)
    ax.ticklabel_format(useOffset=False, style="plain")
    for _,s in ax.spines.items():
        s.set_visible(False)
border = fig.add_subplot(111)
border.tick_params(labelbottom=0, labelleft=0, bottom=0, top=0, left=0, right=0)
border.set_facecolor("None")

text_kw = dict(ha="center", va="bottom", size=13)
for i,ax in enumerate(axes[:,0]):
    ax.text(0.5, 0.05, col1[i], transform=ax.transAxes, **text_kw)
for i,ax in enumerate(axes[:,1]):
    ax.text(0.5, 0.05, "{:.2f}".format(col2[i]),transform=ax.transAxes, **text_kw)
    ax.set_facecolor(col2colors[i])
    ax.patch.set_color(col2colors[i])
axes[-1,-1].text(0.5, 0.05, finalsc,transform=axes[-1,-1].transAxes, **text_kw)

for i,ax in enumerate(axes[:-1,2]):
    ax.plot(data[:,i], color="green", linewidth=1)


plt.show()

要将多个这样的图放入一个图形中,您将以稍微不同的方式进行处理,并创建一个包含多个子网格的gridspec。
导入matplotlib.pyplot作为plt
从matplotlib导入gridspec
将numpy作为np导入
def汇总图2子图(图,gs,数据,第1列,第2列,最终C):
col2colors=[“g”如果col2[i]>1,则表示范围内的i(len(col2))]
sgs=gridspec.GridSpecFromSubplotSpec(5,3,subplot_spec=gs,wspace=0.05,hspace=0,
宽度比=[0.9,0.7,2])
轴=[]
对于范围(5)内的n:
对于范围(3)中的m:
轴追加(图add_子批次(sgs[n,m]))
轴=np.阵列(轴).重塑(5,3)
对于轴中的轴。展平()
最大刻度参数(labelbottom=0,labelleft=0,底部=0,顶部=0,左侧=0,右侧=0)
ax.ticklabel_格式(useOffset=False,style=“plain”)
对于ax.spines.items()中的s:
s、 设置_可见(假)
边框=图添加子地块(gs)
border.tick_参数(labelbottom=0,labelleft=0,bottom=0,top=0,left=0,right=0)
边框。设置面颜色(“无”)
text_kw=dict(ha=“center”,va=“bottom”,size=11)
对于i,枚举中的ax(轴[:,0]):
ax.text(0.5,0.05,col1[i],transform=ax.transAxes,**text\u-kw)
对于i,枚举中的ax(轴[:,1]):
text(0.5,0.05,“{.2f}”.format(col2[i]),transform=ax.transAxes,**text_-kw)
ax.set_facecolor(col2colors[i])
ax.patch.set_颜色(col2colors[i])
轴[-1,-1]。文本(0.5,0.05,finalsc,transform=轴[-1,-1]。变速箱,**文本(kw)
对于i,枚举中的ax(轴[:-1,2]):
ax.绘图(数据[:,i],颜色=col2colors[i],线宽=1)
图=plt.图(图尺寸=(8,6))
gs=gridspec.gridspec(2,2)
col1=[“战争”、“时代”、“知识产权”、“鞭子”、“最终\n核心”]
finalsc=“D+”
对于范围(4)中的i:
数据=np.rand.rand(100,4)
col2=np.rand.rand(5)*2
汇总图2子图(图,gs[i],数据,第1列,第2列,最终C)

plt.show()
这正是我需要的-谢谢!我可能正在运行旧版本的matplotlib,但出于某种原因,我不得不为set_facecolor插入一条路径,即
ax.patch.set_facecolor(col2colors[I])
我试图将此绘图作为4x2网格中其他绘图的子绘图。您知道这是否可能,因为我们已经在本例中使用子地块了吗?非常感谢您的帮助,非常感谢!所以,如果我只想将其中一个插入到另一个绘图中(我基本上只想在更大的绘图中插入一个图表),我将如何将所有这些放入一个ax中?我必须使用gridspec吗?较大的绘图需要使用gridspec。但这只对这个类似表格的绘图是必要的,所有其他子绘图也可能以不同的方式创建。因此,是否有可能将所有这些放在一个ax上,其中ax类似于
ax=fig.add_子绘图(4,2,1)