Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.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
Python matplotlib图例元素大小与func中给定的值不对应_Python_Matplotlib_Legend - Fatal编程技术网

Python matplotlib图例元素大小与func中给定的值不对应

Python matplotlib图例元素大小与func中给定的值不对应,python,matplotlib,legend,Python,Matplotlib,Legend,我有一个matplotlib散点图,其中点的大小与点的值对数连接。我想为这个图创建一个图例,并尝试使用以下代码: x = df['A'] y = df['B'] colors = df['C'] sizes = np.log10(0.1 * df['C']) / np.log10(1.03) plt.figure(figsize=(5,5)) dots = plt.scatter(x, y, s=sizes, c=colors, alpha=0.5) plt.xlim(-0.005, 0.14

我有一个matplotlib散点图,其中点的大小与点的值对数连接。我想为这个图创建一个图例,并尝试使用以下代码:

x = df['A']
y = df['B']
colors = df['C']
sizes = np.log10(0.1 * df['C']) / np.log10(1.03)

plt.figure(figsize=(5,5))
dots = plt.scatter(x, y, s=sizes, c=colors, alpha=0.5)
plt.xlim(-0.005, 0.145)
plt.ylim(0, 0.06)
plt.legend(*dots.legend_elements('sizes', num=4, func=lambda x: np.power(1.03, x)))
plt.show()
预期行为: 我希望在图例中看到四条线,其中图例元素的大小与绘图上相应点的大小相同

如果我从
dots.legend\u elements
方法中删除
func
参数,我的图例中会有4行。但我也希望它们在元素之后有正确的值

现实: 我只看到三行,图例元素与我的
size
数组中的大小不同

我的
func
参数似乎与
np.log10(0.1*x)/np.log10(1.03)
相反,但可能我用错了。

解决方案

示例

sizes = np.log10(0.1 * 50) / np.log10(1.03)
#output 54.44868500700143
func(sizes)
#output 49.99999999999999

这就可以了。

您只想要4种不同的尺寸吗?(我理解正确吗?@ombk,我希望在
num
参数中放置尽可能多的值。目前是4,是的,但我可能想在将来更改它。如果有办法为我们提供数据帧?是csv文件还是随机制服distributions@ombk,数据框是一个csv文件,
C
列包含20到15300的值,大致呈对数正态分布。谢谢!唯一的轻微修正是仅
func=lambda x:10*np.power(1.03,x)
@boriskalin事实上,请原谅我的数学生疏,我只是在纸上写的,记不起我的
log10
东西。
sizes = np.log10(0.1 * 50) / np.log10(1.03)
#output 54.44868500700143
func(sizes)
#output 49.99999999999999