6

私の質問はこの質問に似ています。緯度と経度をプロットしています。変数の値が 0 の場合、その緯度/経度の値を別の色でマークしたいと考えています。それ、どうやったら出来るの?

これはこれまでの私の試みです。ここで、x は緯度、y は経度です。timeDiff は float 値を保持するリストであり、値が 0.0 の場合、その色を異なるものにしたいと考えています。

matplotlib が float を使用できないと訴えたので、最初に値を int に変換しました。

timeDiffInt=[int(i) for i in timeDiff]

次に、リスト内包表記を使用しました。

plt.scatter(x,y,c=[timeDiffInt[a] for a in timeDiffInt],marker='<')

しかし、私はこのエラーが発生します:

IndexError: list index out of range

そこで、x、y、timeDiffInt の長さを調べました。それらはすべて同じです。誰かがこれで私を助けてくれますか? ありがとう。

4

1 に答える 1

8

timeDiffIntそのリストのアイテムでリストにインデックスを付けています。それらがリストの長さよりも大きい整数である場合、このエラーが表示されます。

散布図に 2 つの色を含めますか? 0 の値の 1 つの色と他の値の別の色?

Numpy を使用して、リストを 0 と 1 に変更できます。

timeDiffInt = np.where(np.array(timeDiffInt) == 0, 0, 1)

Scatter は、両方の値に異なる色を使用します。

fig, ax = plt.subplots(figsize=(5,5))

ax.scatter(x,y,c=timeDiffInt, s=150, marker='<', edgecolor='none')

ここに画像の説明を入力

編集:

自分でカラーマップを作成することで、特定の値の色を作成できます。

fig, ax = plt.subplots(figsize=(5,5))

colors = ['red', 'blue']
levels = [0, 1]

cmap, norm = mpl.colors.from_levels_and_colors(levels=levels, colors=colors, extend='max')

ax.scatter(x,y,c=timeDiffInt, s=150, marker='<', edgecolor='none', cmap=cmap, norm=norm)
于 2013-10-11T06:46:22.747 に答える