2014-07-24 10 views
25

Próbuję wykreślić liczenia w poletkach z siatkami, ale nie jestem w stanie dowiedzieć się, jak sobie z tym poradzić. Chcę:Zmiana interwałów siatki i określanie etykiet zaznaczania w Matplotlib

  1. Czy przerywana siatek w odstępie 5

  2. mieć poważne wytwórnie zaznaczyć tylko co 20

  3. Chcę kleszcze być na zewnątrz działki.

  4. have "liczy się" wewnątrz tych siatek

Sprawdziłem dla potencjalnych duplikatów, takich jak here i here, ale nie byłem w stanie zrozumieć.

To jest mój kod.

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

To jest to, co otrzymuję.

This is what I get.

Mam też problem z zastąpieniem punkty danych, które mam też kłopoty z ... Czy ktoś proszę mi pomóc z tym problemem?

Odpowiedz

77

W kodzie jest kilka problemów.

Pierwsze te duże:

  1. Tworzysz nową postać i nowy osi w każdej iteracji pętli swojej → umieścić fig = plt.figure i ax = fig.add_subplot(1,1,1) zewnątrz pętli.

  2. Nie używaj lokalizatorów. Wywołaj funkcje ax.set_xticks() i z odpowiednimi słowami kluczowymi.

  3. Z plt.axes() tworzysz ponownie nowe osie. Użyj ax.set_aspect('equal').

Drobne rzeczy: Nie należy mieszać składni MATLAB-podobnego jak plt.axis() ze składnią obiektywnej. Zastosowanie ax.set_xlim(a,b) i ax.set_ylim(a,b)

powinna to być praca minimalna przykład:

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

wyjściowa jest taka:

Ålot output

+2

Dziękuję bardzo za odpowiedź! Rozwiązałeś moje problemy! Aby ustawić ticks na zewnątrz, musiałem po prostu dodać ax.tick_params (which = 'both', direction = 'out'). – owl

Powiązane problemy