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

如何强制整数刻度标签

Andreas Tille 1月前

51 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)
  • 只需将索引转换 i 为字符串即可获得以下解决方案:

        import matplotlib.pyplot as plt
        import time
    
        datay = [1,6,8,4] # Just an example
        datax = []
        
        # In the following for loop datax in the end will have the same size of datay, 
        # can be changed by replacing the range with wathever you need
        for i in range(len(datay)):
            # In the following assignment statement every value in the datax 
            # list will be set as a string, this solves the floating point issue
            datax += [str(1 + i)]
    
        a = plt
    
        # The plot function sets the datax content as the x ticks, the datay values
        # are used as the actual values to plot
        a.plot(datax, datay)
    
        a.show()
    
返回
作者最近主题: