Matplotlib:不要在legend中显示errorbars。

时间:2022-10-23 23:36:05

I'm plotting a series of data points with x and y error but do NOT want the errorbars to be included in the legend (only the marker). Is there a way to do so?

我正在用x和y错误绘制一系列数据点,但不希望errorbar包含在图例中(仅包含标记)。有办法这么做吗?

Matplotlib:不要在legend中显示errorbars。

Example:

例子:

import matplotlib.pyplot as plt
import numpy as np
subs=['one','two','three']
x=[1,2,3]
y=[1,2,3]
yerr=[2,3,1]
xerr=[0.5,1,1]
fig,(ax1)=plt.subplots(1,1)
for i in np.arange(len(x)):
    ax1.errorbar(x[i],y[i],yerr=yerr[i],xerr=xerr[i],label=subs[i],ecolor='black',marker='o',ls='')
ax1.legend(loc='upper left', numpoints=1)
fig.savefig('test.pdf', bbox_inches=0)

2 个解决方案

#1


15  

You can modify the legend handler. See the legend guide of matplotlib. Adapting your example, this could read:

您可以修改legend处理程序。参见matplotlib的图例指南。改编您的示例,可以这样理解:

import matplotlib.pyplot as plt
import numpy as np

subs=['one','two','three']
x=[1,2,3]
y=[1,2,3]
yerr=[2,3,1]
xerr=[0.5,1,1]
fig,(ax1)=plt.subplots(1,1)

for i in np.arange(len(x)):
    ax1.errorbar(x[i],y[i],yerr=yerr[i],xerr=xerr[i],label=subs[i],ecolor='black',marker='o',ls='')

# get handles
handles, labels = ax1.get_legend_handles_labels()
# remove the errorbars
handles = [h[0] for h in handles]
# use them in the legend
ax1.legend(handles, labels, loc='upper left',numpoints=1)


plt.show()

This produces

这个生产

Matplotlib:不要在legend中显示errorbars。

#2


4  

Here is an ugly patch:

这是一个丑陋的地方:

pp = []
colors = ['r', 'b', 'g']
for i, (y, yerr) in enumerate(zip(ys, yerrs)):
    p = plt.plot(x, y, '-', color='%s' % colors[i])
    pp.append(p[0])
    plt.errorbar(x, y, yerr, color='%s' % colors[i])  
plt.legend(pp, labels, numpoints=1)

Here is a figure for example:

这里有一个例子:

Matplotlib:不要在legend中显示errorbars。

#1


15  

You can modify the legend handler. See the legend guide of matplotlib. Adapting your example, this could read:

您可以修改legend处理程序。参见matplotlib的图例指南。改编您的示例,可以这样理解:

import matplotlib.pyplot as plt
import numpy as np

subs=['one','two','three']
x=[1,2,3]
y=[1,2,3]
yerr=[2,3,1]
xerr=[0.5,1,1]
fig,(ax1)=plt.subplots(1,1)

for i in np.arange(len(x)):
    ax1.errorbar(x[i],y[i],yerr=yerr[i],xerr=xerr[i],label=subs[i],ecolor='black',marker='o',ls='')

# get handles
handles, labels = ax1.get_legend_handles_labels()
# remove the errorbars
handles = [h[0] for h in handles]
# use them in the legend
ax1.legend(handles, labels, loc='upper left',numpoints=1)


plt.show()

This produces

这个生产

Matplotlib:不要在legend中显示errorbars。

#2


4  

Here is an ugly patch:

这是一个丑陋的地方:

pp = []
colors = ['r', 'b', 'g']
for i, (y, yerr) in enumerate(zip(ys, yerrs)):
    p = plt.plot(x, y, '-', color='%s' % colors[i])
    pp.append(p[0])
    plt.errorbar(x, y, yerr, color='%s' % colors[i])  
plt.legend(pp, labels, numpoints=1)

Here is a figure for example:

这里有一个例子:

Matplotlib:不要在legend中显示errorbars。