【问题标题】:How to plot the figure of varying number of subplots according to the input?如何根据输入绘制不同数量的子图?
【发布时间】:2021-08-03 17:13:38
【问题描述】:

我给出了一个数据列表,如 put list1=[T(x,y,z),U(x,y,z),V(x,y,z) ....... n(x,y,z)]

每个T, UV 都有三个维度。 子图的最终数字应该有

T (x,y)         T(x,z)      T(y,z)

U (x,y)         U(x,z)      U(y,z)

V (x,y)         V(x,z)      V(y,z)

如何制作一个函数来给出这样一个数字作为输出?

我正在尝试类似的东西

nrow=len(list)
ncol=3

fig = plt.figure(figsize=(9, 6))
For i in list:
    for k in (ncol*nrow):
        sub2 = fig.add_subplot(nrow,ncol,1)
        plt.scatter(list[i](x),list[i](y))
        sub3 = fig.add_subplot(nrow,ncol,2)
        plt.scatter(list[i](x),list[i](z))
        sub3 = fig.add_subplot(nrow,ncol,3)
        plt.scatter(list[i](y),list[i](z))
        

我不知道如何找到一个通用的解决方案。虽然看起来很傻

【问题讨论】:

  • T 更像是一个包含三列 x y &z 的数据框。或者你也可以考虑作为一个 3D 凹凸数组
  • 你的问题还没有解决吗?

标签: python for-loop matplotlib plot subplot


【解决方案1】:

以下是对您似乎正在尝试做的事情的可能解释:

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

list1 = [pd.DataFrame(np.random.rand(20, 3), columns=['x', 'y', 'z']) for _ in range(np.random.randint(2, 6))]

nrow = len(list1)
ncol = 3

fig = plt.figure(figsize=(9, 6))
for row, list_i in enumerate(list1):
    ax1 = fig.add_subplot(nrow, ncol, row * 3 + 1)
    ax1.scatter(list_i['x'], list_i['y'])
    ax1.set_xlabel('x')
    ax1.set_ylabel('y')
    ax2 = fig.add_subplot(nrow, ncol, row * 3 + 2)
    ax2.scatter(list_i['x'], list_i['z'])
    ax2.set_xlabel('x')
    ax2.set_ylabel('z')
    ax3 = fig.add_subplot(nrow, ncol, row * 3 + 3)
    ax3.scatter(list_i['y'], list_i['z'])
    ax3.set_xlabel('y')
    ax3.set_ylabel('z')
plt.tight_layout()
plt.show()

使用the object-oriented API 并使循环更“pythonic”,相同的代码可能如下所示:

fig, axs = plt.subplots(ncols=ncol, nrows=nrow, figsize=(9, 6), squeeze=False)
for row_axs, list_i in zip(axs, list1):
    for ax, (first, second) in zip(row_axs, [('x', 'y'), ('x', 'z'), ('y', 'z')]):
        ax.scatter(list_i[first], list_i[second])
        ax.set_xlabel(first)
        ax.set_ylabel(second)
plt.tight_layout()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2015-05-11
    • 2020-07-09
    • 2019-03-15
    • 2021-10-29
    相关资源
    最近更新 更多