gpt4 book ai didi

python - 将散点图中的标记正确调整为 Matplotlib 中的半径 R

转载 作者:太空宇宙 更新时间:2023-11-04 01:00:24 25 4
gpt4 key购买 nike

我有一个限制为 -1 到 1 的图。我知道散点图不是以大小为半径绘制的,而是以大小为点绘制的。

我需要根据每个点的大小正确缩放我的图,我将其作为半径。是否可以修改以下代码?

fig, ax = plt.subplots(1)
ax.set_title("Post Synaptic Neurons")
sizes = [x.size * 100 for x in post_synaptic_neurons]
offsets = [(x.origin[0],x.origin[1]) for x in post_synaptic_neurons]
print(sizes)
ax.scatter([x.origin[0] for x in post_synaptic_neurons], [x.origin[1] for x in post_synaptic_neurons],
cmap=plt.cm.hsv, s=sizes, alpha=0.5)
ax.set_xlim([-1,1])
ax.set_ylim([-1,1])
ax.set_aspect(1)
plt.tight_layout

如果没有,有人可以向我解释为什么 matplotlib 没有在绘图比例尺上绘制具有特定半径的圆的函数吗?我没想到这会成为一个问题,但我的困难背后一定有充分的理由。

最佳答案

是的,有一种方法可以在绘图比例尺上绘制具有特定半径的散点图。方法是仔细定义图形大小并指定点数中的半径,因为 plt.scatter 的文档说参数 s 是“The marker size in点**2”。

这是一个在位置 [0.5, 0.5] 处绘制半径为 0.1 的圆的示例

import matplotlib.pyplot as plt
plt.figure(figsize=[5, 5])
ax = plt.axes([0.1, 0.1, 0.8, 0.8], xlim=(0, 1), ylim=(0, 1))
points_whole_ax = 5 * 0.8 * 72 # 1 point = dpi / 72 pixels
radius = 0.1
points_radius = 2 * radius / 1.0 * points_whole_ax
ax.scatter(0.5, 0.5, s=points_radius**2, color='r')
plt.grid()
plt.show()

这里的关键是 matplotlib 中点的标准大小是每英寸 72 点 (ppi),无论 dpi 是多少。 points_radius 公式中的因数 2 是因为面积是方框外的面积,即 area = (2 * radius)**2。输出图如下所示。

A circle with a radius of 0.1 in code scale, plot with plt.scatter

关于python - 将散点图中的标记正确调整为 Matplotlib 中的半径 R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33094509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com