2017-04-03 14 views
3

matplotlib散布図のx、y座標から色を取得する方法(または色がある場合は単純なyes/noの回答)がありますか?散布図の点の色を返す方法

基本的に私は座標(x、y)を与え、私のプロットのその位置に色のついた円があるかどうかを知りたいと思います。

ご協力いただければ幸いです。

答えて

0

get_color()を使用できます。

a = plt.plot(x,c, color="blue", linewidth=2.0, linestyle="-") 
b = plt.plot(x,s, color="red", linewidth=2.0, linestyle="-") 

print a[0].get_color() 
print b[0].get_color() 

>>blue 
>>red 

それとも、で動作するように変数に戻った色を割り当てることができます:位置(xi,yi)での散乱サークルがあるかどうかを判断するには

color_a = a[0].get_color() 

if color_a == 'blue': 
    ..do something 
+0

私はこれが質問の意味であるとは思わない。 – ImportanceOfBeingErnest

+0

さて、そうだとわかるように削除します。 – Jon

1

単純ではありません。問題は、(xi,yi)がデータ座標で与えられ、円は表示座標で円として描画されることです。これは、x軸とy軸の軸スケーリングが異なる場合、表示座標の円がデータ座標の楕円となる可能性があることを意味します。

Matplotlibには、表示座標で与えられた点がアーティストの範囲内にあるかどうかを判断するための機能がいくつか含まれています。私はこれを使うために、まずキャンバスを描きます。その後、(xi,yi)の位置でマウスイベントをシミュレートし、スキャッタからどのアーティストにヒットしたかを検出することができます。その後、それぞれの色を検索することができます。

import numpy as np; np.random.seed(0) 
import matplotlib.pyplot as plt 
import matplotlib.backend_bases 

x = np.random.rayleigh(size=10) 
y = np.random.normal(size=10) 
c = np.random.rand(10) 

fig, ax = plt.subplots() 
sc = ax.scatter(x,y,c=c, s=49, picker=True) 

fig.canvas.draw() 

def color_at_pos(xi,yi): 
    xi, yi = ax.transData.transform((xi,yi)) 
    me = matplotlib.backend_bases.LocationEvent("no", fig.canvas, xi, yi) 
    cont, ind = sc.contains(me) 
    return sc.cmap(sc.norm(sc.get_array()[ind["ind"]])) 

col = color_at_pos(1.25931,0.145889) 
print col 
col = color_at_pos(0.7,0.7) 
print col 

plt.show() 

ここで最初の点(1.25931,0.145889)は二つの円内actuallので、第二の点は、任意の円形ではなく、空の配列が印刷されている間2つの色が、印刷されています。

+0

ありがとうございました。これが私の必要なものです。 – Ilze

関連する問題