加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

在python中使用matplotlib制作自定义色彩映射表

发布时间:2020-12-20 12:38:06 所属栏目:Python 来源:网络整理
导读:我有一个用matplotlib显示的图像. ? 该图像由以下代码生成: import numpy as npimport matplotlib.pyplot as pltfrom matplotlib import cmlabels = ['Name1','Name2','Name3','Name4','Name5','Name6']data = np.array( [[ 0.000,0.120,0.043,0.094,0.037,
我有一个用matplotlib显示的图像.

?

该图像由以下代码生成:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm


labels = ['Name1','Name2','Name3','Name4','Name5','Name6']

data = np.array(
 [[ 0.000,0.120,0.043,0.094,0.037,0.045],[ 0.120,0.000,0.108,0.107,0.105,0.108],[ 0.043,0.083,0.042],[ 0.094,0.089],[ 0.037,2.440],[ 0.045,0.042,0.089,2.440,0.000]])


mask =  np.tri(data.shape[0],k=-1)
data = np.ma.array(data,mask=mask) # Mask out the lower triangle of data.

fig,ax = plt.subplots(sharex=True)
im = ax.pcolor(data,edgecolors='black',linewidths=0.3)

# Format
fig = plt.gcf()
fig.set_size_inches(10,10)

ax.set_yticks(np.arange(data.shape[0]) + 0.5,minor=False)
ax.set_xticks(np.arange(data.shape[1]) + 0.5,minor=False)

# Turn off the frame.
ax.set_frame_on(False)
ax.set_aspect('equal')  # Ensure heatmap cells are square.

# Want a more natural,table-like display.
ax.invert_yaxis()
ax.yaxis.tick_right()
ax.xaxis.tick_top()

ax.set_xticklabels(labels,minor=False)
ax.set_yticklabels(labels,minor=False)

# Rotate the upper labels.
plt.xticks(rotation=90)
ax.grid(False)
ax = plt.gca()

for t in ax.xaxis.get_major_ticks():
    t.tick1On = False
    t.tick2On = False
for t in ax.yaxis.get_major_ticks():
    t.tick1On = False
    t.tick2On = False

fig.colorbar(im)

fig.savefig('out.png',transparent=False,bbox_inches='tight',pad_inches=0)

我想应用自定义色图,以便值:

> 0-1之间是蓝色和白色的线性渐变
> 1-3之间
白色和红色的线性渐变.

任何帮助将不胜感激.

解决方法

这样做的方法不止一种.在您的情况下,最简单的方法是使用LinearSegmentedColormap.from_list并指定颜色的相对位置以及颜色名称. (如果你有均匀间隔的变化,你可以跳过元组,只做from_list(‘我的cmap’,[‘blue’,’white’,’red’]).)然后你需要指定一个手动min和最大数据(vmin和vmax kwargs到imshow / pcolor / etc).

举个例子:

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import LinearSegmentedColormap

data = np.array(
             [[ 0.000,0.000]])
mask = np.tri(data.shape[0],k=-1)
data = np.ma.masked_where(mask,data)

vmax = 3.0
cmap = LinearSegmentedColormap.from_list('mycmap',[(0 / vmax,'blue'),(1 / vmax,'white'),(3 / vmax,'red')]
                                        )

fig,ax = plt.subplots()
im = ax.pcolor(data,cmap=cmap,vmin=0,vmax=vmax,edgecolors='black')
cbar = fig.colorbar(im)

cbar.set_ticks(range(4)) # Integer colorbar tick locations
ax.set(frame_on=False,aspect=1,xticks=[],yticks=[])
ax.invert_yaxis()

plt.show()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读