2017-02-09 8 views
1

matplotlibを使用して私のプロット用のカラーバーをPythonで作成する際に問題があります。カラーマップを使用していますが、プロットするすべてのデータを色付けするのではなく、プロットしない値に基づいてプロットの色を抽出します。これはうまくいくと思っています。 私はforループで、あるパラメータに基づいて色で毎回プロットを作成します。このように(データはMWEを作成するための一例であり、私のデータはより複雑である):今すぐmatplotlibプロットの横にカラーマップを作成して、データをプロットすることなくカラーマップを作成する

import matplotlib as mpl 
from matplotlib import pyplot as plt 
import numpy as np 

xdata = np.array(range(10)) 
parameter = [0.5, 0.3, 0.78, 0.21, 0.45] #random parameter example 

cmap = mpl.cm.get_cmap('jet') 

for i in range(len(parameter)): 
    clr = cmap(parameter(i)) 
    plt.plot(xdata,xdata**i,c=clr) 

plt.show() 

、私が望むことは側のカラーバーがある(または実際には二つの、それは私が考える別の問題です)には、ジェットカラーマップとその値が表示されます。値は新しい最小値と最大値にスケーリングする必要があります。

は、これまでのところ、私は次のことを見つけたが、私は私自身の問題に適用するのに十分なことを理解していない:

Getting individual colors from a color map in matplotlib どの色を抽出するために私に言ったし、正規化を作成する方法を示していますカラーマップ

Colorbar only プロットされたデータを使わずにカラーバーを追加する方法を教えてください。しかし、十分理解できません。私の問題は、軸の作成です。私は私のプロットの隣にカラーバーを置いておきたいなら、この部分を理解していません。この例では、ハンドルはfigのFigureを作成しますが、私の場合はplt.imshow(image)を作成するとFigureが作成されます。なぜなら、これが最初から始まっていて、次に画像の上にプロットしているからです。ここではfig.add_axesを使用できません。

ここで私を助けてくれることを願っています。 「反転した」カラーバーを作成することができれば嬉しいです。したがって、色が逆方向にあるか、バーの横にある値になります。

+0

スクリプトの任意の時点で、 'fig = plt.gcf()'と 'ax = plt.gca()'を介して軸を取得できます。だから、軸の追加は 'plt.gcf()。add_axes(...)'で行うことができます。何かをプロットする前に 'fig = plt.figure()'を置くことには何も問題ありません。すべての標準カラーマップは逆のバージョンを持ち、名前の末尾に '_r'を付けます。 'viridis'の代わりに' viridis_r'を使うことができます。 – ImportanceOfBeingErnest

+0

ありがとう、これは私が必要とするように聞こえる!残念ながら、明日まで試してみることはできません、それがうまくいけばお知らせします。私はMATLABと何度も協力してきたので、gcfとgcaを考えていたはずです... -.- –

+0

これはちょうど私が必要としていたことでした。私は知っていたはずだったはずだと思いますが、私はもうこれをすべて一緒にまとめることができなかったので、本当にここで私を助けました。あなたが答えとして投稿すれば、私はそれを投票します;-) –

答えて

0

スクリプト内の任意の時点で、数字をfig = plt.gcf()、軸をax=plt.gca()で取得できます。したがって、軸の追加はplt.gcf().add_axes(...)で行うことができます。
プロットする前に​​を置くことも何も問題ありません。

新しい軸の作成後、plt.gca()は新しい軸を返しますので、新しい軸を追加する前に主軸の参照を作成することをお勧めします。
図と、後で参照するための軸を取得するための便利な方法が

fig, ax = plt.subplots() 

カラーマップを経由して図を作成することです: すべての標準カラーマップは、その名前の最後に_rを持つ逆バージョンを持ってい、例えばviridisの代わりにviridis_rを使用できます。

+0

パーフェクト、ちょうど私が感謝の必要なもの。回答は受け入れられていますが、まだそれをアップヴォートすることはできません –

関連する問題