还有其他问题,但似乎没有一个能解决我的确切问题,也没有一个解决方案可以“纠正”我的问题。
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()
当然,鞋帮只是一个非常简化的版本,但是应该足以看到问题:注释掉两条“ 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)。基本上,代码不应该给我相同的东西,但是右边有第二个标签吗?
最佳答案
一种获得所需内容的方法是在ax2
上重新绘图:
im2 = ax2.imshow(calendar, interpolation='none', cmap='summer')
这不是完美的,但可以。
编辑:
按照答案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对齐,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45445803/