matplotlib.pyplot
を使用してデータを補間し、等高線を作成しています。 this答え/例(等高線内でエリアを計算する方法について)、私は等高線の頂点を得ることができます。 2つの指定された輪郭の間のポイント数をカウントするために、その情報、つまり線の頂点を使用する方法はありますか?これらの点は、輪郭の導出に使用されるデータとは異なります。Pythonで2等高線間のポイント数を計算するには
0
A
答えて
1
通常、プロットをリバースエンジニアリングしてデータを取得する必要はありません。その代わりに、後で輪郭をプロットするために使用される配列を補間して、ある点の領域にある点を見つけることができます。
以下は、レベルが-0.8
と-0.4
の間のすべてのポイントを見つけて印刷し、プロット上に赤で表示します。
import numpy as np; np.random.seed(1)
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt
from scipy.interpolate import Rbf
X, Y = np.meshgrid(np.arange(-3.0, 3.0, 0.1), np.arange(-2.4, 1.0, 0.1))
Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
Z2 = mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
Z = 10.0 * (Z2 - Z1)
points = np.random.randn(15,2)/1.2
levels = [-1.2, -0.8,-0.4,-0.2]
# interpolate points
f = Rbf(X.flatten(), Y.flatten(), Z.flatten())
zi = f(points[:,0], points[:,1])
# add interpolated points to array with columns x,y,z
points3d = np.zeros((points.shape[0],3))
points3d[:,:2] = points
points3d[:,2] = zi
# masking condition for points between levels
filt = (zi>levels[1]) & (zi <levels[2])
# print points between the second and third level
print(points3d[filt,:])
### plotting
fig, ax = plt.subplots()
CS = ax.contour(X, Y, Z, levels=levels)
ax.clabel(CS, inline=1, fontsize=10)
#plot points between the second and third level in red:
ax.scatter(points[:,0], points[:,1], c=filt.astype(float), cmap="bwr")
plt.show()
1
どの点をチェックしたいのか分かりませんが、線の頂点(2点)があり、3点が2点の間にあるかどうかを確認したい場合は、単純な(効率的ではない)手法を用いて、3つの三角形によって形成される三角形の面積を計算する。領域が0の場合、点は同じ行になります。また、ポイント間の距離を計算し、ポイントがライン上または外側(延長線上)にあるかどうかを確認することもできます。
希望すると便利です。
+0
はい、私は、「第三のポイントは、」私は数える/チェックする程度20-40K点のセットを持っている以外、両者の間に落ちるかどうかをチェック話しています。あなたのコメントはそれについてもう少し考えるのに役立ちますが、私はライン(x、y頂点の1つだけでなく)と多くのポイントについてこれを行う方法を概念化するのが難しいです。ありがとう! –
関連する問題
- 1. 地図:2ポイント間の距離を計算するのは高度ですか?
- 2. どのようにPythonの2つのポイント間の線の座標を計算するには?
- 3. 等高線マップ軸のpython値を減算する
- 4. Pythonでイメージ内の2つの線の間の角度を計算する
- 5. 等高線と等高線のスケールを調整する
- 6. 2本の線の間のサーフェスを計算する
- 7. 2つの曲線の間の面積を計算する
- 8. Python OpenCVで等高線の輪郭を削除するには? Pythonで
- 9. 2本の線図間の類似度を計算する
- 10. カラーマップ上の等高線:非連続(Python)
- 11. 計算を高速化するためにGPSポイントを結合
- 12. Googleマップの2つのポイント間の距離を計算する方法は?
- 13. 等高線セグメンテーション
- 14. Opencv等高線
- 15. Pythonの - 時間計算量O(N ** 2)
- 16. 線分上の等距離点の最大数の計算
- 17. 疎なデータを使ってPythonで2次元等高線プロットをプロットする
- 18. 計算フュージョンテーブルのポイント間の距離
- 19. セシウムを使用して2つの緯度/経度/高度ポイント間の仰角を計算する
- 20. 3Dヒストグラムと等高線プロットPython
- 21. 等高線ラベルに数学記号を追加するには
- 22. Python OpenCV2:等高線領域による等高線と木の階層の整列
- 23. Pythonコードで2つのポイント間の距離を計算するための並列化の最速方法
- 24. Pythonでの間隔計算
- 25. 等高線タイルベースの地図で複数の高さをレンダリング
- 26. ビン地図の2つのポイント間の距離を計算する
- 27. 2つのGPSポイント間の(x、y)の距離を計算する
- 28. OpenCV:ネストされた等高線の数
- 29. ブートストラップ4等高線
- 30. POVRAY「等高線」テクスチャ
お返事ありがとうございます。私はそれが私の目標をより明確に表現する助けになると思います:私はプロットをリバースエンジニアリングする必要はありません。代わりに、私は、X、Y、Zが分かっている配列/データセットから得られた2つの等高線を使いたいと思います。私のZ値は時間のかかるモデルの実行から来ているので、私が知りたいのは、(正確な位置ではなく)輪郭のどの辺にあるのか知っていれば、新しいアレイのモデルを再度実行することを避けることができます代わりに既存の輪郭の頂点を使用します。それはより良い意味ですか? –
確かに、上記はまったく同じことではありませんか? – ImportanceOfBeingErnest
マスクを使用してそれらをフィルタリングできるようにするには、例のZの値を知る必要があるようです。私は私の配列の1つのみに対してZを持っていますが、残っているものではありません。ここに明白なものがないと私は許してくれますか? –