由SymLogNorm引起的ValuError

时间:2018-12-04 14:20:52

标签: python matplotlib graph

我试图概括一个遗留代码,并且不得不创建一个函数来绘制图形。下面的代码是我能想到的最简单的形式,它可以呈现它,同时还保持了可复制性。

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替换为数组。错误是一样的。

0 个答案:

没有答案