Matplotlib:ポイントの代わりに画像をプロットするには?


15

私は画像のリストをPython/Matplotlibに読み込み、グラフの中に他のマーカー(点など)の代わりにこの画像をプロットしたいと考えています。私はimshowで試しましたが、イメージを別の位置にシフトして適切に拡大することができないため、成功しませんでした。おそらく誰かが良いアイデアを持っています:) It should look somehow like this! (Without the Spongebob, but with very serious data of course!)

  0

私はmatplotlibのは、おそらくこのための適切なソリューションではないと思います。これは、既存のものを操作するのではなく、画像にデータをプロットするためです。画像処理ライブラリを使用するか、手動で行うことができる場合は、Photoshopやペイントのような画像エディタを使用してください。 21 3月. 142014-03-21 18:09:39

+2

これを試してください:http://matplotlib.org/examples/pylab_examples/demo_annotation_box.html 21 3月. 142014-03-21 18:15:23

22

これを行うには2通りの方法があります。

  1. プロットあなたがでイメージをしたい位置に基づいてextent kwargセットでimshowを使用してイメージ。
  2. AnnotationBboxの中にOffsetImageを使用してください。

第1の方法はわかりやすいですが、第2の方法は大きな利点があります。注釈ボックスのアプローチでは、画像を拡大しながら一定の大きさに保つことができます。imshowを使用すると、画像のサイズがプロットのデータ座標に結び付けられます。ここで

は、第二の選択肢の例です:

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib.offsetbox import OffsetImage, AnnotationBbox 
from matplotlib.cbook import get_sample_data 

def main(): 
    x = np.linspace(0, 10, 20) 
    y = np.cos(x) 
    image_path = get_sample_data('ada.png') 
    fig, ax = plt.subplots() 
    imscatter(x, y, image_path, zoom=0.1, ax=ax) 
    ax.plot(x, y) 
    plt.show() 

def imscatter(x, y, image, ax=None, zoom=1): 
    if ax is None: 
     ax = plt.gca() 
    try: 
     image = plt.imread(image) 
    except TypeError: 
     # Likely already an array... 
     pass 
    im = OffsetImage(image, zoom=zoom) 
    x, y = np.atleast_1d(x, y) 
    artists = [] 
    for x0, y0 in zip(x, y): 
     ab = AnnotationBbox(im, (x0, y0), xycoords='data', frameon=False) 
     artists.append(ax.add_artist(ab)) 
    ax.update_datalim(np.column_stack([x, y])) 
    ax.autoscale() 
    return artists 

main() 

enter image description here

+1

それはAda Lovelaceですか?驚くばかり。 06 1月. 152015-01-06 18:23:41

  0

私はあなたの方法を試して、それは私のためには動作しません。私のフォローアップの質問を見ることができると思いますか? https://stackoverflow.com/questions/48896088/ここにあります。 21 2月. 182018-02-21 17:16:02