2012-03-29 13 views
1

フローネットの2D等高線プロットを開始しようとしていますが、最初のグリッドが正しく表示されるのに問題があります。Pythonでグリッドをプロットする

与えられた範囲のすべての点が現れるようにグリッドをプロットする関数を書くにはどうすればいいですか?

私はこれを行うことにより、4列との点の3行に対してプロットしてみました:

r = 3 

c = 4 

x = [i for i in range(c)] 

y = [i for i in range(r)] 

plot(x,y,'ro') 

grid() 

show() 

と、このエラーが発生します。

'ValueError: x and y must have same first dimension' 

だから私は4x4のグリッド上でそれをテストしようと、これを得ました(0,0)、(1,1)、(2,2)、(3,3)

しかし、私はまたポイントを望む0,0)、(1,0)、(2,0)、(3,0)、(1,0)、(1,1)...(3,2)、(3,3) 、私として後で私のフローネットの流れの方向を示すこの点からベクトルをプロットする必要があります。

申し訳ありませんが、私の用語はあまり良くありません。誰もがこれを行う方法と正方形ではないグリッドのためにそれを動作させる方法を知っていますか?

+0

x = [iを範囲(c)に入れる] 'を書く必要はありません。' x = range(c) 'と書くことができます。 – YXD

+0

ありがとうございました。私はあらかじめ多くの作業をしていましたが、私はc = 4.0とr = 3.0だったと思いますし、range()関数は浮動小数点では機能しませんでした。フロートのためにこの問題を解決する方法を誰かが知っていれば、それも素晴らしいでしょう! – bang

+0

XベクトルがX軸の値で、YベクトルがY軸の値である場合、プロットは線をプロットしようとします。 2つのベクトルの大きさは明らかに一致しなければならない。そしておそらくそれはあなたのコードの出力が望ましいものではないでしょう。 – Fenikso

答えて

2
r = 3 
c = 4 

x = [i % c for i in range(r*c)] 
y = [i/c for i in range(r*c)] 

print x 
print y 

与える:

[0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3] 
[0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2] 

をあなたはそれが望ましい結果を生成しなかったようなグラフを描画するために使用する場合。

2

最初の2つの引数は、xとyのコンポーネントを指定します。したがって、ポイント数は一致しなければなりません。あなたが所望の点を生成するためにitertools.productを使用することができ

from itertools import product 
import matplotlib.pyplot as plt 

points = np.array(list(product(range(3),range(4)))) 

plt.plot(points[:,0],points[:,1],'ro') 
plt.show() 
6
  • :私は何をしたいことのようなものだと思います。
  • plt.scatterを使用して点をプロットする
  • plt.quiverを使用してベクトルフィールドをプロットします。 (these SO answersから取られた関連するコード)

import numpy as np 
import matplotlib.pyplot as plt 
import itertools 
r = 3 
c = 4 
x = np.linspace(0, c, c+1) 
y = np.linspace(0, r, r+1) 

pts = itertools.product(x, y) 
plt.scatter(*zip(*pts), marker='o', s=30, color='red') 

X, Y = np.meshgrid(x, y) 
deg = np.arctan(Y**3 - 3*Y-X) 
QP = plt.quiver(X, Y, np.cos(deg), np.sin(deg)) 
plt.grid() 
plt.show() 

enter image description here

関連する問題