【问题标题】:Python: matplotlib/pandas - Plotting a dataframe as a table in a subplot [duplicate]Python:matplotlib/pandas - 将数据框绘制为子图中的表格 [重复]
【发布时间】:2018-08-18 11:08:17
【问题描述】:

我在这里有一个(非常简化的)代码段,用于我正在开发的一个开源项目,用于从 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()

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

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

【问题讨论】:

  • table 不会创建新的数字。它也不会强加任何东西。周围的桌子上有很多问题。因此,如果您分享您有问题的代码并明确说明为什么其他问题没有帮助,那将是一件好事,请参阅How to Askminimal reproducible example。时间也是一样 - 没有看到你在代码方面做了什么,只能推测为什么需要这么长时间。

标签: python pandas dataframe matplotlib subplot


【解决方案1】:

您可以将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()

【讨论】:

  • 感谢您的帮助!对不起,如果我的问题看起来很模糊哈哈哈。我会去尝试一下,如果我明白了,我会告诉你的!
  • 让它工作并呈现了一些漂亮的 pdf。非常感谢!!!
  • 这对我很有效。谢谢。
猜你喜欢
  • 1970-01-01
  • 2015-08-27
  • 1970-01-01
  • 2014-06-03
  • 2017-11-11
  • 1970-01-01
  • 2022-01-23
  • 2017-07-19
  • 2021-01-25
相关资源
最近更新 更多