我的 python 脚本使用 matplotlib 绘制 x、y、z 数据集的 2D“热图”。我的 x 和 y 值表示蛋白质中的氨基酸残基,因此只能是整数。当我放大时...
我的 python 脚本使用 matplotlib 绘制 x、y、z 数据集的 2D“热图”。我的 x 和 y 值表示蛋白质中的氨基酸残基,因此只能是整数。当我放大绘图时,它看起来像这样:
正如我所说的,xy 轴上的浮点值对我的数据没有意义,因此我希望它看起来像这样:
有什么想法可以实现这一点吗?这是生成图表的代码:
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()
另一种选择 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)
如果您只需要 n 个刻度中的一个,则只需将此数字提供给 MultipleLocator
,例如 MultipleLocator(3)
:
实际上,您可以将基数设置为任何实数,而不仅限于整数。
相比确保 MaxNLocator
, MultipleLocator
具有整数刻度,而使用 则teger=True
in MaxNLocator
有一个限制:
整数 :bool,默认值
False
。如果True
,则刻度将仅采用整数值, provided at leastmin_n_ticks
integers are found within the view limits .
因此 MaxNLocator
也可以产生这样的结果: