Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Matplotlib bug?表格打印不一致_Python_Database_Matplotlib_Plot - Fatal编程技术网

Python Matplotlib bug?表格打印不一致

Python Matplotlib bug?表格打印不一致,python,database,matplotlib,plot,Python,Database,Matplotlib,Plot,此代码: %matplotlib inline import pandas as pd import matplotlib.pyplot as plt dc = pd.DataFrame({'A' : [1, 2, 3, 4],'B' : [4, 3, 2, 1],'C' : [3, 4, 2, 2]}) plt.plot(dc) plt.legend(dc.columns) plt.tight_layout() dcsummary = pd.DataFrame([dc.mean(),

此代码:

%matplotlib inline

import pandas as pd
import matplotlib.pyplot as plt

dc = pd.DataFrame({'A' : [1, 2, 3, 4],'B' : [4, 3, 2, 1],'C' : [3, 4, 2, 2]})

plt.plot(dc)
plt.legend(dc.columns)
plt.tight_layout()

dcsummary = pd.DataFrame([dc.mean(), dc.sum()],index=['Mean','Total'])

plt.table(cellText=dcsummary.values,colWidths = [0.25]*len(dc.columns),
        rowLabels=dcsummary.index,
        colLabels=dcsummary.columns,
        cellLoc = 'center', rowLoc = 'center',
        loc='top')
fig = plt.gcf()

#plt.show()
将得到如下()所示的结果:

但是,如果禁用内联打印并启用
plt.show()
,结果将如下所示:

也就是说,如果禁用内联打印,表格将从图形中切断。因为这是我所做的唯一更改,我认为这是matplotlib的一个错误,它无法产生一致的结果

希望这可以在未来的版本中修复。同时,我现在如何修复它(假设我的实际表是使用
pd.read\u sql
从数据库中提取的,并且它的行数可以随时变化)?PS,在给出解决方案时,请确保在添加图形标题时它仍然有效。谢谢

更新:更多的研究表明,这个问题与
plt.tight\u layout()
无关。以下是我一起编译的一个示例,它没有
plt.tight_layout()
,但是当禁用图形内联打印时,除了标题和表格外,表格也不会正确显示:

import numpy as np
import pandas as pd

import matplotlib.pyplot as plt
plt.style.use('ggplot')

n=6
df = pd.DataFrame({
        'person':[x*16 for x in list('ABCDEF')],
        'score1':np.random.randn(n),
        'score2':np.random.randn(n),
        'score3':np.random.randn(n),
        'score4':np.random.randn(n),
        'score5':np.random.randn(n)
                   })
print(df)


plt.close('all')  # close all open figures

fig, ax = plt.subplots()

# X: pd.options.display.mpl_style = 'default' # cause system freeze
df.set_index(['person']).plot(kind='barh', ax = ax, width=0.85, fontsize=8)
ax.invert_yaxis()

plt.title("Matplotlib table plotting")

#plt.tight_layout()

# Add a table
plt.table(cellText=df.values,colWidths = [0.25]*len(df.columns),
        rowLabels=df.index,
        colLabels=df.columns,
        cellLoc = 'center', rowLoc = 'center',
        loc='top')

plt.show()
问题仍然是,如何修复上述图表


谢谢

只要摆脱紧凑的布局,无需内联打印即可正常工作。您可以将
bbox\u inches='tight'
设置为
plt.savefig
以消除多余的空白,而不截断绘图。我确实需要
plt.tight\u layout()
(请参阅),以便不消除多余的空白,而是为我的y标签获得额外的空白。我能两个都要吗?Thx.此外,这可能是一个错误,但是在计算紧凑布局的空间时,目前没有考虑表,因为这是一个实验性的特性,我恐怕答案是“否”:直接引用如下:“紧凑布局自动调整子地块参数,以便子地块适合于图形区域。这是一项实验性功能,在某些情况下可能不起作用。它只检查标签、轴标签和标题的范围。“只要摆脱紧凑的布局,无需内联打印即可正常工作。您可以将
bbox\u inches='tight'
设置为
plt.savefig
以消除多余的空白,而不截断绘图。我确实需要
plt.tight\u layout()
(请参阅),以便不消除多余的空白,而是为我的y标签获得额外的空白。我能两个都要吗?Thx.此外,这可能是一个错误,但是在计算紧凑布局的空间时,目前没有考虑表,因为这是一个实验性的特性,我恐怕答案是“否”:直接引用如下:“紧凑布局自动调整子地块参数,以便子地块适合于图形区域。这是一项实验性功能,在某些情况下可能不起作用。它仅检查标签、轴标签和标题的范围。”