Python Matplotlib等高线图中的非线性缩放

时间:2016-06-01 12:51:08

标签: python matplotlib scaling contour

我在查看轮廓图中的某个数据集时遇到了一些麻烦。问题是我有一堆数据点(X,Y,Z),Z值的范围从大约2到0,其中许多有趣的特征位于0到0.3范围内。使用正常缩放,很难看到它们,如下图所示:

http://i.stack.imgur.com/7O8hH.png

现在,我已经考虑过要做什么了。当然有对数缩放,但是我首先需要考虑某种映射,我不是百分之百确定如何做到这一点。受this question的启发,可以想到scaling(x) = Log(x/min)/Log(max/min)类型的映射,该问题在该问题中运作得相当好。

同样有趣的是后续discussed here

他们使用了某种ArcSinh缩放功能。这似乎可以很好地扩大小功能,与整体成比例。

所以我的问题是我认为的两倍。

  1. 如何缩放轮廓图中的数据,使小幅度特征不被异常值吹走?

  2. 您是使用上述任何一种方法,还是使用完全不同的方法?

  3. 我对python很陌生,我对所有已经存在的东西都感到惊讶,所以我确信可能有一种比我上面提到的更好的内置方式。

    为了完整性我上传了datafile here(上传网站是robustfiles.com,快速谷歌搜索告诉我这是一个值得信赖的网站,可以分享这些内容)

    我用

    绘制了上面的内容
    data = np.load("D:\SavedData\ThreeQubitRess44SpecHighResNormalFreqs.npy")
    
    fig, (ax1) = plt.subplots(1,figsize=(16,16))    
    cs = ax1.contourf(X, Y, data, 210, alpha=1,cmap='jet')
    fig.colorbar(cs, ax=ax1, shrink=0.9)
    ax1.set_title("Freq vs B")
    ax1.set_ylabel('Frequency (GHz)'); ax1.set_xlabel('B (arb.)')
    

2 个答案:

答案 0 :(得分:2)

很棒的问题。

不要缩放数据。您将在具有许多缩放功能的范围内寻找妥协。

相反,请使用custom colormap。这样,您就不必重新映射实际数据,并且可以轻松自定义您想要突出显示的区域的可视化。 Another example可以在scipy cookbook中找到,在互联网上可以找到更多。

答案 1 :(得分:1)

另一个选择是通过打破轴like so

将绘图分成两个独立的区域