matplotlib imshow与twinx,这也与瓷砖对齐

44u64gxh  于 2023-05-23  发布在  其他
关注(0)|答案(1)|浏览(203)

is a thread,问题是将自动标记的twinx添加到Matplotlib的imshow。结果是:

但是,我希望第二个y轴上的刻度为1。可手动设置和2.与其他刻度对齐。在Paint中绘制的输出示例:

  • 此外,我想通过使用imshow参数aspect=4/8来拉伸网格图块,使整个网格成为正方形。*

如果您设置纵横比并遵循this thread,则会像this thread中那样在图形周围产生额外的空白。他们都声称解决方案是使用set_adjustable('box-forced'),但这似乎已经被删除了。当我尝试它时,Matplotlib说

ValueError: 'box-forced' is not a valid value for adjustable; supported values are 'box', 'datalim'

当我尝试box时,我得到:

RuntimeError: Adjustable 'box' is not allowed in a twinned Axes; use 'datalim' instead

而使用datalim时,不会删除白色。在2023年,你如何做到这一点?

hmtdttj4

hmtdttj41#

首先,您会注意到第二个y轴没有与第一个对齐,并且刻度从边缘开始。因此,正如其中一个答案中所提到的,您可以通过再次创建ax2来对齐刻度。完成后,您需要将刻度和刻度标签设置为所需的数字。下面给出了要添加到代码中twinx()所在位置的附加行...

ax2 = ax1.twinx()

## Create same plot with ax2
ax2.imshow(twoDim, cmap='Purples', interpolation='nearest', aspect='auto')
ax2.set_yticks(np.arange(0,twoDim.shape[0],1))  ## Set ax2 ticks
## ticklabels set to whatever you want, just make sure the counts of ticks and ticklables match
ax2.set_yticklabels(np.arange(3,(twoDim.shape[0]+1)*3,3))

相关问题