gpt4 book ai didi

python散点图面积大小比例 Axis 长度

转载 作者:行者123 更新时间:2023-12-01 04:01:16 27 4
gpt4 key购买 nike

我对此感到非常绝望,到目前为止我在 www 上找不到任何东西。

情况如下:

  • 我正在使用 Python。
  • 我有 3 个数组:x 坐标、y 坐标和半径。
  • 我想使用给定的 x 和 y 坐标创建散点图。

到目前为止,一切都按照我想要的方式进行。这是困扰我的事情:

  • 散点图中每个点的圆大小应由半径数组定义。
  • 坐标值和半径值的单位相同。更明确地说:假设我在 (1, 1) 处有一个点,半径指定为 0.5。然后我想在图中得到一个以 (1, 1) 为中心且边界穿过点 (1.5, 1)、(1, 1.5)、(0.5, 1) 和 (1, 0.5) 的圆<

我正在努力找出绘图点与 Axis 长度的比率。我需要使用点,因为据我所知,散点图的圆圈大小以点值给出。因此,如果我的 Axis 从 0 到 10,我需要知道图中有多少个点。

有人可以帮我吗?或者还有其他方法可以做到这一点吗?提前致谢。

最佳答案

我从你的另一个stackoverflow question跳入。我认为您提出的方法为 answer to the present question由于以下原因,无法完全按照您的要求工作:

  • 首先,标记的大小以磅为单位,而不是像素。在排版方面,the point是最小的测量单位,在 matplotlib 中对应于 1/72 英寸的固定长度。相反,像素的大小将根据图形 dpi 和大小而变化。
  • 其次,plt.scatter 中标记的大小与圆的直径有关,而不是半径。

因此每个标记的大小(以磅为单位)应计算如下:

size_in_points = (2 * radius_in_pixels/Fig_dpi * 72 点/英寸)**2

此外,如下面的 MWE 所示,可以直接使用 matplotlib transformations 计算标记半径的大小(以像素为单位)。 ,无需事先生成空图形:

import numpy as np
import matplotlib.pyplot as plt

plt.close('all')

# Generate some data :
N = 25
x = np.random.rand(N) + 0.5
y = np.random.rand(N) + 0.5
r = np.random.rand(N)/10

# Plot the data :
fig = plt.figure(facecolor='white', figsize=(7, 7))
ax = fig.add_subplot(111, aspect='equal')
ax.grid(True)
scat = ax.scatter(x, y, s=0, alpha=0.5, clip_on=False)
ax.axis([0, 2, 0, 2])

# Draw figure :
fig.canvas.draw()

# Calculate radius in pixels :
rr_pix = (ax.transData.transform(np.vstack([r, r]).T) -
ax.transData.transform(np.vstack([np.zeros(N), np.zeros(N)]).T))
rpix, _ = rr_pix.T

# Calculate and update size in points:
size_pt = (2*rpix/fig.dpi*72)**2
scat.set_sizes(size_pt)

# Save and show figure:
fig.savefig('scatter_size_axes.png')
plt.show()

enter image description here

指定半径为 0.5 的 (1, 1) 处的点将在图中形成一个以 (1, 1) 为中心且边界穿过点 (1.5, 1)、(1, 1.5) 的圆, (0.5, 1) 和 (1, 0.5):

enter image description here

关于python散点图面积大小比例 Axis 长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36458458/

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