繁体   English   中英

matplotlib散点图的像素坐标

[英]Pixel coordinates of matplotlib scatter plot

我正在参考这篇文章并实施解决方案,但是我得到了非常大的值。 感谢您的帮助,附上代码。

import numpy as np
import matplotlib.pyplot as plt

x_labels = ['x1','x2','x3']
y_values = [30,40,50]

coordList = []
x_vals = []
i = 0
fig, ax = plt.subplots()
for item in x_labels:
    x_vals.append(i)
    i+=1
points, = ax.plot(x_vals, y_values)
x, y = points.get_data()
print(x, y)
xy_pixels = ax.transData.transform(np.vstack([x,y]).T)
xpix, ypix = xy_pixels.T
for xp, yp in zip(xpix, ypix):
    coordList.append(f'{xp}, {yp}')
print(coordList)

这是一个结果 coordList:

['80 0.0,39969.6' , '576.0,37382.4', '1072.0,34425.6', '1568.0,31838.399999999998', '2064.0,29620.799999999996', '2560.0,26663.999999999996', '3056.0,24815.999999999996', '3552.0,21859.199999999997',' 4048.0, 19271.999999999996']

您看到的是轴边界的内部自动设置之前的原始转换。 为了强制更新转换,您需要通过例如get_xbounds()获取边界或首先通过调用fig.canvas.draw()完全更新图形(在链接示例中,更新由ax.axis([-1, 10, -1, 10])确保ax.axis([-1, 10, -1, 10]) )。

ax.get_xbound()
xy_pixels = ax.transData.transform(np.vstack([x,y]).T)

结果(对于我的显示):

[0 1 2] [30 40 50]
['102.54545454545455, 69.59999999999997', '328.0, 237.59999999999997', '553.4545454545454, 405.59999999999997']

来源

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM