서브 플로트를 사용하여 많은 데이터를 플롯하려고하는데 문제가되지는 않지만이를 수행 할 수있는 편리한 방법이 있는지 궁금합니다.2 차원 서브 플로트에서 1-D처럼 루프
아래의 샘플 코드가 있습니다.
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로 "평평하게"한 다음 1D 배열을 0에서 20까지 반복합니다.
두 번째 범위()의 표현식은 매우 추합니다. 나는이 코드를 사용하지 않을 것이라고 생각한다. 사소한 방법은 플롯의 수를 세고 개수가 21보다 많을 때 중단하는 것이라고 생각합니다. 그러나 더 나은 (멋진) 방법이 있는지 궁금합니다.
아 ..... 그게 내가 내 질문에 대답하는 것 아무것도 찾을 수있는 이유 ...! 질문은 유효하지 않았습니다. 고마워요! 빨리되었습니다. –
이런 식으로 할 경우 최소한'fig.add_subplot'을 사용하여 상태 시스템이 반격하지 않도록해야합니다. – tacaswell