【问题标题】:Giving imshow a custom list of yaxis labels给 imshow 一个自定义的 yaxis 标签列表
【发布时间】:2021-03-29 12:39:58
【问题描述】:

我正在尝试为 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])

我的图片是这样的:

乍一看,这似乎很好。但是 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.yticklabels 和ax.ytick,但它们也给出了数字的线性级数而不是列表值。

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

【问题讨论】:

    标签: python numpy matplotlib imshow


    【解决方案1】:

    让范围在 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()
    

    有

    plt.figure(figsize=(10, 16))
    plt.imshow(profiles, aspect='auto', extent=[0, 500, N-1, 0])
    plt.yticks(range(N), run_numbers, fontsize=8)
    

    看起来像

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-30
      • 1970-01-01
      • 2017-06-07
      • 1970-01-01
      • 2013-07-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多