Cambie el intervalo de la cuadrícula y especifique las tags de tick en Matplotlib

Estoy tratando de trazar los recuentos en plots cuadriculadas, pero no puedo averiguar cómo lo hago. Quiero:

  1. Tener rejillas punteadas en un intervalo de 5.

  2. Tener tags de marcas importantes solo cada 20

  3. Quiero que las garrapatas estén fuera de la ttwig.

  4. Tienen “cuentas” dentro de esas grillas

He comprobado posibles duplicados como aquí y aquí , pero no he podido averiguarlo.

Este es mi código.

import matplotlib.pyplot as plt from matplotlib.ticker import MultipleLocator, FormatStrFormatter for key, value in sorted(data.items()): x = value[0][2] y = value[0][3] count = value[0][4] fig = plt.figure() ax = fig.add_subplot(111) ax.annotate(count, xy = (x, y), size = 5) # Overwrites and I only get the last data point plt.close() # Without this, I get "fail to allocate bitmap" error plt.suptitle('Number of counts', fontsize = 12) ax.set_xlabel('x') ax.set_ylabel('y') plt.axes().set_aspect('equal') plt.axis([0, 1000, 0, 1000]) # This gives an interval of 200 majorLocator = MultipleLocator(20) majorFormatter = FormatStrFormatter('%d') minorLocator = MultipleLocator(5) # I want minor grid to be 5 and major grid to be 20 plt.grid() filename = 'C:\Users\Owl\Desktop\Plot.png' plt.savefig(filename, dpi = 150) plt.close() 

Esto es lo que obtengo.

Esto es lo que obtengo.

También tengo un problema de sobrescribir los puntos de datos, con los que también tengo problemas … ¿Alguien me puede ayudar con este problema?

Hay varios problemas en su código.

Primero los grandes:

  1. Está creando una nueva figura y un nuevo eje en cada iteración de su bucle → put fig = plt.figure and ax = fig.add_subplot(1,1,1) fuera del bucle.

  2. No uses los localizadores. Llame a las funciones ax.set_xticks() y ax.grid() con las palabras clave correctas.

  3. Con plt.axes() estás creando un nuevo eje de nuevo. Utilice ax.set_aspect('equal') .

Las cosas menores: no debe mezclar la syntax similar a plt.axis() como plt.axis() con la syntax objetiva. Utilice ax.set_xlim(a,b) y ax.set_ylim(a,b)

Este debería ser un ejemplo mínimo de trabajo:

 import numpy as np import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(1, 1, 1) # Major ticks every 20, minor ticks every 5 major_ticks = np.arange(0, 101, 20) minor_ticks = np.arange(0, 101, 5) ax.set_xticks(major_ticks) ax.set_xticks(minor_ticks, minor=True) ax.set_yticks(major_ticks) ax.set_yticks(minor_ticks, minor=True) # And a corresponding grid ax.grid(which='both') # Or if you want different settings for the grids: ax.grid(which='minor', alpha=0.2) ax.grid(which='major', alpha=0.5) plt.show() 

La salida es esta:

Salida Ålot