我想绘制一个网格,网格中的每个节点都用一个点绘制,带有一定的颜色代码(取自存储在节点中的矢量)。
这里的网格大小取决于我正在运行的模拟的大小。我还没有弄清楚画布大小和标记大小之间的关系。现在我使用以下公式:
markersize = (figsize*figsize*dpi*dpi)/(xdim*ydim)
plt.scatter(X, Y, s=markersize/3, marker='s', c=Z, cmap=cm.rainbow)
plt.show()
这是我对sigize和dpi(分别使用15和80)进行平方,并除以网格的维数。最后,我把它除以3,因为我发现它可以工作。
但我无法弄清楚如何分析得到正确的标记大小。我想要的是一个网格,其中每个方块使用尽可能多的空间但在其他节点的空间上没有“infringinig”,因此标记重叠。
据我所知,figsize以英寸为单位。 dpi是 - 每英寸点数,标记大小以 - 点指定。如果这些点与点相同,那么您将在每个轴上具有dpi figsize点数量。 xdim ydim是网格中的节点数量。然后划分pow(dpi figsize,2)/ xdim ydim应该给出每个节点的点数量,以及我认为的每个标记的正确大小。但这使得标记太大了。我分开了3次,它实际上适用于我经常跑的尺寸,但不是全部。 (我猜一个点和点不一样,但是关系是什么?)
我如何找到正确答案?理想情况下,我想要一个非常精细的图片,我可以放大某些区域,以更好地了解颜色的细微差别。
答案 0 :(得分:0)
如果您想精确控制标记大小并使其与图形一致,则可以使用patch而不是常规标记。这是一个例子:
from matplotlib import pyplot as plt
from matplotlib.patches import Circle
x = [1, 2, 3, 4, 5]
y = [1, 3, 1, 2, 4]
colors = [10, 215, 30, 100]
cmap = plt.cm.jet
fig = plt.figure()
ax = fig.add_subplot(111, aspect='equal')
for (x, y, c) in zip(x, y, colors):
ax.add_artist(Circle(xy=(x, y), radius=0.5, color=cmap(c)))
ax.set_xlim(0, 6)
ax.set_ylim(0, 6)
plt.show()
您也可以使用矩形而不是圆圈。