Skip to main content
 首页 » 编程设计

python之matplotlib 中的填充误差线(矩形)

2025年05月04日25birdshome

是否可以在 matplotlib 中绘制这样的图?我只关心红色填充的矩形,十字很容易用 errorbar 完成。

请您参考如下方法:

不幸的是,errorbar 不能这样做,但您可以从您的错误数据创建一个 PatchCollection,它可以很容易地添加到坐标区。有关如何执行此操作的示例,请参阅此快速脚本。

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib.collections import PatchCollection 
from matplotlib.patches import Rectangle 
 
# Number of data points 
n=5 
 
# Dummy data 
x=np.arange(0,n,1) 
y=np.random.rand(n)*5. 
 
# Dummy errors (above and below) 
xerr=np.random.rand(2,n) 
yerr=np.random.rand(2,n) 
 
# Create figure and axes 
fig,ax = plt.subplots(1) 
 
# Plot data points 
ax.errorbar(x,y,xerr=xerr,yerr=yerr,fmt='None',ecolor='k') 
 
# Function to plot error boxes 
def makeErrorBoxes(xdata,ydata,xerror,yerror,fc='r',ec='None',alpha=0.5): 
 
    # Create list for all the error patches 
    errorboxes = [] 
 
    # Loop over data points; create box from errors at each point 
    for xc,yc,xe,ye in zip(xdata,ydata,xerror.T,yerror.T): 
        rect = Rectangle((xc-xe[0],yc-ye[0]),xe.sum(),ye.sum()) 
        errorboxes.append(rect) 
 
    # Create patch collection with specified colour/alpha 
    pc = PatchCollection(errorboxes,facecolor=fc,alpha=alpha,edgecolor=ec) 
 
    # Add collection to axes 
    ax.add_collection(pc) 
 
# Call function to create error boxes 
makeErrorBoxes(x,y,xerr,yerr) 
 
# Add some space around the data points on the axes 
ax.margins(0.1) 
 
plt.show()