物理の駅 Physics station by 現役研究者

テクノロジーは共有されてこそ栄える

matplotlib

Python+matplotlib: ログスケールでの目盛り、サブ目盛りを設定する

十分な広さのfigsizeにグラフを書くと、軸はそれなりに表示される import matplotlib.pyplot as plt fig, axes = plt.subplots(ncols=2, nrows=2) for ax in axes.flat: ax.plot([1,2], [0.00001,1]) ax.set_yscale("log") plt.tight_layout() plt.show() グ…

Python+matplotlib で点線や破線の間隔を変える

直線で描く場合。 import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.plot([0,1],[0,1]) plt.show() dashes 変数を使うと、点線の色あり、色なしの部分の幅を指定できる。以下はその例。 import matplotlib.pyplot as plt fig, ax = plt.subplot…

Python matplotlib でマウスクリック位置を取得しグラフを再描画する

下記のコードではJupyter Labを使っています。 matplotlibの他に、ipymplが必要なので、pip install ipymplでインストールしてください。 コードを完全に理解していないため、解説は他の記事を参照してください。 マウスでクリックした時の、回数、座標、そ…

Python matplotlib で ROOTの推奨カラーマップ kBird を使う

root.cern.ch Better palettes like kBird are recommended. と書かれているので使ってみよう。 import matplotlib red_bird = [ 0.2082, 0.0592, 0.0780, 0.0232, 0.1802, 0.5301, 0.8186, 0.9956, 0.9764] green_bird = [ 0.1664, 0.3599, 0.5041, 0.6419,…

Python+matplotlibでA4の方眼紙風PDFを作る

グリッド間隔、線の種類、線の幅、線の色、用紙サイズは自由に設定できるようにした。 要点は次の3つ plt.subplots_adjust()で枠線の外側をなくしてfigureを紙面全体にする plt.gca().axis("off") で枠線、目盛り、目盛りラベルを消す plt.plot(transform=pl…

Python+matplotlib legend(凡例)の操作: 記号作成、複数の記号を一つのラベルで表示など

matplotlib公式のlegendのチュートリアルの一部をこの記事で紹介する。 matplotlib.org matplotlibにおける凡例はplt.legend() とする。 label で指定したグラフの凡例が、グラフの隙間に自動的に描画される。 import numpy as np import scipy import matpl…

Python+matplotlib splines(枠線)、ticks(目盛り)、ticks label (目盛りラベル)を制御する

普通に描画する fig, ax = plt.subplots() ax.plot([0,1],[0,1]) plt.show() 軸を全て消す。 fig, ax = plt.subplots() ax.plot([0,1],[0,1]) ax.axis("off") plt.show() subplotsを使わない場合はaxのかわりにplt.gca()とする。 plt.plot([0,1],[0,1]) plt.…

Python+matplotlib ヒストグラムのbinを直接操作してplt.hist 以外で描写

ヒストグラムのビン(bin)の値を直接操作した後で、ヒストグラムっぽいグラフを作りたいことがあるだろう。 以下では、plt.hist を使った場合と、np.histgramで計算させた、binの位置 X とCounts Y を使って plt.hist 以外で描画する方法を紹介する。 データ…

Python+matplotlibで縁取り文字(白抜き文字/黒抜き文字)や太字を描く

matplotlib.patheffectsを使いこなすと良い。 黒抜き文字の例 import matplotlib.patheffects as patheffects import matplotlib.pyplot as plt plt.plot([0,1],[0,1],lw=50) plt.text(0.5,0.5,"testテスト",ha="center",va="center",color="black",fontsize…

Python + matplotlib の二次元ヒストグラムでレゴブロックっぽい3D図を作る

ROOTのTH2DやTH2Fなどのクラスでは、2次元ヒストグラムを、legoっぽく図示できる。 ご存知の通り、Python + matplotlib の hist2dには、このような描画をするコマンドはない(はずである)。 というわけで、作ってみた。3次元バーを描画する関数であるbar3dを…

Python+matplotlib 二次元平面上の点列から、閉じた多角形内の点列を選ぶ

Pythonで、二次元平面上の点列から、閉じた多角形の中にある点列を選ぶ方法。matplotlib.pathモジュールの関数 contains_points を使うと良いらしい。 コードの大半はChatGPTに書かせた。ありがとう! import numpy as np import matplotlib.path as mpath im…

Python+matplotlib で 2つの軸を左右・両方左に描画する

物理では、例えば、β と Energy [MeV/u] のように、同じ量だが異なる表記をすることがある。 これを1つのグラフに同時に表示したいとき、以下のようにする。 import numpy as np import matplotlib.pyplot as plt Zs = np.arange(1, 100, 1) data1 = 0.5+Zs*…

Python+matplotlibの二次元ヒストグラムhist2dでエントリー数が0のビンの色を白くする方法

カラーバーを線形スケールで描画する場合、countsが0のbinを白くする方法は3通りあります。 np.histogram2d でhistデータを作成し plt.pcolormesh で描画する方法 下限値を白にしたカラーマップを使って plt.hist2d で描画する方法 端だけに白にしたカラーマ…

Python+matplotlibで長方形 Rectangle を描画する

長方形を描画 matplotlib.patches.Rectangle サンプルコード import matplotlib.pyplot as plt x,y,width,height = 5,10,20,10 rect = plt.Rectangle((x,y), width, height, edgecolor="black", facecolor="tab:orange") plt.gca().add_patch(rect) plt.xlim…

Python+matplotlib の plt.quiver で矢印を描画する

矢印を描画 matplotlib.pyplot.quiver matplotlib.pyplot.arrowではなくmatplotlib.pyplot.quiverを使う。 矢印の始点(px, py)、矢印のベクトル(vx, vy)をquiverに与えればよいが、科学目的の場合デフォルトの引数だとやや問題が起きがちなので一つ一つ説明…

Python+matplotlibの基本設定とsubplotsのサイズや隙間を調整する方法

rcParamsの使い方 デフォルトのfigureのサイズを指定する アスペクト比を設定 上下左右の隙間を設定する figsizeに合わせて上下左右とsubplots間の隙間を自動調整 さらに細かくレイアウトを調整 subplotsに共通の軸ラベルを付ける 軸設定 (transform) rcPara…

Python+matplotlibのsubplotsで共通のカラーバーを表示する

stackoverflow のコードがシンプルで良いだろう。 stackoverflow.com import matplotlib.pyplot as plt import numpy as np fig, axes = plt.subplots(nrows=2, ncols=1, sharex=True) for ax in axes: mesh = ax.pcolormesh(np.random.randn(30, 30), vmin=…

Python+matplotlibで複数ページのPDFファイルに出力する

import matplotlib.pyplot as plt from matplotlib.backends.backend_pdf import PdfPages pdf_path = "test.pdf" pdf = PdfPages(pdf_path) #グラフ生成 fig, ax = plt.subplots() pdf.savefig() #グラフ生成 fig, ax = plt.subplots() pdf.savefig() pdf.c…

Python+matplotlibで2次元ヒストグラム(hist2d)のビンの値を直接操作する

pythonのmatplotlibで2次元ヒストグラム(plt.hist2d)のビンの値 (bin contents)を直接操作する方法はない。なので、 colormesh を使って描画しよう。 import numpy as np import matplotlib.pyplot as plt from itertools import product Z, X, Y = np.histo…