首页 > 解决方案 > 改变 x、y 轴改变 Matplotlib 散布气泡

问题描述

我正在尝试制作一个带标签的气泡图。我已经x,y在 df 中指定了每个气泡的位置。我的问题是情节切断了气泡的边缘:

在此处输入图像描述

我想我可以通过更改xy轴限制来纠正这个问题,但这也会移动气泡:

在此处输入图像描述

我已经寻找解决方案并尝试添加ax.margins(2, 2),但这也不起作用:

在此处输入图像描述

我真的很想知道为什么会这样?以及如何解决它?提前谢谢了。这是我的代码,包括我尝试过的代码:

x = [-0.3, 1.5, 2.3, 2, 4.3, 0, 2.9]
y = [0.94, 1.04, 1.5, 0.7, 1.3, 1.55, 1]
size = [5850, 2600, 6500, 1300, 4550, 7150, 1950]
label = ['a', 'b', 'c', 'd', 'e', 'f', 'g']

df = pd.DataFrame({
'x': x,
'y': y,
's': size,
'label': label
})

fig, ax = plt.subplots(facecolor='w')

#plt.xlim(-2,7)
#plt.ylim(0.4,2)

#ax.margins(2, 2) 

for key, row in df.iterrows():
    ax.scatter(row['x'], row['y'], s=row['s']*5, alpha=.5)
    ax.annotate(row['label'], xy=(row['x'], row['y']))```

标签: pythonmatplotlib

解决方案


您的问题是标记大小s是图像点**2,而不是协调单位:

https://matplotlib.org/3.3.3/api/_as_gen/matplotlib.pyplot.scatter.html

您可以验证它,打开控制台并编写:

import matplotlib.pyplot as plt
plt.ion()
plt.scatter([0], [0], s=10)
# Check, how it looks now
plt.xlim(-5, 5)
# Check that it looks the same

scatter不是这项工作的正确工具。使用Ellipse,这里有一些启发:

https://matplotlib.org/3.3.3/gallery/shapes_and_collections/ellipse_demo.html#sphx-glr-gallery-shapes-and-collections-ellipse-demo-py


推荐阅读