http://matplotlib.org/examples/color/named_colors.html # iris.targetには種別を表す[0, 1, 2]が入っているのでそれで色分け, # 定義されているカラーマップを適用する 環境 macOS mojave 10.14.4; Python 3.7.3; 2次元カラーマップを書いていて,カラーバーの範囲が思うように出なくて困りました. こんな図が欲しいのに, Pythonでグラフを描く時、Matplotlibを使うと思います。 また最近はSeabornというグラフを綺麗にしてくれるライブラリがあり、自分はそれを愛用しています。 ただ、色をもっと自由に選びたい、設定したいという時に+αでColormapのカスタマ … [matplotlib 3D] 58. Zの後の10はレベルの設定であり、データを等高線により10個に分けるというの意味。 cmapを指定することで、色を使って等高線を表現することができる。 cmap=’PuOr’の場合、Pu(紫)が正の値。Or(オレンジ)が負の値となる。 By following users and tags, you can catch up information on technical fields that you are interested in as a whole, By "stocking" the articles you like, you can search right away. https://matplotlib.org/tutorials/colors/colormaps.html, 「plt.contourf()」を「cont」という変数に入れ、「plt.colorbar(cont)」で凡例を描画する, 「contourf」でグラフを書く際に、「extend=”both”」と追記することで、範囲外を一番端の色で埋めることができる. # http://www5.plala.or.jp/vaio0630/hp/c_code.htm, https://github.com/matsuken92/Qiita_Contents/blob/master/General/Matplotlib_color_settings.ipynb, http://matplotlib.org/examples/color/colormaps_reference.html, http://stackoverflow.com/questions/24997926/making-a-custom-colormap-using-matplotlib-in-python, http://matplotlib.org/examples/color/named_colors.html, http://www5.plala.or.jp/vaio0630/hp/c_code.htm, you can read useful information later efficiently. 2020.03.08    matplotlibベースであるSeabornやPandasのプロット機能を使っている人にとっても、グラフの細かな調整をする際に役立つはずです。 本記事の大部分はmatplotlib公式チュートリアルのArtist tutorialとUsage Guide(執筆時バージョンは2.1.1)を簡単に日本語でまとめたものです。Artistに関して言及した日本語 … Help us understand the problem. Gallery > Tick locators, 試しに先ほどのax.set_xticksの例でFormatterとLocatorを使ってみます。, ax.set_xticksの例とは違い、描画範囲全体にtickが配置(locate)されています。次はtick labelのフォーマットを変更します。, あまりよい仕上がりではないですが、FormatterとLocatorが担っている役割ははっきりしたと思います。, ちなみに、ax.plotにはマニュアルには明記されていない単位を指定できるオプションxunitsがあります。公式ドキュメントの Gallery > Radian ticks の指示通りにbasic_unitモジュールをimportしてmatplotlib.units.ConversionInterfaceクラスを定義してやると、FormatterやLocatorをわざわざ指定せずに理想に近いradianやdegree単位の軸が書けます。, ようやく一番下の階層に到達しました。Tickは軸上の小さな線(tick)とそこに添えられる文字(tick label)しか持ちません。, Axisのときと同様に、Tickオブジェクトは実際だとXTickとYTickという名前になっています。1stや2nd tickなどはXTickではグラフ下と上、YTickでは左と右のtickのことを指しています。おそらくx軸のtickのラベルをグラフ上部にも表示したい場合などに使うものです。, AxesにもAxisにもTickをいじるためのset_***系のヘルパーメソッドがたくさんあるので、Tickを直接触る必要はほとんどないでしょう。あるいはAxes.tick_paramsでもtickの向きや表示の有無などを一括設定できます。tickの位置やラベルは前述の通りAxisのFormatterとLocatorで設定します。, ここまで把握できれば Tutorials > Customizing matplotlib > A sample matplotlibrc file matplotlib3.0.2のcmapパラメータの一覧です。 cmapは、二次元プロットなどで使われるカラーマップの色を指定するパラメータです。 cmapの設定をするには、 plt.rcParams[&# […] Here we briefly discuss how to choose between the many options. - AxesオブジェクトにはAxisオブジェクトが属している, この階層構造を知っていると前述したシンプルな例で最初にやっていることの意味が理解できます5。, 試しに何もプロットせずにFigureとAxesのみを作って、それぞれの関係を示す属性をprintで表示して見ます。, ここからわかるのは以下の関係です。AxesSubplotはplt.subplotsで作った場合のAxesオブジェクトと思って問題ありません。, 執筆時の最新版2.1.1の Tutorials > Introductory > Usage Guide には、階層構造の代わりにグラフの構成要素を細かく示した"解剖図"6が掲載されています7。これを見ると「この、なに、軸?枠?」の部分はSpinesと呼ばれていることがわかります。, データを示す線や点、x軸やy軸、描画領域を表す枠や文字などグラフに表示される全ての要素はArtistと呼ばれます。Artistはcontainer(容器)とprimitive(原始的なものという意味)の二種類に分類されます。先の階層構造で示したFigure、Axes、Axisはcontainerに、プロットの線(Line2D)や点(PathCollection)あるいは文字(Text)はprimitiveに相当します。解剖図にあるtickやlabelは名前こそ違いますが実体はLine2DとTextオブジェクトです。これらの関係を簡単に図示すると以下のようになります。各primitiveを生成するAxesメソッドの例を右側に示しました。, 前項のサンプルコードの結果を見るとわかりますが、Axisは実際にはXAxisとYAxisという名前です。Axisの下にはさらTickという目盛り関連の線や文字のためのcontainerがあります。containerはその名の通りprimitiveを入れる箱を持っています。このとき、containerの階層構造にあった「一つしか持てない」という制限はなく、いくつでもおなじprimitiveを持つことができます。例えば何もプロットしていないaxでLine2Dオブジェクトを入れる箱ax.linesを見ると空リストが表示されます。ax.plotは他の細々した設定とともにこのリストにLine2Dオブジェクトを追加していきます。, ほかのcontainerでも同じですがFigureに属するArtistはそれぞれに対応する箱に入っていると考えるとよいです。箱は属性(attribute)を呼ぶことで中身を見れます。, fig.axesだけは意味合いが若干異なりますが、属性名が単数形だと一つだけ、複数形だとリストになっていることがわかります。これはこの後の例でも同じです。上の表にわざわざ「Figureに属する」と書いたのには理由があります。グラフに図形やテキストなどのArtistを追加するときに、Figureに追加するかAxesに追加するかによって座標の原点が異なるからです。どちらを使うのが適切かはやりたいことや実装の方法によって変わるでしょう。, ところで、fig.legendsはfig.legendメソッドによって追加された凡例を入れる箱です。「ax.legendがあるじゃん」と思いますよね。凡例を追加する際によく使われるax.legendメソッドは、そのaxに所属するArtistからしか凡例を作ってくれません。一方、fig.legendメソッドは所属する全てのAxesのArtistから凡例をかき集めて一括表示してくれます。例えば左右の軸に異なるスケールのプロットをした時に素直にax.legendを使うと凡例が二つできていしまいます。ちなみにc='C1'についてはこちらを参照してください。, これは多くの場合望ましくはないでしょう。凡例を一つにまとめるには、最後のax.legend()の代わりに、axとax1の凡例のhandlerとlabelのリストを結合してax.legendに渡すという有名な解決法があります。, 実は、ver 2.1からは引数なしのfig.legendメソッドを使ってhandlerやlabelを気にせずもっとシンプルに書けるようになっています8。デフォルトではFigureの座標が使われますが、凡例の配置はAxes座標ベースの方が都合の良い場合が多いです。下の例のようにbbox_transformオプションを使うとaxに対する座標系に変更できます。, グラフの見た目の調整はAxesとその下のAxisとTickが主な舞台です。これらについて例を挙げながら述べます。以下はAxesがArtistを保持する箱です。「Axesに属する」のは自明なので省略しました。, プロットしたり二次元データを描画する際に使うax.plotやax.imshowなどは、これらのcontainerに対応するオブジェクトを追加すると同時にいろいろな処理も一緒にしてくれるヘルパーメソッドと呼ばれてます。主なプロット関連のヘルパーメソッドは以下です。, 以下の例ではax.plotとax.scatterでLine2DオブジェクトとPathCollectionオブジェクトが対応したリストに追加される様子がわかります。, 「プロットで生成されたオブジェクトはリストに追加される」ということを知ると、「あるAxesでプロットしたLine2Dオブジェクトを他のAxesのlines属性に追加すればプロット(線)を使いまわせるのかな?」と思いがちですが、これはArtist tutorialの Axes container の項目でわざわざ明記されている通りやるべきではありません。ax.plotはax.linesにLine2Dオブジェクトを追加する他にもいろいろとやっているからです。試しにやってみてもうまく表示されません。, また、Line2DをAxesに追加する際に必要な設定をいろいろやってくれるAxes.add_lineというメソッドを試してみるとエラーになります。, このエラーメッセージから、おそらく一度どれかのcontainerに格納されたArtistを他のcontainerに使い回すことはできないのだろうことが予想されます。これはFigureとAxesとAxisの階層構造のところで調べた上下関係とも矛盾しませんし、各Artistには所属するcontainerが属性として登録(紐付け)されていることとも合致します。, この辺を全てクリアできるなら使いまわしも可能でしょうが、当初の「リストに追加すればよい?」という思いつきの手順からは相当逸脱するので避けるのが妥当でしょう。, AxisはAxesほどいろんなものを描画する必要がないので、軸のラベルの文字とtick関連の情報程度しか持っていません。しかし、デフォルトのままでは微調整したくなる見た目であることが多いわりに、細かい設定の仕方がわかりにくいグラフのパーツの代表格とも言ってよいでしょう。この説明を読むといろいろなレシピの理解がいくらか深まると思います。, 公式チュートリアルにはFigureやAxesにあったような表がないので、同様のものを自分で作って見ました。, Axesの例の最後でax.set_xlabelとax.set_ylabelで軸のラベルを設定しました。これはaxをいじっているように見えますが、実はaxに属するXAxisのlabel属性を変更しています。先ほどのplot2回とscatter1回を描画した例のXAxisで上の表の内容を確認します。, Axesにはその下のAxisやTickを設定するためのax.set_***系のヘルパーメソッドがたくさんあります。ただ、どれも一度設定するとその後の変更に自動的に対応してくれない静的な変更になります。xlabelの場合は特に問題ありませんが、例えば、以下のようにax.set_xticksで一本目のプロットのx範囲に合わせてtickの位置を変えたあとに、その範囲を超えるプロットを追加してもxticksはいい感じに調整されません。, AxisはArtistの他にFormatterとLocatorと呼ばれる軸の見た目の調整には欠かせない地味に重要なものが設定されています。これらはプロットするデータに応じて軸の範囲をスケールする際にtickの位置やtickラベルのフォーマットを自動的に調整する役割を担っています9。ax.set_xticksを使った上の例でXAxisとYAxisのFormatterとLocatorを確認してみます。, FormatterはxとyどちらもデフォルトのScalarFormatterです。一方Locatorはax.set_xticksでticksの場所を指定したxではFixedLocatorに、何もしていないyではデフォルトのAutoLocatorになっています。FormatterやLocatorの種類とそれぞれの効果については以下の公式ドキュメントを見るとなんとなくわかると思います。