自动填充子图

4
我正在编写一个Python脚本,它将(1)获取每个子图的y值列表,以便与相同的x值进行绘制,(2)将这些子图都变成散点图,并将其放置到适当的位置上,(3)针对不同大小的子图网格完成这些任务。我的意思是这个第三个语句:我使用的测试用例会生成一个包含64个图的数组,其中有8行和8列。我希望代码能够处理各种网格尺寸的数组(大约在50到80个图之间),而不必每次运行代码时都返回“好的,这是我需要的行数和列数”。
目前,我使用exec命令来获取y值,这很有效。我能够制作每个子图并使其填充网格,但只有手动输入才行(重复64次相同的操作很愚蠢,所以我知道一定有自动化的方法)。
请问是否有人可以提供实现此目标的方法?由于这是研究材料,我无法提供数据或我的代码。如果这个问题很基础或者是我应该从现有文档中确定的内容,请原谅我。我是编程新手,需要一些指导!

将您手动输入的代码放入一个循环中。 - wwii
@wwii,是的,我想可能是这样。但是,正如我所说,我是编程新手。你能再提供一些信息吗? - Palmetto_Girl86
2个回答

5
一个在这种情况下有用的函数是plt.subplots(nrows, ncols),它将返回一个数组(一个numpy对象数组),其中包含一个规则网格上的子图。
例如:
import matplotlib.pyplot as plt
import numpy as np

fig, axes = plt.subplots(nrows=4, ncols=4, sharex=True, sharey=True)

# "axes" is a 2D array of axes objects.  You can index it as axes[i,j] 
# or iterate over all items with axes.flat

# Plot on all axes
for ax in axes.flat:
    x, y = 10 * np.random.random((2, 20))
    colors = np.random.random((20, 3))
    ax.scatter(x, y, s=80, facecolors=colors, edgecolors='')
    ax.set(xticks=np.linspace(0, 10, 6), yticks=np.linspace(0, 10, 6))

# Operate on just the top row of axes:
for ax, label in zip(axes[0, :], ['A', 'B', 'C', 'D']):
    ax.set_title(label, size=20)

# Operate on just the first column of axes:
for ax, label in zip(axes[:, 0], ['E', 'F', 'G', 'H']):
    ax.set_ylabel(label, size=20)

plt.show()

enter image description here


0

如果您打算使用Python,您会想通过Python教程浏览一下,以了解可用的语言和数据结构。有很多优质的在线教学材料可供选择,您可能希望考虑一些使用Python的计算机科学101课程 - MIT OCW、edX、如何像计算机科学家一样思考...

没有完整细节的情况下,我想象它可能是这样一个混合真实代码和伪代码的东西:

yvalues = list()
while yvalues_exist:
    yvalues.append(get_yvalue)

#limit plot to eight columns
columns = 8
quotient, remainder = divmod(len(yvalues), columns)
rows = quotient
if remainder:
    rows = rows + 1
for n, yvalue in enumerate(yvalues):
    plt.subplot(rows, columns, n)
    plt.plot(yvalue)

list()、append()、while、divmod()、len()、if、for、enumerate() 都是 Python 语句、方法或内置函数。


谢谢!我会尝试类似于你在这里的建议。 - Palmetto_Girl86

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接