所以我使用matplotlib创建了一个3d图。基本代码片段如下所示:
xScl, zScl = 'linear', 'linear'
data1, data2 = map(np.array, [data1, data2])
# Figure out the right scaling for different sets of data
if np.abs(data1).max() > 1000:
if data1.min() <= 0:
data1 = data1 - data1.min() + 1
# data1 = np.log10(data1)
xScl = 'log'
if np.abs(data2).max() > 1000:
if data2.min() <= 0:
data2 = data2 - data2.min() + 1
# data2 = np.log10(data2)
zScl = 'log'
for (n, f, d1, d2) in zip(ns, freqs1, data1, data2):
ax.plot( d1, [f/1e3]*len(d1), d2[abs(offset) <= 5],
's', mfc='None', mec=myCmap(n), label='%.3f Gbps'%(f/1e3))
print d1.min(), d2.min()
请注意,在绘图之前,我正在调整数据以进行适当的缩放。有两组数据data1
和data2
,我分别在x
和z
轴上绘制。 y
轴是一组频率freqs1
,并且始终相同,所以我不需要担心。我还print
每个打印数据集print d1.min(), d2.min()
的最小值。结果如下所示:
In [195]: run analysis.py
-0.510256538272 10041
-0.492209520677 10467
-0.514036247011 9954
-0.386102532864 26726
-0.38621630123 26719
-8.07925194343 1
-8.07925194343 1
-8.07925194343 1
-8.07925194343 1
-8.07925194343 1
-8.07925194343 1
-8.07925194343 1
-8.07925194343 1
-8.07925194343 1
-8.07925194343 1
-4.65764801656 2641
-2.87312441098 4616
-1.12656273628 9717
-0.796174863994 12101
-0.664695283706 14072
可以看出,第二列(应该变成对数标度)被改变,使得最小值变为1.这就是我想要的。此外,在检查结束时xScl == 'linear'
和zScl == 'log'
。
然而,当我尝试设置z比例时,如下:
ax.set_xscale(xScl)
ax.set_zscale(zScl) # <-- problem occurs here
我收到错误:
In [196]: run analysis.py
-0.510256538272 10041
[... some deleted lines here ...]
-1.12656273628 9717
-0.796174863994 12101
-0.664695283706 14072
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
[... some deleted lines here ...]
151 ax.set_xscale(xScl)
--> 152 ax.set_zscale(zScl)
153
154 pl.show()
[... some deleted lines here ...]
ValueError: Data has no positive values, and therefore can not be log-scaled.
从打印结果中可以看出,情况并非如此。最小值为1
,应该没问题。
另一方面,如果我在上面的代码中手动取对数:
if np.abs(data1).max() > 1000:
if data1.min() <= 0:
data1 = data1 - data1.min() + 1
data1 = np.log10(data1)
# xScl = 'log'
if np.abs(data2).max() > 1000:
if data2.min() <= 0:
data2 = data2 - data2.min() + 1
data2 = np.log10(data2)
# zScl = 'log'
这很好用。这意味着我的数据没有任何问题。但是,我不想这样绘制它。我想查看实际数字,但是轴会缩放到日志。看起来Matplotlib有问题吗?不确定。
我正在使用
Windows 7,
Pyhton(x,y),
Python版本:Python 2.7.5(默认,2013年5月15日,22:43:36)[MSC v.1500 32位(英特尔)]
pylab。版本 - &gt; '1.8.0'
任何帮助将不胜感激。谢谢!