11

自動スケーリングされた pyplot で生成されたグラフィックに円をプロットしたいと思います。私が走るとき

ax.get_aspect()

楕円の軸を操作できる値を期待すると、pyplot は次のように返します。

auto

これはあまり役に立ちません。軸が等しくないpyplotプロットに円をプロットするためにどのような方法を提案しますか?

4

3 に答える 3

18

この質問は 1 年以上前のものですが、私もこの質問をしたばかりです。matplotlib プロットに円を追加する必要があり、データ座標を使用してプロット内の円の位置を指定できるようにしたかったのですが、パン/ズームで円の半径を変更したくありませんでした (さらに悪いことに、円が楕円)。

私が見つけた最良かつ最も簡単な解決策は、単一の点で曲線をプロットし、円マーカーを含めることです。

ax.plot(center_x,center_y,'bo',fillstyle='none',markersize=5)

これにより、塗りつぶしのない固定サイズの素敵な青い円が得られます。

于 2014-03-07T08:05:12.713 に答える
5

それは本当にあなたが望むものに依存します。

縦横比が自動の場合にデータ座標で円を定義する際の問題は、図 (またはそのウィンドウ) のサイズを変更できることであり、データ スケールは適切に拡大されます。残念ながら、これは円がもはや円ではなく、楕円であることも意味します。

これに対処するにはいくつかの方法があります。最初に、そして最も簡単に、縦横比を修正してから、データ座標のプロットに円を配置できます。

import matplotlib.pyplot as plt
import numpy as np


fig = plt.figure()
ax = plt.axes()

ax.set_aspect(1)
theta = np.linspace(-np.pi, np.pi, 200)
plt.plot(np.sin(theta), np.cos(theta))

plt.show()

データ座標円

これにより、通常どおりズームとパンができるようになりますが、形状は常に円になります。

軸のパンとズームが円の位置とズームに影響しないように、データ座標とは関係なく、Figure に円を配置したいだけの場合は、次のようなことができます。

import matplotlib.patches as mpatches
import matplotlib.pyplot as plt
import numpy as np


fig = plt.figure()
ax = plt.axes()
patch = mpatches.Circle((325, 245), 180, alpha=0.5, transform=None)
fig.artists.append(patch)


plt.show()

デバイス座標円

これはかなり高度な mpl ですが、それでもかなり読みやすいと思います。

HTH、

于 2012-08-17T08:13:37.510 に答える
0

@ user3208430 に基づいて、(データ範囲に関係なく) 円を常に軸の同じ場所に表示する場合は、transformを介して軸座標を使用して配置できます。

ax.plot(.94, .94, 'ro', fillstyle='full', markersize=5, transform=ax.transAxes)

x と y は [0 と 1] の間です。この例では、座標軸の右上隅にマーカーを配置します。

于 2016-12-14T17:54:18.157 に答える