散点图标记大小与轴值成比例aspect='equal'时x轴和y轴的像素数不同?

2024-06-21 20:20:09 发布

您现在位置:Python中文网/ 问答频道 /正文

据我所知,我的问题与this post密切相关。在

我需要绘制一些数据,标记大小与轴的值严格成比例。(已经问了问题here)。在

我的方法如下:

  • 为像素参考创建空散点图
  • 在左下角和右上角散布2个点
  • 将轴限制在这两个点上
  • 使用transData.transform来获得这两点的像素值
  • 将像素距离作为这两点的像素数之差
  • (现在我有了距离与像素的比率,请使用
    s=(size*dist_to_pix_ratio)**2;但现在这并不重要。)

问题是:当我完全按照我所描述的方式进行操作时,y轴和x轴的像素数有两个不同的值。

下面是一个最小的代码:

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(7,7))
ax1 = fig.add_subplot(111, aspect='equal')

#setting up an empty scatterplot for pixel reference
xedges=[0.0, 1.0]
yedges=[0.0, 1.0]
emptyscatter=ax1.scatter(xedges, yedges, s=0.0)

#set axes limits
ax1.set_xlim(0.00,1.00)
ax1.set_ylim(0.00,1.00)   


# Calculating the ratio of pixel-to-unit
upright = ax1.transData.transform((1.0,1.0))
lowleft = ax1.transData.transform((0.0,0.0))
x_to_pix_ratio = upright[0] - lowleft[0]
y_to_pix_ratio = upright[1] - lowleft[1]

print x_to_pix_ratio, y_to_pix_ratio

返回:

^{pr2}$

有人能解释为什么他们不平等吗?

我不确定它是否相关,但我使用的是python2.7.12和matplotlib1.5.1


Tags: to距离figtransformplt像素pixelset