Changer l'intervalle de grille et spécifier les étiquettes de tique dans Matplotlib

j'essaie de tracer des comptes dans des parcelles quadrillées, mais je ne suis pas en mesure de comprendre comment je m'y prends. Je veux:

  1. ont des grilles pointillées à un intervalle de 5

  2. n'ont que des étiquettes principales toutes les 20

  3. je veux que les tiques soient en dehors de l'intrigue.

  4. ont" des comptes "à l'intérieur de ces grilles

j'ai vérifié pour les duplicata potentiels tels que ici et ici , mais je n'ai pas été en mesure de le comprendre.

c'est mon code.

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:UsersOwlDesktopPlot.png'
plt.savefig(filename, dpi = 150)
plt.close()

C'est ce que j'obtiens.

This is what I get.

j'ai également un problème d'écriture sur les points de données, ce qui me pose également problème... Quelqu'un pourrait-il MERCI de m'aider avec ce problème?

40
demandé sur Peter Mortensen 2014-07-25 01:07:48

1 réponses

Il y a plusieurs problèmes dans votre code.

d'Abord le plus gros:

  1. vous créez une nouvelle figure et de nouveaux axes à chaque itération de votre boucle → mettre fig = plt.figure et ax = fig.add_subplot(1,1,1) en dehors de la boucle.

  2. N'utilisez pas les localisateurs. Appelez les fonctions ax.set_xticks() et ax.grid() avec les bons mots-clés.

  3. avec plt.axes() vous créez à nouveau de nouveaux axes. Utilisez ax.set_aspect('equal') .

les petites choses: Vous ne devez pas mélanger la syntaxe de type MATLAB comme plt.axis() avec la syntaxe objective. Utiliser ax.set_xlim(a,b) et ax.set_ylim(a,b)

ceci devrait être un exemple de fonctionnement minimal:

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

sortie:

Ålot output

105
répondu MaxNoe 2018-01-09 21:14:34