Mój skrypt python używa matplotlib do wykreślenia 2D "mapy ciepła" zbioru danych x, y, z. Moje wartości xi y reprezentują reszty aminokwasowe w białku i dlatego mogą być tylko liczbami całkowitymi. Kiedy powiększyć fabuły, wygląda to tak:Matplotlib: Jak wymusić etykiety liczby całkowitej?
Jak powiedziałem, wartości unosić się na osiach xy nie ma sensu z moimi danymi i dlatego ma to wyglądać tak:
Jakieś pomysły, jak to osiągnąć? Jest to kod, który generuje działki:
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()
Nie umieszcza mnie na etykiecie pasków do środkowego punktu danego regionu (jak w przykładowym obrazie pytania), a co sekundę (bez etykiety) brakuje. Czy istnieje prosta sztuczka, aby je osiągnąć? Wartość "2" powinna wynosić 2,5, a nie 2,0. – Andris
@Andris wow o tym nie mam absolutnie żadnego pojęcia. W każdym razie wydaje się dziwne, aby dostosować bibliotekę kreślarską do tego zadania, prawdopodobnie powinieneś zmodyfikować swoje dane. Przykładowy obraz, do którego się odnosisz wydaje się być edytowany za pomocą farby lub czegoś podobnego, więc nie oznacza to, że taki wynik jest możliwy z matplotlib. –
Daje to bardzo dziwne wyniki. Zmienia on kleszcze [0, 2, 4, 8, 10] na [0.0, 1.5, 3.0, 4.5, 7.5, 9.0, 10.5]. Biorąc pod uwagę to, co [docs] (http://matplotlib.org/api/ticker_api.html#matplotlib.ticker.MaxNLocator) mówią, że to nie powinno się zdarzyć. – Annan