8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

如何强制整数刻度标签

Andreas Tille 1月前

50 0

我的 python 脚本使用 matplotlib 绘制 x、y、z 数据集的 2D“热图”。我的 x 和 y 值表示蛋白质中的氨基酸残基,因此只能是整数。当我放大时...

我的 python 脚本使用 matplotlib 绘制 x、y、z 数据集的 2D“热图”。我的 x 和 y 值表示蛋白质中的氨基酸残基,因此只能是整数。当我放大绘图时,它看起来像这样:

2D heat map with float tick marks

正如我所说的,xy 轴上的浮点值对我的数据没有意义,因此我希望它看起来像这样:enter image description here

有什么想法可以实现这一点吗?这是生成图表的代码:

def plotDistanceMap(self):
    # Read on x,y,z
    x = self.currentGraph['xData']
    y = self.currentGraph['yData']
    X, Y = numpy.meshgrid(x, y)
    Z = self.currentGraph['zData']
    # Define colormap
    cmap = colors.ListedColormap(['blue', 'green', 'orange', 'red'])
    cmap.set_under('white')
    cmap.set_over('white')
    bounds = [1,15,50,80,100]
    norm = colors.BoundaryNorm(bounds, cmap.N)
    # Draw surface plot
    img = self.axes.pcolor(X, Y, Z, cmap=cmap, norm=norm)
    self.axes.set_xlim(x.min(), x.max())
    self.axes.set_ylim(y.min(), y.max())
    self.axes.set_xlabel(self.currentGraph['xTitle'])
    self.axes.set_ylabel(self.currentGraph['yTitle'])
    # Cosmetics
    #matplotlib.rcParams.update({'font.size': 12})
    xminorLocator = MultipleLocator(10)
    yminorLocator = MultipleLocator(10)
    self.axes.xaxis.set_minor_locator(xminorLocator)
    self.axes.yaxis.set_minor_locator(yminorLocator)
    self.axes.tick_params(direction='out', length=6, width=1)
    self.axes.tick_params(which='minor', direction='out', length=3, width=1)
    self.axes.xaxis.labelpad = 15
    self.axes.yaxis.labelpad = 15
    # Draw colorbar
    colorbar = self.figure.colorbar(img, boundaries = [0,1,15,50,80,100], 
                                    spacing = 'proportional',
                                    ticks = [15,50,80,100], 
                                    extend = 'both')
    colorbar.ax.set_xlabel('Angstrom')
    colorbar.ax.xaxis.set_label_position('top')
    colorbar.ax.xaxis.labelpad = 20
    self.figure.tight_layout()      
    self.canvas.draw()
帖子版权声明 1、本帖标题:如何强制整数刻度标签
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Andreas Tille在本站《matplotlib》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 另一种选择 MaxNLocator matplotlib.ticker.MultipleLocator 。默认情况下,它只输出整数值。

    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib.ticker as tck
    
    x = np.linspace(-5, 5, 90)
    y = np.sinc(x)
    
    fig, ax = plt.subplots(figsize=(6, 2), layout='constrained')
    ax.xaxis.set_major_locator(tck.MultipleLocator())
    ax.set_xlabel('x')
    ax.plot(x, y)
    

    enter image description here

    如果您只需要 n 个刻度中的一个,则只需将此数字提供给 MultipleLocator ,例如 MultipleLocator(3)

    enter image description here

    实际上,您可以将基数设置为任何实数,而不仅限于整数。


    相比确保 MaxNLocator , MultipleLocator 具有整数刻度,而使用 则teger=True in MaxNLocator 有一个限制:

    整数 :bool,默认值 False 。如果 True ,则刻度将仅采用整数值, provided at least min_n_ticks integers are found within the view limits .

    因此 MaxNLocator 也可以产生这样的结果:

    enter image description here

返回
作者最近主题: