如何在colorbar中间设置最低值的顺序正色条范围

时间:2018-06-01 18:56:05

标签: python matplotlib colorbar

我正在设置一个颜色条,我知道攀登可以做到这一点。我无法弄清楚你是如何设置的,以便中间的颜色条值是最小的1,例如,范围是1到52?

我这样做是因为我有周数,但我不想在12月到1月的颜色上显示大跳跃(值52和1)

编辑:我在谈论颜色,以便颜色条的两端颜色相似,但中间是最不同的颜色。我不想更改颜色栏中的值

2 个答案:

答案 0 :(得分:2)

您要求的是循环色彩映射。截至目前,matplotlib仅提供一个单一的循环色图,即"hsv"。但是,您可以轻松定义自己的色彩映射表,并确保它是循环的,例如使用颜色["gold", "red", "black", "navy", "gold"],其中第一个和最后一个颜色是相同的。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
plt.rcParams['lines.markersize'] = 12

x = np.arange(200)
y = np.ones(200)

fig, ax = plt.subplots()
ax.scatter(x,y, c=x % 52, marker="|" )

ax.scatter(x,y-1, c=x % 52, cmap="hsv", marker="|" )

colors = ["gold", "red", "black", "navy", "gold"]
cmap = mcolors.LinearSegmentedColormap.from_list("", colors)
ax.scatter(x,y-2, c=x % 52, cmap=cmap, marker="|" )

ax.set_yticks([-1,0,1])
ax.set_yticklabels(["custom", "hsv", "viridis", ])
ax.margins(y=0.4)
plt.show()

enter image description here

答案 1 :(得分:1)

您无法将clim用于所需内容。代替:

from matplotlib.colors import ListedColormap
from matplotlib.cm import get_cmap
inferno = get_cmap('inferno').colors
new_cmap = ListedColormap(inferno+inferno[::-1])

mid-centered cmap