【问题标题】:Insert marker line in color map在彩色地图中插入标记线
【发布时间】:2017-05-18 14:40:38
【问题描述】:

我已经创建了一个这样的颜色图:

cdict = { 'red': [], 'green': [], 'blue': [] }
def addSect(pos, sect):
   for col in ('red', 'green', 'blue'):
      v = sect.pop(0)
      cdict[col].append((pos, v, v))
colSects = [(0.0, [0,0,1]) , (0.25, [0,1,1]) , (0.25, [0,1,1]) , (0.5, [0,1,0]) , (0.5, [0,1,0]) , (0.75, [1,1,0]) , (0.75, [1,1,0]) , (1.0, [1,0,0])]
for idx in range(len(colSects)):
   sect, col = colSects[idx]
   addSect(sect, col)
cmap = LinearSegmentedColormap('Fire', cdict)

这将很好地定义从蓝色到绿色到红色的彩虹色图。

现在我的问题是我需要在这张彩色地图的某处使用黑色标记。乍一看,以下内容看起来不错:

这是通过插入黑色边框来实现的

colSects.insert(1, (0.2, [0,1,1]))
colSects.insert(2, (0.2, [0,0,0]))
colSects.insert(3, (0.22, [0,0,0]))
colSects.insert(4, (0.22, [0,1,1]))

但确实没那么简单。将标记放在更左侧时

colSects.insert(1, (0.1, [0,1,1]))
colSects.insert(2, (0.1, [0,0,0]))
colSects.insert(3, (0.12, [0,0,0]))
colSects.insert(4, (0.12, [0,1,1]))

它产生

您会看到绿松石部分现在被拉伸了。但我需要如上背景中的彩虹。我可能需要在替换部件上获取颜色并在我的insert 语句中使用这些颜色。但这将涉及很多 if 子句。我的问题:有没有一种简单的方法可以根据需要设置标记?

【问题讨论】:

  • 澄清一下,您想在颜色栏中添加一个标记,还是想在颜色图中添加一些黑色区域?
  • @ImportanceOfBeingErnest 它应该是一个窄条,因此绘图会突出显示该区域。它是彩色地图的一部分。
  • @ImportanceOfBeingErnest 它是颜色图的一部分...

标签: python matplotlib colors


【解决方案1】:

我建议通过将黑色插入从原始颜色图创建的颜色列表中,从原始颜色图创建一个新的颜色图。如果需要,这也将打开使用不同颜色图的可能性。

使用静态的LinearSegmentedColormap.from_list 方法让一切变得更容易。

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

data = np.linspace(0,1,num=50*50).reshape(50,50)

colSects = [(0.0, [0,0,1]) ,(0.25, [0,1,1]) ,
            (0.5, [0,1,0]) , (0.75, [1,1,0]) ,  (1.0, [1,0,0])]
cmap = matplotlib.colors.LinearSegmentedColormap.from_list('Fire', colSects)
# or use directly
# cmap = plt.cm.jet    

def addblack(cmap, cmin,cmax):
    """ add black between cmin and cmax """
    r = np.arange(int(cmin*255), int(cmax*255), 1)
    colors = cmap(np.linspace(0,1,256))
    for i in r:
        colors[i] = (0,0,0,1)
    return matplotlib.colors.LinearSegmentedColormap.from_list('newcmap', colors)

cmap = addblack(cmap, 0.1,0.12)
plt.imshow(data, cmap=cmap)
plt.colorbar()

plt.show()

【讨论】:

  • 正是我想要的。谢谢!
  • 另外,我还想把喷气机地图和我的比较一下,感觉它是不同的。会再看的!
  • 喷射图更暗,绿色更少。但无论如何感谢您的出色解决方案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-23
  • 1970-01-01
  • 2013-10-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多