pcolormesh中有1个像素网格线

时间:2016-04-19 13:59:39

标签: python matplotlib

在matplotlib中使用pcolormesh时,我可以使用edgecolor参数获取网格。我希望这个网格正好是1像素宽,没有抗锯齿:

plt.pcolormesh(x_bin_edges, y_bin_edges, z, edgecolor='k', linewidth=1, antialiased=False)

但是这段代码给了我一个2-3像素宽的网格(小红色破折号作为视觉指南添加):

linewidth=1

进一步减小线宽(比如0.1)可以得到1-2像素宽的网格线:

linewidth=0.1

进一步降低线宽似乎没有做任何事情。如何将所有网格线缩小到1像素宽?

我正在使用Agg后端在python 2.7.8中的matplotlib 1.4.2中创建png文件。

2 个答案:

答案 0 :(得分:1)

由于答案并没有真正阐明如何设置pcolormesh的linewdith参数来获取正好1像素宽度的网格线,我花了一些力气对其进行了逆向工程,所以我发布了一些对我有用的代码并希望对希望避免使用ax.grid的其他用户有所帮助。与imshow显示的单元格相比,ax.grid经常错位一个像素。

my_dpi设置为显示器的dpi值,并告诉图形这是您正在使用的dpi值,然后使用此公式计算线宽。

my_dpi = 96.0
plt.figure(dpi=my_dpi)

my_linewidth=my_dpi/(1024*32)

这似乎对我有用,它可以始终如一地确保pcolormesh恰好1像素宽的网格线。

答案 1 :(得分:0)

根据this回答,我改为使用ax.grid,它会像我想要的那样生成1个像素网格线:

fig, ax = plt.subplots(1, 1)

ax.grid(True, which='minor', axis='both', linestyle='-', color='k')

ax.set_xticks(lon_grid, minor=True)
ax.set_yticks(lat_grid, minor=True)

ax.set_xlim(lon_grid[0], lon_grid[-1])
ax.set_ylim(lat_grid[0], lat_grid[-1])