Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matplotlib Errorbar可变标记大小_Matplotlib_Errorbar - Fatal编程技术网

Matplotlib Errorbar可变标记大小

Matplotlib Errorbar可变标记大小,matplotlib,errorbar,Matplotlib,Errorbar,我想绘制一些数据x和y,其中我需要标记大小取决于第三个数组z。我可以分别绘制它们(即,使用size=z分散x和y,以及不带标记的错误条,fmc='none'),这样就解决了这个问题。问题是我需要图例来同时显示错误条和点: 而不是 下面是代码和一些虚构的数据: import matplotlib.pyplot as plt import numpy as np x = np.linspace(1,10,100) y = 2*x yerr = np.random(0.5,1.0,100) z

我想绘制一些数据
x
y
,其中我需要标记大小取决于第三个数组
z
。我可以分别绘制它们(即,使用
size=z
分散
x
y
,以及不带标记的错误条,
fmc='none'
),这样就解决了这个问题。问题是我需要图例来同时显示错误条和点:

而不是

下面是代码和一些虚构的数据:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(1,10,100)
y = 2*x
yerr = np.random(0.5,1.0,100)
z = np.random(1,10,100)

fig, ax = plt.subplots()

plt.scatter(x, y, s=z, facecolors='', edgecolors='red', label='Scatter') 
ax.errorbar(x, y, yerr=yerr, xerr=0, fmt='none', mfc='o', color='red', capthick=1, label='Error bar')

plt.legend()

plt.show()
这产生了我想要避免的传奇:


errorbar中,参数
markersize
不像
scatter`那样接受数组。

通常使用代理将其放入图例中。因此,虽然绘图中的错误条可能没有标记,但图例中的错误条有一个标记集

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(1,10,11)
y = 2*x
yerr = np.random.rand(11)*5
z = np.random.rand(11)*2+5

fig, ax = plt.subplots()

sc = ax.scatter(x, y, s=z**2, facecolors='', edgecolors='red') 
errb = ax.errorbar(x, y, yerr=yerr, xerr=0, fmt='none', 
                   color='red', capthick=1, label="errorbar")

proxy = ax.errorbar([], [], yerr=[], xerr=[], marker='o', mfc="none", mec="red", 
                    color='red', capthick=1, label="errorbar")
ax.legend(handles=[proxy], labels=["errorbar"])
plt.show()

这解决了我的问题。谢谢你快速清晰的回答。