与标准化不同的颜色条限制
Colorbar limits that are different from the normalization
我正在尝试用颜色条制作散点图,其中“0”是透明的。零数据有一个透明的散点很重要,但我不希望这个透明的颜色箱出现在我的颜色栏中。我想将颜色条图例的范围限制为 (1,14)。 clim(0, 14) 不适合我。
plt.figure()
cmaplist = plt.get_cmap('jet')(range(256))
cmaplist[:,-1] = [0] + list(np.ones(len(cmaplist[:-1])))
map_object = mpl.colors.LinearSegmentedColormap.from_list(name='agn_map', colors=cmaplist)
plt.register_cmap(cmap=map_object)
bounds = np.linspace(0, 14, 15)
norm = mpl.colors.BoundaryNorm(bounds, 256)
x, y, z = np.random.uniform(0, 10, 50), np.random.uniform(0, 10, 50), np.random.randint(0, 14, 50)
plt.scatter(x, y, c=z, cmap='agn_map', norm=norm, s=25, marker="*")
plt.xlabel('V-J restframe mag', fontsize=12)
plt.ylabel('U-V restframe mag', fontsize=12)
plt.colorbar()
plt.show()
我想从条形中切掉最低的色块:
规范化库和最小值和最大值库的引入如何解决您的挑战?以下代码仅引发要添加的行和要更新的行。
from matplotlib.colors import Normalize #add
plt.scatter(x, y, c=z, cmap='agn_map', norm=Normalize(vmin=1,vmax=14), s=25, marker="*") #update
plt.colorbar(ticks=np.arange(1,15)) # update
回答我自己的问题:这段代码给出了我想要的结果。
from matplotlib.colors import Normalize
import matplotlib as mpl
from matplotlib import pyplot as plt
import numpy as np
plt.figure()
cmaplist = plt.get_cmap('jet')(range(256))
cmaplist[:,-1] = [0] + list(np.ones(len(cmaplist[:-1])))
map_object = mpl.colors.LinearSegmentedColormap.from_list(name='agn_map', colors=cmaplist)
plt.register_cmap(cmap=map_object)
x, y, z = np.random.uniform(0, 10, 50), np.random.uniform(0, 10, 50), np.random.randint(0, 14, 50)
plt.scatter(x, y, c=z, cmap='agn_map', norm=Normalize(vmin=1,vmax=14), s=25, marker="*") #update
bounds = np.linspace(1, 14, 14)
plt.colorbar(ticks=np.arange(1,15), drawedges=True, boundaries=bounds) # update
plt.xlabel('V-J restframe mag', fontsize=12)
plt.ylabel('U-V restframe mag', fontsize=12)
plt.show()
我正在尝试用颜色条制作散点图,其中“0”是透明的。零数据有一个透明的散点很重要,但我不希望这个透明的颜色箱出现在我的颜色栏中。我想将颜色条图例的范围限制为 (1,14)。 clim(0, 14) 不适合我。
plt.figure()
cmaplist = plt.get_cmap('jet')(range(256))
cmaplist[:,-1] = [0] + list(np.ones(len(cmaplist[:-1])))
map_object = mpl.colors.LinearSegmentedColormap.from_list(name='agn_map', colors=cmaplist)
plt.register_cmap(cmap=map_object)
bounds = np.linspace(0, 14, 15)
norm = mpl.colors.BoundaryNorm(bounds, 256)
x, y, z = np.random.uniform(0, 10, 50), np.random.uniform(0, 10, 50), np.random.randint(0, 14, 50)
plt.scatter(x, y, c=z, cmap='agn_map', norm=norm, s=25, marker="*")
plt.xlabel('V-J restframe mag', fontsize=12)
plt.ylabel('U-V restframe mag', fontsize=12)
plt.colorbar()
plt.show()
我想从条形中切掉最低的色块:
规范化库和最小值和最大值库的引入如何解决您的挑战?以下代码仅引发要添加的行和要更新的行。
from matplotlib.colors import Normalize #add
plt.scatter(x, y, c=z, cmap='agn_map', norm=Normalize(vmin=1,vmax=14), s=25, marker="*") #update
plt.colorbar(ticks=np.arange(1,15)) # update
回答我自己的问题:这段代码给出了我想要的结果。
from matplotlib.colors import Normalize
import matplotlib as mpl
from matplotlib import pyplot as plt
import numpy as np
plt.figure()
cmaplist = plt.get_cmap('jet')(range(256))
cmaplist[:,-1] = [0] + list(np.ones(len(cmaplist[:-1])))
map_object = mpl.colors.LinearSegmentedColormap.from_list(name='agn_map', colors=cmaplist)
plt.register_cmap(cmap=map_object)
x, y, z = np.random.uniform(0, 10, 50), np.random.uniform(0, 10, 50), np.random.randint(0, 14, 50)
plt.scatter(x, y, c=z, cmap='agn_map', norm=Normalize(vmin=1,vmax=14), s=25, marker="*") #update
bounds = np.linspace(1, 14, 14)
plt.colorbar(ticks=np.arange(1,15), drawedges=True, boundaries=bounds) # update
plt.xlabel('V-J restframe mag', fontsize=12)
plt.ylabel('U-V restframe mag', fontsize=12)
plt.show()