pylab 3d轴日志比例问题

时间:2014-10-01 02:20:23

标签: python matplotlib 3d

所以我使用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()

请注意,在绘图之前,我正在调整数据以进行适当的缩放。有两组数据data1data2,我分别在xz轴上绘制。 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'

任何帮助将不胜感激。谢谢!

0 个答案:

没有答案