我想使用子图来绘制大量数据,虽然我没有遇到问题,但我想知道是否有方便的方法来实现这个目标。
以下是示例代码。
import numpy as np
import math
import matplotlib.pyplot as plt
quantities=["sam_mvir","mvir","rvir","rs","vrms","vmax"
,"jx","jy","jz","spin","m200b","m200c","m500c","m2500c"
,"xoff","voff","btoc","ctoa","ax","ay","az"]
# len(quantities) = 21, just to make the second loop expression
# shorter in this post.
ncol = 5
nrow = math.ceil(21 / ncol)
fig, axes = plt.subplots(nrows = nrow, ncols=ncol, figsize=(8,6))
for i in range(nrow):
for j in range(((21-i*5)>5)*5 + ((21-i*5)<5)*(21%5)):
axes[i, j].plot(tree[quantities[i*ncol + j]])
axes[i, j].set_title(quantities[i*ncol + j])
这段代码循环遍历一个2D子图阵列,在第21个子图停止,留下4个空面板。 我的问题是是否有任何内置方法可以完成此任务? 例如,创建2D子图阵列并将数组“展平”为1D,然后通过0到20循环遍历1D数组。
第二个range()中的表达式非常丑陋。我不认为我会使用这段代码。 我认为简单的方法是计算子图数量,如果计数> 21,则跳出循环。 但我只是想知道是否有更好(或花哨)的方法。
fig.add_subplot
来确保状态机不会反击。 - tacaswellfig.tight_layout()
。 - Tom Pohl