我有一系列的值在-180到180之间变化,我的颜色图是零对称的,即-180的颜色对于180个值是相同的,依此类推。这是我第一次使用matplotlib我只是找不到让它在零附近对称的方法,负片总是有不同颜色的正面。 非常感谢你。
答案 0 :(得分:2)
感谢来自:https://stackoverflow.com/a/31052741
的贡献import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
def symmetrical_colormap(cmap_settings, new_name = None ):
''' This function take a colormap and create a new one, as the concatenation of itself by a symmetrical fold.
'''
# get the colormap
cmap = plt.cm.get_cmap(*cmap_settings)
if not new_name:
new_name = "sym_"+cmap_settings[0] # ex: 'sym_Blues'
# this defined the roughness of the colormap, 128 fine
n= 128
# get the list of color from colormap
colors_r = cmap(np.linspace(0, 1, n)) # take the standard colormap # 'right-part'
colors_l = colors_r[::-1] # take the first list of color and flip the order # "left-part"
# combine them and build a new colormap
colors = np.vstack((colors_l, colors_r))
mymap = mcolors.LinearSegmentedColormap.from_list(new_name, colors)
return mymap
测试它给你:
# --- Quick test -------------------------
cmap_settings = ('Blues', None) # provide int instead of None to "discretize/bin" the colormap
mymap = symmetrical_colormap(cmap_settings= cmap_settings, new_name =None )
data = np.random.rand(10,10) * 2 - 1
plt.pcolor(data, cmap=mymap)
plt.colorbar()
plt.show()
答案 1 :(得分:1)
不够完美,但Diverging colormaps至少居中:
from matplotlib import pyplot as plt
<function using cmap>.(cmap=plt.get_cmap("PiYG"))