python代码正方形_如何使用matplotlib使标记方格成为精确的正方形?

本文探讨了在matplotlib中如何确保散点图的标记为精确的正方形。作者通过计算像素距离、转换为点数并应用到scatter函数中,尝试创建正方形标记,但遇到了结果不精确的问题。文章寻求解决方案,以便标记能准确地覆盖从0,0到1,1的正方形区域。" 135617613,15126619,最短木板长度优化:华为机试算法题解析,"['算法', '编程题', '数据结构', '问题解决']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先,重要的是我要用散开而不是通过迭代点(补丁),因为我的真实数据有大量的数据点。问题是如何用散开找到合适的标记大小。在

我想通过以下例子实现:对于我的16个数据点中的每一个,图片上的一个正方形应该用特定于该点的颜色绘制。在

根据figsize,我需要计算出标记需要的数据点的确切数量。在

我的策略:

a) 使用ax.transData.transform获取0,0,0,1,0,2的像素值

和1,0,2,0,3,0来验证距离是否相等。

b) 把宽度和高度相乘得到我需要的标记的大小。

c) 从像素转换为点。

d) 把这个记号给散开. 在import numpy as np

import matplotlib.pyplot as plt

xdim = 4

figs = 5

dpi = 100

fig = plt.figure(num=None, figsize=(figs, figs), dpi=dpi, facecolor='w', edgecolor='k')

plt.xlim((-1,5))

plt.ylim((-1,5))

ax = fig.add_subplot(111)

x = np.arange(0+.5, xdim+.5, 1)

y = np.arange(0+.5, xdim+.5, 1)

X, Y = np.meshgrid(x, y)

Z= np.random.rand(xdim*xdim,3)

x_diff = np.diff(ax.transData.transform([(0,0),(0,1),(0,2),(0,3),(0,4)]),axis=0)

y_diff = np.diff(ax.transData.transform([(0,0),(1,0),(2,0),(3,0),(4,0)]),axis=0)

print(x_diff,y_diff)

x_avg = np.average(x_diff[0,1])

y_avg = np.average(y_diff[1,0])

print(x_avg,y_avg)

marker_pixels = x_avg*y_avg

marker_points = (marker_pixels*72)/dpi

print marker_points

plt.scatter(X,Y,c=Z, s=marker_points, marker='s', edgecolors=None)

plt.savefig('foo.png', dpi=dpi)

然而,我得到的结果是66.666(事实!)在这个例子中是64.58,也就是说,不是正方形。当我把两者相乘时,转换成散开我得到了这个图像:

正如你所看到的,正方形不是正方形,也不完全是从0,0到1,1等填充正方形图显示()这将更清楚地看到。在

这个近似解是可以的,因为网格非常大,看起来很好,但是我想知道如何才能精确地求解这个问题。如何确保标记准确地放置在它应该适合的正方形内,从左下角正方形的两个轴上填充0,1?在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值