还有其他问题,但似乎没有一个能解决我的确切问题,也没有一个解决方案可以“纠正”我的问题。

import matplotlib.pyplot as plt
calendar = [[1,0,0,1,1,0,1],[0,0,1,1,1,0,1]]
fig, ax = plt.subplots()
namelist = ['alpha','beta']
yticks = [n for n in range(len(namelist))]
ax.set_yticks(yticks)
ax.set_yticklabels(namelist)
ax2 = ax.twinx()
ax2.set_yticks(ax.get_yticks())
ax2.set_yticklabels(['gamma','delta'])

im = ax.imshow(calendar, interpolation='none', cmap='summer')
plt.show()


python - Matplotlib twinx与yticklabel和yticks对齐-LMLPHP

当然,鞋帮只是一个非常简化的版本,但是应该足以看到问题:注释掉两条“ ax2线”时,绘图是我想要的,但是当添加第二个y轴时,绘图会像我一样调整大小不想。我希望alpha / beta与gamma / delta处于相同的高度(这样就不会留空白),但是我现在已经失败了一段时间。我已经尝试过get_yticks()函数(如在一些类似问题中所建议的),但是它没有帮助。
提前致谢!

编辑:一个小细节:从某种意义上讲,该解决方案应该是“可扩展的”,它应该使用更多的y值(alpha,beta,delta等),并且它们的双胞胎在前面。

编辑2:(我不确定是否发布一个新问题是否有用,所以我只是在这里问:)我现在正试图添加一个网格。我再次尝试了很多,但似乎无济于事,充其量我可以得到一个Y轴网格。检查以下代码(并尝试对未注释的行进行相同的操作!):

import matplotlib.pyplot as plt
calendar = [[1,0,0,1,1,0,1],[0,0,1,1,1,0,1]]
fig, ax = plt.subplots()
namelist = ['alpha','beta']
yticks = [n for n in range(len(namelist))]
ax.set_xticks([num for num in range(len(calendar[0]))])
ax.set_xticks([num-0.5 for num in range(len(calendar[0]))],minor=True)
ax.set_yticks(yticks)
ax.set_yticks([num-0.5 for num in range(len(namelist))],minor=True)
ax.set_yticklabels(namelist)
im = ax.imshow(calendar, interpolation='none', cmap='summer')
ax.set_adjustable('box-forced')
ax.xaxis.grid(which='major',alpha=1,color='k',lw=2)
ax.xaxis.grid(which='minor',alpha=1,color='k',lw=2)
ax.yaxis.grid(which='minor',alpha=1,color='k',lw=2)

#ax2 = ax.twinx()
#ax2.set_yticks(ax.get_yticks())
#ax2.set_yticklabels(['gamma','delta'])
#im2 = ax2.imshow(calendar, interpolation='none', cmap='summer')
#ax2.set_adjustable('box-forced')

plt.show()


如何显示网格?这里是一张图片(没有ax2)。基本上,代码不应该给我相同的东西,但是右边有第二个标签吗?
python - Matplotlib twinx与yticklabel和yticks对齐-LMLPHP

最佳答案

一种获得所需内容的方法是在ax2上重新绘图:

im2 = ax2.imshow(calendar, interpolation='none', cmap='summer')


这不是完美的,但可以。

python - Matplotlib twinx与yticklabel和yticks对齐-LMLPHP

编辑:

按照答案here,如果进一步在轴上使用set_adjustable,则空白消失:

import matplotlib.pyplot as plt
calendar = [[1,0,0,1,1,0,1],[0,0,1,1,1,0,1]]
fig, ax = plt.subplots()
namelist = ['alpha','beta']
yticks = [n for n in range(len(namelist))]
ax.set_yticks(yticks)
ax.set_yticklabels(namelist)
im = ax.imshow(calendar, interpolation='none', cmap='summer')
ax.set_adjustable('box-forced')

ax2 = ax.twinx()
ax2.set_yticks(ax.get_yticks())
ax2.set_yticklabels(['gamma','delta'])
im2 = ax2.imshow(calendar, interpolation='none', cmap='summer')
ax2.set_adjustable('box-forced')

plt.show()


python - Matplotlib twinx与yticklabel和yticks对齐-LMLPHP

关于python - Matplotlib twinx与yticklabel和yticks对齐,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45445803/

10-12 23:15