微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

给 imshow 一个自定义的 yaxis 标签列表

如何解决给 imshow 一个自定义的 yaxis 标签列表

我试图给 pyplot.imshow() 一个值列表,这些值不一定是线性的,可以用作 y 轴标签。截断的列表是:

run_numbers = array([815676,815766,815767,815768,815769,815770,815771,815772,815773,815774,815775,815776,815777,815778,815779,815780,815781,815783,815784,815785,815786,815789,815790,815792,815793,815794,815795,815796,815797,815798,815799,815800,815801,815802,815803,815804,815805,815806,815807,815808,815809,815811,815812,815813,815814,815815,815816,815817,815818,815819,815820,815821,815822,815823,815824,815825,815826,815827,815829,815830,815831,815832,815833,815834,815835,815836,815837,815838,815839,815841,815842,815843,815844,815845,815846,815847,815848,815849,815851,815852,815853,815854,815855,815856,815857,815858,815859,815860,815861,815863,815864,815865,815866,815867,815869,815870,815871,815872,815873,815874,815875,815876,815877,815878])

我的图像如下所示:

enter image description here

乍一看,这似乎不错。但是 imshow 没有使用列表中的值,而是使用从 815676 到列表最大值的线性范围。我尝试了一些不同的东西:

plt.imshow(np.array(profiles),aspect='auto',vmin=-5,vmax=20,extent=[0,500,max(run_numbers),min(run_numbers)])

上面的代码给出了上面的图像,考虑到我放入的范围,这是有道理的。

有没有办法告诉 imshow 使用列表中的值作为 yaxis 标签?我试过 ax.yticklabelsax.ytick,但它们也给出了数字的线性级数,而不是列表值。

如果有任何混淆,请告诉我如何澄清我的问题。如果我的问题不清楚,我还可以提供示例数据集。

解决方法

让范围介于 0 和标签数减 1 之间,然后使用 plt.yticks(range(N),run_numbers) 将设置标签。由于大约有 100 个标签,这看起来会非常拥挤,可以通过设置较大的图形大小和较小的字体来缓解这种情况。或者标签可以设置为每个步骤,例如步骤 10:

import numpy as np
import matplotlib.pyplot as plt

run_numbers = np.array([815676,815766,815767,815768,815769,815770,815771,815772,815773,815774,815775,815776,815777,815778,815779,815780,815781,815783,815784,815785,815786,815789,815790,815792,815793,815794,815795,815796,815797,815798,815799,815800,815801,815802,815803,815804,815805,815806,815807,815808,815809,815811,815812,815813,815814,815815,815816,815817,815818,815819,815820,815821,815822,815823,815824,815825,815826,815827,815829,815830,815831,815832,815833,815834,815835,815836,815837,815838,815839,815841,815842,815843,815844,815845,815846,815847,815848,815849,815851,815852,815853,815854,815855,815856,815857,815858,815859,815860,815861,815863,815864,815865,815866,815867,815869,815870,815871,815872,815873,815874,815875,815876,815877,815878])
N = len(run_numbers)
profiles = np.random.randn(N,501).cumsum(axis=1)
plt.imshow(profiles,aspect='auto',extent=[0,500,N-1,0])
plt.yticks(range(0,N,10),run_numbers[::10])
plt.show()

resulting plot

plt.figure(figsize=(10,16))
plt.imshow(profiles,0])
plt.yticks(range(N),run_numbers,fontsize=8)

看起来像

plot with small text

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。