2016-10-25 7 views
2

私は色とラベルの両方で点をプロットしようとしています。これは古典的な問題ではありません。実際、Pythonユーザーは通常、「ラベル」をカテゴリとして設定します。この場合、色はフィーチャを表し、ラベルはポイント自体の識別子です。 おもちゃの例を次に示します。pylab:色とラベルの点をプロットする(IDではなく、カテゴリ)

x = [-0.01611772, 1.51755901, -0.64869352, -1.80850313, -0.11505037] 
y = [ 0.04845168, -0.45576903, 0.62703651, -0.24415787, -0.41307092] 

colors = ['b', 'g', 'r', 'b', 'r'] 
labels = ['Gioele', 'Felix', 'Elpi', 'Roro', 'Cacara'] 

私は、関数の散乱を利用したいと思います。 "クイック" ドキュメント以下:

import pylab 
pylab.scatter(x, y, c=colors, data=labels) 
pylab.show() 

が、それはdata=labels部分を無視しているようだ:だから

def scatter(x, y, s=20, c=None, marker='o', cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, edgecolors=None, hold=None, data=None, **kwargs) Inferred type: (x: Any, y: Any, s: int, c: Any, marker: unicode, cmap: Any, norm: Any, vmin: Any, vmax: Any, alpha: Any, linewidths: Any, verts: Any, edgecolors: Any, hold: Any, data: Any, kwargs: dict) -> Any 

、私の試みでした。

さらに、ラベルをプロットできるとします。「スマート」な方法でプロットする方法があります。つまり、ラベルが互いに非表示にならないようにする方法はありますか?私はR関数ggrepelに似たものが必要です。

答えて

3

ここではplt.annotateを使用していると思います。あなたの例を取る:

import matplotlib.pyplot as plt 

x = [-0.01611772, 1.51755901, -0.64869352, -1.80850313, -0.11505037] 
y = [ 0.04845168, -0.45576903, 0.62703651, -0.24415787, -0.41307092] 
colors = ['b', 'g', 'r', 'b', 'r'] 
labels = ['Gioele', 'Felix', 'Elpi', 'Roro', 'Cacara'] 

plt.scatter(x,y,c=colors) 
for label,xi,yi in zip(labels,x,y): 
    plt.annotate(label,xy=(xi,yi),textcoords='offset points', 
    ha='left',va='bottom') 

これは、次のような出力が得られます。

enter image description here

編集を:私はちょうどあなたが、あまりにも、ラベルの重複について尋ねたことを発見。 This questionは良い解決策を持っているようです。明らかに、on githubというコードがあり、ggrepelをエミュレートするように設計されています。

+0

"UserWarning:あなたは' textcoords' kwargを使用しましたが、 'xytext' kwargは使用しませんでした。これは驚くべき結果につながります。私はちっちゃなことを避けることができると思ったが、少なくとも私には解決策がある。ありがとう! :) –

+0

重複しているラベルを防ぐことについていくつかのものを含めるように編集しました、申し訳ありません、私は最初にそれを見つけませんでした。面白い、私はあなたが参照している 'UserWarning'を取得していない。上記のコードを実行するだけで警告が表示されましたか? –

関連する問題