来自透明的Matplotlib颜色贴图

2024-04-20 09:38:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python新手,我真的很难为我的数据获得一个合理的颜色映射

我正在绘制29x29 numpy阵列,其中大多数单元为0,但平均约10-15个单元具有非零值,其范围从低10秒到数1000秒

在C++根中,你会自动得到一个漂亮的图,它有白色背景和一个漂亮的彩虹色条,你可以在下面看到。p>

但是,在matplotlib中,请遵循以下建议:

python matplotlib heatmap colorbar from transparent 使用代码:

from matplotlib.colors import LinearSegmentedColormap
%matplotlib inline 
#Lets visualise some events

# plot states
# plot states

# get colormap
ncolors = 256
color_array = plt.get_cmap('gist_rainbow')(range(ncolors))

# change alpha values
color_array[:,-1] = np.linspace(1.0,0.0,ncolors)

# create a colormap object
map_object = LinearSegmentedColormap.from_list(name='rainbow_alpha',colors=color_array)

# register this new colormap with matplotlib
plt.register_cmap(cmap=map_object)

# set colourbar map
cmap_args=dict(cmap='jet')

fig, axarr = plt.subplots(nrows=1, ncols=3)

axarr[0].imshow(events[0],**cmap_args)
axarr[0].set_title('Event0',fontsize=16)
axarr[0].tick_params(labelsize=16)

axarr[1].imshow(events[1],**cmap_args)
axarr[1].set_title('Event1',fontsize=16)
axarr[1].tick_params(labelsize=16)

axarr[2].imshow(events[2],**cmap_args)
axarr[2].set_title('Event2',fontsize=16)
axarr[2].tick_params(labelsize=16)

fig.subplots_adjust(right=2.0)
plt.show()

我得到了下面的图片,这是无法阅读的

请有人解释一下如何在情节的一侧获得白色背景和彩虹色条

非常感谢

Text

Text


Tags: frommapobjectmatplotlibargsplteventsarray
1条回答
网友
1楼 · 发布于 2024-04-20 09:38:31

要将所有零值显示为白色,可以设置'under' color。“下颜色”用于低于颜色栏中最低值的值。强制colorbar以vmin=1从1开始会使所有小于1的值都被视为“低于”

from matplotlib import pyplot as plt
import numpy as np
from matplotlib.ticker import MultipleLocator
#%matplotlib inline

# create a colormap object
cmap = plt.get_cmap('rainbow')
cmap.set_under('white')

# set colourbar map
cmap_args = dict(cmap=cmap, vmin=1, vmax=8000)

fig, axarr = plt.subplots(nrows=1, ncols=4, figsize=(12, 3), gridspec_kw={'width_ratios': [10, 10, 10, 1]})

events = np.random.randint(0, 9, size=(3, 10, 10)) * 1000 * np.random.randint(0, 2, size=(3, 10, 10))

for ax, event, title in zip(axarr[:3], events, ['Event 0', 'Event 1', 'Event 2']):
    img = ax.imshow(event, **cmap_args)
    ax.set_title(title, fontsize=16)
    ax.tick_params(labelsize=16)
    ax.xaxis.set_major_locator(MultipleLocator(1))
    ax.yaxis.set_major_locator(MultipleLocator(1))
fig.colorbar(img, cax=axarr[3])

# to make the colorbar exactly the same height as the image plots:
pos_ax2 = axarr[2].get_position()
pos_ax3 = axarr[3].get_position()
pos_ax3.y0 = pos_ax2.y0
pos_ax3.y1 = pos_ax2.y1
axarr[3].set_position(pos_ax3)

plt.show()

example plot

相关问题 更多 >