Python
 Computer >> コンピューター >  >> プログラミング >> Python

Matplotlibで生成した散布図のピクセル座標を取得する方法

Matplotlibで作成した散布図(点プロット)のピクセル座標を取得したい場合、ax.transData.transform() を使ってデータ座標をディスプレイ(画面)座標に変換することで実現できます。以下に具体的な手順とサンプルコードを紹介します。

取得までの手順

  • 図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。
  • サンプルデータの個数を格納する変数 n を初期化します。
  • Figure(図)とサブプロットを作成します。
  • 散布図(点プロット)を作成します。
  • get_data() メソッドを使って、x と y のデータポイントを取得します。
  • ax.transData.transform() により、データ座標をピクセル座標へ変換します。
  • Figure の幅と高さをピクセル単位で取得します。
  • y 座標を画像形式(左上が原点)に合わせて反転させます。
  • x と y のピクセル値を出力し、show() メソッドで図を表示します。

サンプルコード

import numpy as np
import matplotlib.pyplot as plt

plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True

n = 10
fig, ax = plt.subplots()

points, = ax.plot(np.random.random(n), np.random.random(n), 'r*')
x, y = points.get_data()

# データ座標をピクセル(ディスプレイ)座標へ変換
pixels = ax.transData.transform(np.vstack([x, y]).T)
x, y = pixels.T

# Figureの幅と高さを取得し、y軸の向きを反転
width, height = fig.canvas.get_width_height()
y = height - y

print("The pixel coordinates are: ")
for xp, yp in zip(x, y):
   print('{x:0.2f}\t{y:0.2f}'.format(x=xp, y=yp))

plt.show()

実行結果

上記のコードを実行すると、ランダムな点を赤い星マークで描画した散布図が表示されます。

同時に、コンソールには各データポイントのピクセル座標が出力されます。

The pixel coordinates are:
564.93   161.83
446.27   112.60
153.39   247.65
236.90   258.34
519.10   301.04
237.66   118.16
149.71   303.29
386.74   105.81
172.93   121.81
110.94   116.20

ポイント解説

ax.transData.transform() は、データ座標系からディスプレイ座標系への変換を行うメソッドです。Matplotlibのディスプレイ座標は左下が原点となる一方、一般的な画像座標は左上が原点のため、y = height - y としてy座標を反転させています。この処理により、画像処理ライブラリなどで扱いやすい形式のピクセル座標が得られます。なお、乱数を使用しているため、実行ごとに出力される座標値は異なります。

  1. 2022年版|Robloxで使えるVPNの入手・設定方法を徹底解説

    Robloxが禁止されている国にいる場合でも、プレイを妨げるネットワーク環境にいる場合でも、高品質なRoblox対応VPNを活用すれば問題を解決できます。まずVPNサービスに登録し、ソフトをダウンロードしてPCにインストールします。次に、Robloxが利用可能な国のサーバーを選択しましょう。職場や学校のネットワークでRobloxのロックを解除したい場合は、自分の居住国のサーバーを選ぶのがポイントです。あとはRobloxを起動して、ゲームを思い切り楽しむだけです。 2022年にRoblox向けVPNを手に入れる3つの方法 1. VPN(仮想プライベートネットワーク) 言うまでもなく、Roblo

  2. Apple TV+を無料で視聴する方法まとめ|お得な無料トライアル徹底解説

    Apple TV+は、ストリーミングサービス業界におけるダークホース的な存在です。「Ted Lasso」「ザ・モーニングショー」「Severance」など、批評家から絶賛される話題作を多数ラインナップしています。同サービスの月額料金は、先日の値上げにより4.99ドルから6.99ドル(英国では6.99ポンド)へと引き上げられました。物価高騰が続く昨今、他のプラットフォームも相次いで値上げしており、新たなサブスクリプション料金を払うのは気が重いという方も多いでしょう。しかし、ご安心ください。Apple TV+には、ユーザーが活用できる無料トライアルが数多く用意されています。1円も支払わずに視聴した