为不包含可映射的图形创建颜色条?

时间:2017-04-30 21:10:41

标签: python matplotlib

我正在尝试将colorbar添加到由不包含“matplotlib”的Python库mappable创建的图表中。据我所知,mapable是某种对象,例如轮廓,它具有可以映射colormap的离散值。虽然在我的情况下,我以编程方式生成plot(行)的调用,这些调用未包含在mappable对象中。我没有看到colorbar的构造函数/方法没有假设情节中已存在mappable对象。

到目前为止,我的图表看起来像(我似乎无法获得良好的图像,但我认为这是有效的;是的,这是一个可怕的配色方案)

enter image description here

这是一个代码的SSCCE,用于按照我对问题的方式生成图形

import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap
from matplotlib.backends.backend_pdf import PdfPages

colorDict = {'red': [(0.0, 1.0, 1.0), (1.0, 0.0, 0.0)], 'green': [(0.0, 0.0, 0.0), (1.0, 1.0, 1.0)], 'blue': [(0.0, 0.0, 1.0), (1.0, 0.0, 0.0)]}
rgColorMap = LinearSegmentedColormap('RedGreen', colorDict, 10)
seedColors = cm.get_cmap(rgColorMap, 10)

graphPdf = PdfPages('Example.pdf')
fig = plt.figure(figsize=(8.27, 11.69), dpi=100)
for lineInd in range(1, 9):
    plt.plot([x for x in range(1, 10)], [y*lineInd for y in range(1, 10)], color=seedColors(lineInd))

graphPdf.savefig(fig)
graphPdf.close()

在这种情况下,如何在没有绘制colorbar对象的情况下创建mappable

我唯一的解决方案是将我在循环中绘制的数据分组到mappable然后在循环完成后进行绘图,或者是否有办法实例化colorbar而没有某种类型的mappable

1 个答案:

答案 0 :(得分:1)

您当然可以创建自己的ScalarMappable,

sm = plt.cm.ScalarMappable(cmap=...)

然后需要将数组映射到颜色(sm.set_array())。

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

colorDict = {'red': [(0.0, 1.0, 1.0), (1.0, 0.0, 0.0)], 'green': [(0.0, 0.0, 0.0), (1.0, 1.0, 1.0)], 'blue': [(0.0, 0.0, 1.0), (1.0, 0.0, 0.0)]}
rgColorMap = matplotlib.colors.LinearSegmentedColormap('RedGreen', colorDict, 10)
seedColors = plt.cm.get_cmap(rgColorMap, 10)

sm = plt.cm.ScalarMappable(cmap=seedColors)
sm.set_array(range(1, 9))
fig = plt.figure(figsize=(8.27, 11.69), dpi=100)
for lineInd in range(1, 9):
    plt.plot([x for x in range(1, 10)], [y*lineInd for y in range(1, 10)], color=seedColors(lineInd))


fig.colorbar(sm, ticks=range(1,9), boundaries=np.arange(0.5,9,1))

plt.show()

enter image description here