Matplotlibの散布図の色を固定します
-
05-10-2019 - |
質問
複数の散布図のカラー範囲を修正し、各プロットにカラーバーを追加したい(各図で同じになります)。基本的に、私は軸や色空間などのすべての側面を修正しているので、プロットは目で直接匹敵します。
私の人生にとって、私は色範囲を修正するさまざまな方法をすべて把握できないようです。 VMIN、VMAXを試しましたが、何もしていないようです。また、Clim(X、Y)を試してみましたが、それもうまくいきません。
これはあちこちに出てくる必要があります、私はプロットの間でさまざまなデータのサブセットを比較したいのは私だけではありません...だから、各データがプロット間で色を保つように色をどのように修正しますかサブセット-V-セット全体の最大/分の変化のために、別の色に再マップされますか?
解決
VMINとVMAXの設定はこれを行う必要があります。
これが例です:
import matplotlib.pyplot as plt
xyc = range(20)
plt.subplot(121)
plt.scatter(xyc[:13], xyc[:13], c=xyc[:13], s=35, vmin=0, vmax=20)
plt.colorbar()
plt.xlim(0, 20)
plt.ylim(0, 20)
plt.subplot(122)
plt.scatter(xyc[8:20], xyc[8:20], c=xyc[8:20], s=35, vmin=0, vmax=20)
plt.colorbar()
plt.xlim(0, 20)
plt.ylim(0, 20)
plt.show()
そしてこれが生成するプロット:
他のヒント
わかりました、これは本当に答えではありませんが、フォローアップです。上記のトムのコードを変更する私のコーディングの結果。 [上記のコードが機能しているので、回答チェックマークを削除したいと思っているかどうかはわかりません。質問に対する答えです!
私のデータには機能しないようです!!以下は、私のデータとともに使用して、何らかの奇妙な理由で私のために機能していなかったプロットを作成できる変更されたコードです。入力は、H5PY関数(HDF5データファイルのインポート)によって発生しました。
以下では、RF85は、システムに適用されたRF電力が約85ワットの前方である実験の大規模なバッチの配列のサブセットです。私は基本的に、さまざまな方法でデータをスライスしてダイシングして、トレンドを試してみてください。これは、現在の入力である完全なデータセットと比較して85ワットです(より多くのデータがありますが、これは今のところ私が持っているものです)。
import numpy
import matplotlib.pyplot as plt
CurrentsArray = [array([ 0.83333333, 0.8 , 0.57142857, 0.83333333, 1.03333333,
0.25 , 0.81666667, 0.35714286, 0.26 , 0.57142857,
0.83333333, 0.47368421, 0.80645161, 0.47368421, 0.52631579,
0.36666667, 0.47368421, 0.57142857, 0.47368421, 0.47368421,
0.47368421, 0.47368421, 0.47368421, 0.61764706, 0.81081081,
0.41666667, 0.47368421, 0.47368421, 0.45 , 0.73333333,
0.8 , 0.8 , 0.8 , 0.47368421, 0.45 ,
0.47368421, 0.83333333, 0.47368421, 0.22222222, 0.32894737,
0.57142857, 0.83333333, 0.83333333, 1. , 1. ,
0.46666667])]
growthTarray = [array([ 705., 620., 705., 725., 712., 705., 680., 680., 620.,
660., 660., 740., 721., 730., 720., 720., 730., 705.,
690., 705., 680., 715., 705., 670., 705., 705., 650.,
725., 725., 650., 650., 650., 714., 740., 710., 717.,
737., 740., 660., 705., 725., 650., 710., 703., 700., 650.])]
CuSearray = [array([ 0.46395015, 0.30287259, 0.43496888, 0.46931773, 0.47685844,
0.44894925, 0.50727844, 0.45076198, 0.44977095, 0.41455029,
0.38089693, 0.98174953, 0.48600461, 0.65466528, 0.40563053,
0.22990327, 0.54372179, 0.43143358, 0.92515847, 0.73701742,
0.64152173, 0.52708783, 0.51794063, 0.49 , 0.48878252,
0.45119732, 0.2190089 , 0.43470776, 0.43509758, 0.52697697,
0.21576805, 0.32913721, 0.48828072, 0.62201997, 0.71442359,
0.55454867, 0.50981136, 0.48212956, 0.46 , 0.45732419,
0.43402525, 0.40290777, 0.38594786, 0.36777306, 0.36517926,
0.29880924])]
PFarray = [array([ 384., 285., 280., 274., 185., 185., 184., 184., 184.,
184., 184., 181., 110., 100., 100., 100., 85., 85.,
84., 84., 84., 84., 84., 84., 84., 84., 84.,
84., 84., 84., 84., 84., 27., 20., 5., 5.,
1., 0., 0., 0., 0., 0., 0., 0., 0., 0.])]
rf85growthTarray = [array([ 730., 705., 690., 705., 680., 715., 705., 670., 705.,
705., 650., 725., 725., 650., 650., 650.])]
rf85CuSearray = [array([ 0.54372179, 0.43143358, 0.92515847, 0.73701742, 0.64152173,
0.52708783, 0.51794063, 0.49 , 0.48878252, 0.45119732,
0.2190089 , 0.43470776, 0.43509758, 0.52697697, 0.21576805,
0.32913721])]
rf85PFarray = [array([ 85., 85., 84., 84., 84., 84., 84., 84., 84., 84., 84.,
84., 84., 84., 84., 84.])]
rf85CurrentsArray = [array([ 0.54372179, 0.43143358, 0.92515847, 0.73701742, 0.64152173,
0.52708783, 0.51794063, 0.49 , 0.48878252, 0.45119732,
0.2190089 , 0.43470776, 0.43509758, 0.52697697, 0.21576805,
0.32913721])]
Datavmax = max(max(CurrentsArray))
Datavmin = min(min(CurrentsArray))
plt.subplot(121)
plt.scatter(growthTarray, CuSearray, PFarray, CurrentsArray, vmin=Datavmin, vmax=Datavmax, alpha=0.75)
plt.colorbar()
plt.xlim(600,760)
plt.ylim(0,2.5)
plt.subplot(122)
plt.scatter(rf85growthTarray, rf85CuSearray, rf85PFarray, rf85CurrentsArray, vmin=Datavmin, vmax=Datavmax, alpha=0.75)
plt.colorbar()
plt.xlim(600,760)
plt.ylim(0,2.5)
plt.show()
そして最後に、出力:
これは私の仕事に最適な出力ではありませんが、私はそれを完璧にするための努力を費やしませんでした。しかし、重要なこと:プロット間で同じと認識するデータポイント 同じ色を含めないでください 上記のVMIN VMAXの使用に基づいた場合のように(Tomのコードが示唆するように)。
これは非常識です。 :(私は誰かが私のためにこれに光を当てることができることを願っています!私は私のコードがそれほど素晴らしいものではないことを肯定しているので、私のコードに関してはとにかく気分を害することを心配しないでください!
前進する方法を提案できる人には、firey-Hot Cheetosの余分な袋。 - アレン
更新 - Tom10は問題を抱えていました - サブアレイの1つに間違ったデータを不注意に使用していたため、値は予想以上に異なる色レベルを与えました(つまり、私のデータは間違っていました!)これのために大きな小道具 - 私は彼に別のものを与えることができたらいいのにと思います-Vote、しかし、この質問をする私の方法のために、私はできません(ごめんなさい!)
また、以下のデータ位置でテキストをプロットするという彼の素晴らしい例をご覧ください。