xticks python matplotlib plot

python - xticks - matplotlib title



Matplotlib: ¿Cómo forzar las etiquetas de ticks enteros? (2)

En base a una respuesta para modificar las etiquetas de tick, se me ocurrió una solución, no sé si funcionará en su caso ya que su fragmento de código no se puede ejecutar en sí mismo.

La idea es forzar a las etiquetas de marca a un espaciado de .5, luego reemplazar cada marca de .5 con su contraparte de entero, y otras con una cadena vacía.

import numpy import matplotlib.pyplot as plt fig, (ax1, ax2) = plt.subplots(1,2) x1, x2 = 1, 5 y1, y2 = 3, 7 # first axis: ticks spaced at 0.5 ax1.plot([x1, x2], [y1, y2]) ax1.set_xticks(numpy.arange(x1-1, x2+1, 0.5)) ax1.set_yticks(numpy.arange(y1-1, y2+1, 0.5)) # second axis: tick labels will be replaced ax2.plot([x1, x2], [y1, y2]) ax2.set_xticks(numpy.arange(x1-1, x2+1, 0.5)) ax2.set_yticks(numpy.arange(y1-1, y2+1, 0.5)) # We need to draw the canvas, otherwise the labels won''t be positioned and # won''t have values yet. fig.canvas.draw() # new x ticks ''1''->'''', ''1.5''->''1'', ''2''->'''', ''2.5''->''2'' etc. labels = [item.get_text() for item in ax2.get_xticklabels()] new_labels = [ "%d" % int(float(l)) if ''.5'' in l else '''' for l in labels] ax2.set_xticklabels(new_labels) # new y ticks labels = [item.get_text() for item in ax2.get_yticklabels()] new_labels = [ "%d" % int(float(l)) if ''.5'' in l else '''' for l in labels] ax2.set_yticklabels(new_labels) fig.canvas.draw() plt.show()

Si quieres alejarte mucho, necesitarás un poco de cuidado extra, ya que este produce un conjunto muy denso de etiquetas de tick.

Mi script en Python usa matplotlib para trazar un "mapa de calor" 2D de un conjunto de datos x, y, z. Mis valores de x e y representan residuos de aminoácidos en una proteína y, por lo tanto, solo pueden ser números enteros. Cuando me acerco a la trama, se ve así:

Como dije, los valores flotantes en los ejes xy no tienen sentido con mis datos y, por lo tanto, quiero que se vea así:

¿Alguna idea de cómo lograr esto? Este es el código que genera la trama:

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()