【发布时间】:2014-02-11 07:31:22
【问题描述】:
我想绘制一个网格,其中网格中的每个节点都由一个点绘制,具有特定的颜色代码(取自存储在节点中的向量)。
这里的网格大小取决于我正在运行的模拟的大小。我还没有弄清楚画布大小和标记大小之间的关系。现在我使用以下公式:
markersize = (figsize*figsize*dpi*dpi)/(xdim*ydim)
plt.scatter(X, Y, s=markersize/3, marker='s', c=Z, cmap=cm.rainbow)
plt.show()
也就是说,我将 sigsize 和 dpi 平方(分别使用 15 和 80),然后除以网格的维度。最后,我将其除以 3,因为我发现它可以工作。
但我无法弄清楚如何通过分析获得正确的标记大小。我想要的是一个网格,其中每个正方形尽可能多地使用空间,但在其他节点的空间上没有“侵权”,以便标记重叠。
据我所知,figsize 以英寸为单位。 dpi 是 - 每英寸点数,标记大小以 - 点数指定。如果这些点与点相同,那么您将在每个轴上拥有 dpifigsize 数量的点。 xdimydim 是我的网格中的节点数量。然后划分 pow(dpifigsize, 2) / xdimydim 应该给出每个节点的点数,以及我认为的每个标记的正确大小。但这使得标记太大了。我跳水了 3 倍,它几乎适用于我通常运行的尺码,但并非适用于所有尺码。 (我猜一个点和一个点是不一样的,但是有什么关系呢?)
我该如何计算出正确答案?理想情况下,我想要一张非常精细的图片,我可以在其中放大某些区域以更精细地查看颜色细微差别。
【问题讨论】:
-
如果你有一个 fig_size_x=fig_size_y 的各向同性数据,你可以这样做:
marker_size = fig_x*fig_dpi/xdim. ax.scatter(x, y, z, marker='s',c=areaImg[x,y,z], s=marker_size, zdir='z', cmap=plt.cm.rainbow)。然后要获得清晰的结构,您可以使用interpolation
标签: python matplotlib data-visualization