我试图概括一个遗留代码,并且不得不创建一个函数来绘制图形。下面的代码是我能想到的最简单的形式,它可以呈现它,同时还保持了可复制性。
from mpl_toolkits.axes_grid1 import make_axes_locatable
import numpy as np
import matplotlib.colors as colors
import matplotlib.pyplot as plt
def graphs(arr, sub, fig):
cm=plt.cm.jet
cm.set_under('white')
image=sub.imshow(arr,origin='low',cmap=cm,norm=colors.SymLogNorm(linthresh=10))
sub.axis([-100,100,-100,100])
divider = make_axes_locatable(sub)
fig.colorbar(image, cax=divider.append_axes("right", size="5%", pad=0.05))
T=np.random.rand(204,204)*np.nan
T[:T.size//2:2] = 2
fig1, (a1,a2,a3,a4) = plt.subplots(ncols=4,figsize=(15,15))
im1=graphs(T,a1,fig1)
im2=graphs(T,a2,fig1)
im3=graphs(T,a3,fig1)
im4=graphs(T,a4,fig1)
T.npy
是此file,包含一个numpy
数组,其中包含一些数字,但大多数为NaN
。当我删除norm
参数时,代码可以正常工作(但不是正确的方法,因为我还需要包含负值)。所以我认为SymLogNorm
是元凶。我得到的错误是:
ValueError: Both *x_transform* and *y_transform* must be 2D affine transforms
我无法正常工作。我对“仿射变换”的搜索并不富有成果。任何帮助将不胜感激。
P.S。我尽力使它可复制。但是,如果缺少某些内容,请告诉我,以便我编辑帖子。
编辑:为了方便复制,我将文件T.npy
替换为数组。错误是一样的。