【问题标题】:Matplotlib: personalize imshow axisMatplotlib:个性化 imshow 轴
【发布时间】:2016-03-04 08:32:00
【问题描述】:

我有 (H,ranges) = numpy.histogram2d() 计算的结果,我正在尝试绘制它。

给定H,我可以很容易地把它放入plt.imshow(H),得到对应的图像。 (见http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.imshow

我的问题是生成图像的轴是H 的“细胞计数”,与ranges. 的值完全无关

我知道我可以使用关键字extent(如所指出的:Change values on matplotlib imshow() graph axis)。但是这个解决方案对我不起作用:我在range 上的值并没有线性增长(实际上它们呈指数增长)

我的问题是:如何将range 的值放入plt.imshow() 中?或者至少,或者我可以手动设置plt.imshow 结果对象的标签值吗?

编辑extent 不是一个好的解决方案。

【问题讨论】:

    标签: python-3.x matplotlib


    【解决方案1】:

    扩展一点@thomas 的回答

    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib.image as mi
    
    im = np.random.rand(20, 20)
    
    ticks = np.exp(np.linspace(0, 10, 20))
    
    fig, ax = plt.subplots()
    
    ax.pcolor(ticks, ticks, im, cmap='viridis')
    ax.set_yscale('log')
    ax.set_xscale('log')
    
    ax.set_xlim([1, np.exp(10)])
    ax.set_ylim([1, np.exp(10)])
    

    通过让 mpl 处理非线性映射,您现在可以准确地过度绘制其他艺术家。这会影响性能(因为pcolor 的绘制成本比AxesImage 更高),但获得准确的刻度是值得的。

    【讨论】:

      【解决方案2】:

      您可以将刻度标签更改为更适合您的数据的内容。

      例如,这里我们将每 5 个像素设置为一个指数函数:

      import numpy as np
      import matplotlib.pyplot as plt
      
      im = np.random.rand(21,21)
      
      fig,(ax1,ax2) = plt.subplots(1,2)
      
      ax1.imshow(im)
      ax2.imshow(im)
      
      # Where we want the ticks, in pixel locations
      ticks = np.linspace(0,20,5)
      # What those pixel locations correspond to in data coordinates.
      # Also set the float format here
      ticklabels = ["{:6.2f}".format(i) for i in np.exp(ticks/5)]
      
      ax2.set_xticks(ticks)
      ax2.set_xticklabels(ticklabels)
      ax2.set_yticks(ticks)
      ax2.set_yticklabels(ticklabels)
      
      plt.show()
      

      【讨论】:

      • 超级!我在几分钟内就实现了它并完成了这项工作!
      • 这很危险,因为您已将刻度标签与数据值分离。
      【解决方案3】:

      imshow 用于显示图像,因此不支持 x 和 y bin。 你也可以改用pcolor

      H,xedges,yedges = np.histogram2d()
      plt.pcolor(xedges,yedges,H)
      

      或使用plt.hist2d 直接绘制您的直方图。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-25
        • 2012-09-07
        • 2018-06-23
        • 2012-09-01
        • 1970-01-01
        • 2013-08-16
        • 1970-01-01
        相关资源
        最近更新 更多