Matplotlib - 两个不同范围的不同颜色图
Matplotlib - two different colormaps with different ranges
我正在尝试合并两个以前分开的数字。
一个是 3 面板图形 (ax1、ax2、ax3)(全部由 imshow
生成),其中我在侧面使用一个单一的颜色图。现在,我想添加另一个图形 (ax0),我使用 imread
和 get_sample_data
(来自 matplotlib.cbook
)从 png 文件加载。
问题是这个新图形采用了与 3 个面板中的相同的颜色图,因此在新添加的面板中产生了一种简单的统一颜色。其他 3 个面板的颜色仍然正确。
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
import numpy as np
g1 = gridspec.GridSpec(4, 1, height_ratios=[4,1,1,1])
g1.update(wspace=0.05, hspace=0.2) # set the spacing between axes.
f, ((ax0), (ax1), (ax2), (ax3)) = plt.subplots(4, 1, sharex='col', sharey='row')
ax0 = subplot(g1[0])
ax1 = subplot(g1[1])
ax2 = subplot(g1[2])
ax3 = subplot(g1[3])
from matplotlib.cbook import get_sample_data
im2 = plt.imread(get_sample_data('PathToFig/Figure.png'))
ax0.imshow(im2, vmax=1)
ziAA = np.random.rand(4, 4, 4)
ziAB = np.random.rand(4, 4, 4)
ziBA = np.random.rand(4, 4, 4)
ax1.imshow(ziAA,origin="lower",vmin=0,vmax=0.03,aspect="auto",extent=[-0.15,0.15,0,4])
ax2.imshow(ziAB,origin="lower",vmin=0,vmax=0.03,aspect="auto",extent=[-0.15,0.15,0,4])
im = ax3.imshow(ziBA,origin="lower",vmin=0,vmax=0.03,aspect="auto",extent=[-0.15,0.15,0,4])
from matplotlib import ticker
tick_locator = ticker.MaxNLocator(nbins=5)
f.subplots_adjust(right=0.85)
cbar_ax = f.add_axes([1.0, 0.15, 0.01, 0.7])
cbar = f.colorbar(im, cax=cbar_ax)
cbar.locator = tick_locator
cbar.update_ticks()
cbar.solids.set_rasterized(True)
cbar.solids.set_edgecolor("face")
ziAB
、ziBA
和 ziAA
是在之前的 griddata
插值调用中生成的。
我尝试在每个 imshow
调用中指定两个不同的颜色图,我尝试更改 vmax
的值。但无济于事...
如果我把ax0
放在ax1
-3
之后,那么得到正确颜色的是ax0,而不是ax1
-3
。
我查看了其他类似问题 (Two different color colormaps in the same imshow matplotlib),它们讨论了创建屏蔽数组或我自己的颜色图,但由于 ax0 的 png
文件来源,我不知道真的明白我应该如何进行了。
编辑:
玩具数据:
ziAA = np.random.rand(4, 4, 4)
ziAB = np.random.rand(4, 4, 4)
ziBA = np.random.rand(4, 4, 4)
玩具png图:
有了这张图,统一的颜色变成了白色。我的实际数字给制服红色。这表明通过适当调整 vmin、vmax 和其他可能的控制参数,可以使 png 图正确显示。但是,我会对适用于任何 png 图的东西感兴趣...
与:
im0 = ax0.imshow(im2, aspect='auto',extent=[-0.15,0.15,0,4])
产生以下结果:
我正在尝试合并两个以前分开的数字。
一个是 3 面板图形 (ax1、ax2、ax3)(全部由 imshow
生成),其中我在侧面使用一个单一的颜色图。现在,我想添加另一个图形 (ax0),我使用 imread
和 get_sample_data
(来自 matplotlib.cbook
)从 png 文件加载。
问题是这个新图形采用了与 3 个面板中的相同的颜色图,因此在新添加的面板中产生了一种简单的统一颜色。其他 3 个面板的颜色仍然正确。
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
import numpy as np
g1 = gridspec.GridSpec(4, 1, height_ratios=[4,1,1,1])
g1.update(wspace=0.05, hspace=0.2) # set the spacing between axes.
f, ((ax0), (ax1), (ax2), (ax3)) = plt.subplots(4, 1, sharex='col', sharey='row')
ax0 = subplot(g1[0])
ax1 = subplot(g1[1])
ax2 = subplot(g1[2])
ax3 = subplot(g1[3])
from matplotlib.cbook import get_sample_data
im2 = plt.imread(get_sample_data('PathToFig/Figure.png'))
ax0.imshow(im2, vmax=1)
ziAA = np.random.rand(4, 4, 4)
ziAB = np.random.rand(4, 4, 4)
ziBA = np.random.rand(4, 4, 4)
ax1.imshow(ziAA,origin="lower",vmin=0,vmax=0.03,aspect="auto",extent=[-0.15,0.15,0,4])
ax2.imshow(ziAB,origin="lower",vmin=0,vmax=0.03,aspect="auto",extent=[-0.15,0.15,0,4])
im = ax3.imshow(ziBA,origin="lower",vmin=0,vmax=0.03,aspect="auto",extent=[-0.15,0.15,0,4])
from matplotlib import ticker
tick_locator = ticker.MaxNLocator(nbins=5)
f.subplots_adjust(right=0.85)
cbar_ax = f.add_axes([1.0, 0.15, 0.01, 0.7])
cbar = f.colorbar(im, cax=cbar_ax)
cbar.locator = tick_locator
cbar.update_ticks()
cbar.solids.set_rasterized(True)
cbar.solids.set_edgecolor("face")
ziAB
、ziBA
和 ziAA
是在之前的 griddata
插值调用中生成的。
我尝试在每个 imshow
调用中指定两个不同的颜色图,我尝试更改 vmax
的值。但无济于事...
如果我把ax0
放在ax1
-3
之后,那么得到正确颜色的是ax0,而不是ax1
-3
。
我查看了其他类似问题 (Two different color colormaps in the same imshow matplotlib),它们讨论了创建屏蔽数组或我自己的颜色图,但由于 ax0 的 png
文件来源,我不知道真的明白我应该如何进行了。
编辑:
玩具数据:
ziAA = np.random.rand(4, 4, 4)
ziAB = np.random.rand(4, 4, 4)
ziBA = np.random.rand(4, 4, 4)
玩具png图:
有了这张图,统一的颜色变成了白色。我的实际数字给制服红色。这表明通过适当调整 vmin、vmax 和其他可能的控制参数,可以使 png 图正确显示。但是,我会对适用于任何 png 图的东西感兴趣...
与:
im0 = ax0.imshow(im2, aspect='auto',extent=[-0.15,0.15,0,4])
产生以下结果: