Python:matplotlib/pandas - 将数据框绘制为子图中的表格

McN*_*ler 2 python matplotlib dataframe pandas subplot

我在这里有一个(非常简化的)代码段,用于我正在处理的一个开源项目,用于从 STDF 数据绘制 ATE 结果......

def plot_everything_from_one_test(test_data, data, num_of_sites, test_tuple):

    plt.figure()


    # Title for everything
    plt.suptitle("Test Information Goes Here")

    # Find the limits
    low_lim = get_plot_min(data, test_tuple, num_of_sites)
    hi_lim = get_plot_max(data, test_tuple, num_of_sites)

    ######        

    table = function_that_returns_a_dataframe()

    plt.subplot(121)

    # HOW WOULD I ACTUALLY PUT A DATAFRAME HERE

    ######

    # Plots the trendline
    plt.subplot(222)
    plot_full_test_trend(test_data, low_lim, hi_lim)
    plt.title("Trendline")

    # Plots the histogram
    plt.subplot(224)
    plot_full_test_hist(test_data, low_lim, hi_lim)
    plt.title("Histogram")

    plt.show()
Run Code Online (Sandbox Code Playgroud)

基本上,我真正想要做的就是在子图部分 (121) 中简单地呈现一个包含数组或数据帧或其他内容的表格。这个数据框恰好有 10 列宽和无限长(大约 10 秒的数量级,但可以根据需要进行修剪)。我环顾四周,我知道 matplotlib 有 table(),但是从我所看到的,它创建了一个新图形(不需要的),并且它也试图强制图形在它上面呈现,即使我真的没有想要渲染,因为它真的没用。我看到这可以被规避,但我不知道如何在保留我的次要情节的同时管理它。也许我只是不明白 matplotlib 如何与它们一起工作。

另一个问题是,当我可以某种程度地获取要呈现的表格时,它们的速度非常慢,达到一分钟以上才能呈现 10x30 大小的数据帧。此外,文本渲染得太小而且无法缩放。对不起,如果这一切听起来像是一堆问题,但我真的不知道我将如何处理应该是简单的表格渲染。如果我真的需要,我可能只是将其转换为字符串并将其呈现为文本。提前致谢!

Sim*_*mon 6

您可以将 a 添加table到子图 - 您不需要单独的图形。然后您可以关闭该子图的轴,它不会尝试渲染该区域中除表格以外的任何内容

您还提到尝试在子图中渲染 10x30 数据帧时,您的代码运行缓慢。表格的实现可能存在问题,因为以下内容会在一秒钟内呈现:

import matplotlib.pyplot as plt
import pandas as pd

d = {'x{}'.format(i): range(30) for i in range(10)}

table = pd.DataFrame(d)

plt.figure()

# table
plt.subplot(121)

cell_text = []
for row in range(len(table)):
    cell_text.append(table.iloc[row])

plt.table(cellText=cell_text, colLabels=table.columns, loc='center')
plt.axis('off')

# plot
plt.subplot(222)
plt.plot(table['x1'],table['x2'])

# plot
plt.subplot(224)
plt.plot(table['x1'],table['x2'])

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明