Pal*_*l86 4 python automation matplotlib subplot
我正在编写一个 python 脚本,该脚本将 (1) 获取每个子图的 y 值列表,以针对一组常见的 x 值进行绘图,(2) 使每个子图成为散点图并放置它在子图网格中的适当位置,并且(3)针对不同大小的子图网格完成这些任务。我的第三个语句的意思是:我使用的测试用例的结果是 64 个图,8 行和 8 列。我希望代码能够处理各种网格尺寸的任何大小的数组(大约在 50 到 80 个图之间),而不必每次运行代码时都返回并说“好的,这是行数和我需要的专栏。”
现在,我正在使用 exec 命令来获取 y 值,并且工作正常。我能够制作每个子图并让它填充网格,但前提是我手动输入所有内容(64 次做同样的事情只是愚蠢的,所以我知道必须有一种方法来自动化这个)。
任何人都可以提出一种可以实现这一目标的方法吗?我无法提供数据或我的代码,因为这是研究材料,不是我要发布的。如果这个问题非常基本或者我应该能够从现有文档中确定,请原谅。我对编程很陌生,可以使用一些指导!
对于这样的事情,一个有用的函数是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()
Run Code Online (Sandbox Code Playgroud)

| 归档时间: |
|
| 查看次数: |
1335 次 |
| 最近记录: |