2017-04-30 5 views
1

"mappable"を含まないPythonライブラリmatplotlibによって作成されたグラフにcolorbarを追加しようとしています。私はmapableは、等高線のようなオブジェクトのいくつかの種類であると言うことができますから、colormapをマッピングできる離散値があります。私の場合は(行)への呼び出しをプログラムで生成していますが、これはmappableオブジェクトに含まれていません。私はcolorbarのコンストラクタ/メソッドが表示されておらず、すでにプロットにmappableオブジェクトが存在するとは仮定していません。マップ可能なグラフを含まないグラフのカラーバーを作成しますか?

私のグラフは、これまでのように見える(私は良好な画像を得るように見えることはできませんが、私はこれがうまくいくと思う。はい、その恐ろしいカラースキーム)ここで

enter image description here

は、コードのSSCCEです方法でのようなグラフを生成するために、私は私が mappableオブジェクトがプロットされなくても、 colorbarを作成することができますどのようにこの場合

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() 

問題のためですか?

グループへの私の唯一の解決策は、私がmappableにループにプロットして、ループが終了した後にプロットしていたデータです、またはmappableのいくつかの並べ替えなしcolorbarをインスタンス化する方法はありますか?

+0

心配はありません、私は不明、追加の質問を削除します。 – KDecker

答えて

1

もちろん、あなた自身のScalarMappable、そして色(sm.set_array())に配列マッピングを持っている必要があります

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

を作成することができます。

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

関連する問題