2011-11-12 10 views
1

私はmatplotlib.pyplot.scatterを使って散布図を描画しています。しかし、間違ったことが現れ、私は解決策を見つけることができません。散布図を描画する際の問題

# xActA, yActA, xActQ, yActQ are all lists with same dimensions. 
ax1 = scatter(xActA, yActA, color = 'blue',s = 20, label = 'Answers', linestyle = 'o') 
ax2 = scatter(xActQ, yActQ, color = 'black', s = 20, label = 'Questions', linestyle = 'o') 
ax1.set_label('Answers') 
ax2.set_label('Questions') 
xscale('log') 
yscale('log') 
title('User activity') 
xlabel('Number of posts') 
ylabel('Number of users') 
legend() 
f1.show() 
f1.savefig('figure7_test.png') 

そしてそこにはエラーはありませんが、プロットは任意のドットが含まれていません。ここでは、この散布図を描画するためのコードです。ここで

enter image description here

データです:

xActA = [0, 1, 2, 3, 4, 5, 6, 129, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 
      18, 147, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 
      35, 36, 39, 40, 7, 45, 46, 49, 50, 52, 53, 183, 59, 63, 65, 69, 
      70, 72, 73, 55, 77, 78, 84, 85, 43, 215, 88, 100, 94, 131, 167, 
      19, 375, 122, 125, 149] 

    len(xActA) = 70 

    yActA = [1212, 822, 194, 94, 61, 44, 24, 1, 26, 20, 11, 16, 10, 8, 5, 8, 
      5, 5, 3, 1, 4, 4, 5, 3, 2, 3, 4, 3, 1, 2, 2, 3, 2, 1, 2, 2, 2, 2, 
      31, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
      1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1] 

    len(yActA) = 70 

    xActQ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 29, 36, 40, 45, 48, 50, 55, 67, 124] 
    len(xActQ) = 34 

    yActQ [204, 242, 150, 50, 49, 27, 5, 9, 4, 2, 6, 3, 2, 8, 4, 5, 1, 3, 3, 1, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
    len(yActQ) = 24 

そして、2番目のエラーは、別のデータセットを使用することによって発生します。私はデータをチェックしています...前の不明な記述には申し訳ありません。

+0

第二の問題( 'sequence'で配列要素を設定する際に生じる1つ)のためにあなたが編集した場合、それが役立ちます「xRa」と「yRa」の内容(または内容の一部)を示す質問。 –

+1

なぜこれに 'scatter'を使用していますか?スキャッタは、3次元または4次元のデータを2次元で(色および/またはサイズを変えて)プロットすることを意図しています。あなたはちょうど 'プロット'が必要です。それ以外にも、画像に表示される図形を生成するためのコードを余計に残しているように見えます。あなたが使っているコードスニペット(@Davidが既に指摘しているように 'linestyle = 'o'部分以外)。問題の原因となっているコードの部分を除外します。 –

+0

ありがとうございます。実際には、私が見たプロットを実現しています、そして、私はちょうど散乱を使用していると推測しています。そして、そうです、あなたが正しいです、プロットは、凡例が散乱を使用する3つの代わりに2つの点で現れるので、私が試した後に正確に同じことを示すことができます。しかし、私は散漫プロットに何もない理由はまだ不思議です... – AnneS

答えて

2

データをもっと見ると、ほとんどのデータポイントがプロット領域外にあることがわかります(x = [1e2:1e3]; y = [1e2:1e4])。対数尺度の代わりに線形尺度を使用すると、散乱点がいくつか見えますが、非常に読みやすい方法ではありません。しかし、あなたがスケールを 'symlog'に変更して、 'xlim'と 'ylim'を使ってxとyの制限を設定すると、完了です。もちろん、 'scatter'を実行するときにマーカーが 'o'に設定されていることを確認する必要があります。完全なコードを確認してください。

from pylab import * 

# The data 
xActA = array([0, 1, 2, 3, 4, 5, 6, 129, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 
    18, 147, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 35, 36, 
    39, 40, 7, 45, 46, 49, 50, 52, 53, 183, 59, 63, 65, 69, 70, 72, 73, 55, 77, 
    78, 84, 85, 43, 215, 88, 100, 94, 131, 167, 19, 375, 122, 125, 149]) 
yActA = array([1212, 822, 194, 94, 61, 44, 24, 1, 26, 20, 11, 16, 10, 8, 5, 8, 
    5, 5, 3, 1, 4, 4, 5, 3, 2, 3, 4, 3, 1, 2, 2, 3, 2, 1, 2, 2, 2, 2, 31, 2, 1, 
    1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 
    1, 1, 1, 1]) 

xActQ = array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 
    19, 20, 21, 22, 23, 24, 25, 29, 36, 40, 45, 48, 50, 55, 67, 124]) 
yActQ = array([204, 242, 150, 50, 49, 27, 5, 9, 4, 2, 6, 3, 2, 8, 4, 5, 1, 3, 
    3, 1, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]) 

# The plots 
close('all') 
f1 = figure() 
ax1 = scatter(xActA, yActA, color='blue', s=20, label='Answers', marker='o') 
ax2 = scatter(xActQ, yActQ, color='black', s=20, label='Questions', marker='o') 
xscale('symlog') 
yscale('symlog') 
xlim([0, 1e3]) 
ylim([0, 1.5e3]) 
title('User activity') 
xlabel('Number of posts') 
ylabel('Number of users') 
legend() 
f1.show() 
f1.savefig('figure7_test.png') 

、コードの行のこれらのカップルはあなたにこのすっきりを与える:Results

3

問題はlinestyle='o'です。 'o'ディレクティブはlinestyleではなくであるため、コードの最初の2行でlinestyleをに置き換えてください。

scatterhereのマーカーの完全な一覧を見ることができます。

+0

あなたの答えをありがとう。私は試してみましたが、もう一度2番目の間違いに変わります。私はxRaとyRaの内容を投稿しました。間違いを見つけるのを助けてくれますか? :) – AnneS

+1

@AnneS質問に追加したデータを使用して、質問の2番目の部分の例外を再現することができません。あなたの質問で 'scatter 'の呼び出しは' xRa'と 'yRa'を渡しますが、' xActA'と 'yActA'を含むように編集しました。それらの2つの変数のセットは同じですか? –

+0

申し訳ありませんが、私は別の名前を使用します。はい、これらの2つの変数のセットは同じです。 – AnneS