等值线图中的Python Matplotlib非线性缩放
我在可视化等高线图中的某个数据集时遇到了一些问题。问题是,我有一组数据点(X,Y,Z),Z值范围从2到0,其中许多有趣的特性位于0到0.3的范围内。使用普通缩放,很难看到它们,如下图所示: 现在,我已经考虑过还有什么可以做的了。当然有对数标度,但我首先需要考虑某种映射,我不能100%确定如何做到这一点。受此启发,我们可以想到一个类型为等值线图中的Python Matplotlib非线性缩放,python,matplotlib,scaling,contour,Python,Matplotlib,Scaling,Contour,我在可视化等高线图中的某个数据集时遇到了一些问题。问题是,我有一组数据点(X,Y,Z),Z值范围从2到0,其中许多有趣的特性位于0到0.3的范围内。使用普通缩放,很难看到它们,如下图所示: 现在,我已经考虑过还有什么可以做的了。当然有对数标度,但我首先需要考虑某种映射,我不能100%确定如何做到这一点。受此启发,我们可以想到一个类型为scaling(x)=Log(x/min)/Log(max/min)的映射,它在这个问题上相当有效 同样有趣的是后续行动 他们使用了某种arcinhscaling
scaling(x)=Log(x/min)/Log(max/min)
的映射,它在这个问题上相当有效
同样有趣的是后续行动
他们使用了某种arcinh
scaling函数。这似乎很好地放大了小特征,与整体成比例
我想我的问题有两个方面
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.)')
好问题
不要缩放数据。您将在具有许多缩放函数的范围内寻找折衷方案
取而代之的是,使用一个。这样,您就不必重新映射实际数据,并且可以轻松自定义要高亮显示的区域的可视化。可以在scipy cookbook中找到,在互联网上还有很多。另一个选择是通过断开轴将绘图分成两个单独的区域作为注释,例如,您可以看到6.2 GHz和-0.6 B左右的一些特性。这是我想要更明确的内容。这是一个伟大的见解!我将仔细阅读文档,并尝试处理这些问题。不过,我并不完全清楚,这不仅仅会将缩放问题转移到彩色贴图上。第一件事当然是选择对比度很好的颜色(这也不是小事),但我仍然需要确保过渡是这样的,我感兴趣的细节变得可见。假设我在0到1的范围内从蓝色变为红色,但我的大部分详细信息都在0到0.2的范围内。那么我仍然需要一些特殊的比例来绘制彩色地图,对吗?@user129412我理解这样做是否会将缩放问题转移到彩色地图上。但是颜色贴图可以完全任意设置。要使用数据上的缩放函数实现这一点,您需要寻找分段连续函数。通过更改颜色贴图,您可以更快地完成此操作。至于选择,您确实可以使其在边界处不连续(例如,1:红色、0.2:蓝色,然后是灰度),或者仅“拉伸”cmap:blue到橙色(表示[0.2]),橙色到红色(表示[0.2])(.2,1)。是的,这是有道理的。我认为彩色地图上有足够多的文档,所以我应该能够自己弄清楚。谢谢!