我对此非常绝望,到目前为止,我无法在www上找到任何内容。
以下是这种情况:
到目前为止,一切都按照我的意愿行事。这就是困扰我的事情:
我正在努力的是找出绘图点与轴长度的比率。我需要使用点,因为据我所知,散点图的圆周大小以点值给出。所以如果我们说我的轴从0到10,我需要知道图中有多少点。
任何人都可以帮助我吗?还是有另一种方法吗? 提前谢谢。
答案 0 :(得分:2)
我从你的另一个stackoverflow question跳了进来。我认为您提出的answer to the present question方法无法正常工作,原因如下:
plt.scatter
中标记的大小与圆的直径有关,而与半径无关。因此,每个标记的点数大小应计算为:
size_in_points = (2 * radius_in_pixels / fig_dpi * 72 points/inch)**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()
指定半径为0.5的(1,1)点将导致图中的圆以(1,1)为中心,边界通过点(1.5,1),(1,1.5), (0.5,1)和(1,0.5):