首先,重要的是我要用散开而不是通过迭代点(补丁),因为我的真实数据有大量的数据点。问题是如何用散开找到合适的标记大小。在
我想通过以下例子实现:对于我的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?在