4

楕円をマーカーとしてプロット(エラーバー付き)を作成する必要があります。いくつかの検索の後、私はで思いついEllipsematplotlib.patches。次に、エラーバーを で描くことができましたplt.errorbar。しかし問題は、最初にエラー バー コマンドを実行しても、エラー バーは常にフォアグラウンドに描画され、楕円はプログラムでどのような順序で指定してもバックグラウンドに描画されることです。

エラーバーを使用して楕円をマーカーとして作成するより良い方法を知っている人はいますか (各ポイントは異なる離心率を持ちます)。または、少なくともエラーバーを背景に配置する方法を教えてください。

これは私がこれまでに持っているものの最小限の例です:

import matplotlib.pyplot as plt
from matplotlib.backends.backend_pdf import PdfPages
from matplotlib.patches import Ellipse

PlotFileName="test.pdf"
pdf = PdfPages(PlotFileName)
fig=plt.figure(1)
ax1=fig.add_subplot(111)
plt.xlim([1,4])
plt.ylim([2,8])
ax1.errorbar([2.5], [5], yerr=[1], fmt="o", color="black", ms=0.1)
ax1.add_artist(Ellipse((2.5, 5), 1, 1, facecolor="green", edgecolor="black"))
pdf.savefig(fig)
pdf.close()
plt.close()

そして、これがどのように見えるかです: 楕円の前のエラーバー

エラーバーを楕円の背景に表示したい。

前もって感謝します...

4

2 に答える 2

2

両方のプロット コマンドにzorder指定子を使用します。ドキュメントから: 「アーティストの zorder を設定します。zorder 値が低いアーティストが最初に描画されます。」

import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse

fig=plt.figure(1)
ax1=fig.add_subplot(111)
plt.xlim([0,5])
plt.ylim([0,10])
ax1.errorbar([2.5], [5], yerr=[1], fmt="o", color="black", ms=0.1, zorder=1)
ax1.add_artist(Ellipse((2.5, 5), 1, 1, facecolor="green", edgecolor="black",zorder=2))

plt.show()

exit(0)
于 2012-07-04T06:41:45.243 に答える
0

パスの操作Pathを使用する方がより簡単なアプローチのように思えます。Pathインスタンスは通常とまったく同じように扱われるmarkerため、まったく同じインターフェイスを使用するだけです。以下の例をご覧ください。また、このトピックに関するmatplotlib のドキュメントも参照してください。

import numpy as np

import matplotlib.pyplot as plt 
import matplotlib.path as mpath

# Create mock data.
theta = np.linspace(0, 2.*np.pi, 30) 
signa = np.sin(theta)

u_theta = np.random.normal(0., scale=0.15, size=signa.size)
u_signa = np.random.normal(0., scale=0.15, size=signa.size)

theta += u_theta
signa += u_signa

# Define the ellipse marker.
circle = mpath.Path.unit_circle()
verts = np.copy(circle.vertices)
verts[:, 0] *= 1.618
ellipt_marker = mpath.Path(verts, circle.codes)

# Done, basically.[![Plotting example][1]][1]
plt.errorbar(theta, signa, xerr=u_theta, yerr=u_signa,
             marker=ellipt_marker, linestyle='', capsize=5,
             ms=20, mfc='w', c='r', mec='g')

plt.xlabel('Autology', fontsize=35)
plt.ylabel('Eterology', fontsize=35)
plt.show()
于 2019-06-14T12:10:15.490 に答える