Próbuję naprawić sposób, w jaki Python drukuje moje dane.
Mówić
x = [0,5,9,10,15]
i
y = [0,1,2,3,4]
Potem zrobiłbym:
matplotlib.pyplot.plot(x,y)
matplotlib.pyplot.show()
a tyknięcia na osi x są wykreślane w odstępach 5. Czy istnieje sposób, aby pokazywał odstępy 1?
python
matplotlib
Dax Feliz
źródło
źródło
pyplot.locator_params(nbins=4)
Odpowiedzi:
Możesz jawnie ustawić miejsce, w którym chcesz zaznaczyć znaczniki
plt.xticks
:Na przykład,
(
np.arange
został użyty zamiastrange
funkcji Pythona na wszelki wypadekmin(x)
imax(x)
są zmiennoprzecinkowe zamiast ints.)Funkcja
plt.plot
(lubax.plot
) automatycznie ustawi domyślnex
iy
limity. Jeśli chcesz zachować te limity i po prostu zmienić rozmiar znaczników, możesz użyć,ax.get_xlim()
aby dowiedzieć się, jakie limity Matplotlib już ustawił.Domyślny formatyzator tików powinien wykonać przyzwoitą robotę zaokrąglając wartości tików do rozsądnej liczby cyfr znaczących. Jeśli jednak chcesz mieć większą kontrolę nad formatem, możesz zdefiniować własny formatyzator. Na przykład,
Oto możliwy do uruchomienia przykład:
źródło
+1
inplt.xticks(np.arange(min(x), max(x)+1, 1.0))
jest wymagany, aby pokazać ostatni znacznik wyboru.np.arange(start, stop)
generuje wartości w przedziale półotwartym[start, stop)
, w tym,start
ale wykluczającstop
. Więc kiedyśmax(x)+1
upewniałem się, żemax(x)
to jest uwzględnione.plt.xticks(np.arange(min(dates), max(dates)+0.1,0.1)
? wydaje się, że rysuje tylko rokInnym podejściem jest ustawienie lokalizatora osi:
Istnieje kilka różnych rodzajów lokalizatora w zależności od potrzeb.
Oto pełny przykład:
źródło
matplotlib.dates.AutoDateLocator()
base=1.0
naprawdę oznacza / robi?Podoba mi się to rozwiązanie (z Matplotlib Plotting Cookbook ):
To rozwiązanie daje ci wyraźną kontrolę odstępów między tyknięciami za pomocą podanej liczby
ticker.MultipleLocater()
, pozwala na automatyczne określenie limitu i jest łatwe do odczytania później.źródło
W przypadku, gdy ktoś jest zainteresowany ogólną linią pojedynczą, po prostu pobierz bieżące tiki i użyj go do ustawienia nowych tików, próbkując co drugi tik.
źródło
ax.set_xticks([tick for tick in ax.get_xticks() if tick % 1 == 0])
Jest to nieco zuchwałe, ale zdecydowanie najczystszy / najłatwiejszy do zrozumienia przykład, jaki to zrobiłem. Oto odpowiedź na SO tutaj:
Najczystszy sposób na ukrycie każdej n-tej etykiety kleszczowej w pasku kolorów Matplotlib?
Następnie możesz zapętlić etykiety, ustawiając je na widoczne lub nie, w zależności od żądanej gęstości.
edit: zauważ, że czasami matplotlib ustawia etykiety ==
''
, więc może wyglądać na to, że etykieta nie jest obecna, podczas gdy w rzeczywistości jest i po prostu nic nie wyświetla. Aby mieć pewność, że przeglądasz rzeczywiste widoczne etykiety, możesz spróbować:źródło
ax.get_xticklabels()[1::2]
etykiety należy ukryć.''
tak, że kiedy je zapętlasz, robisz xticklabels, które są puste niewidoczne (co nie miałoby wpływu na wizualizację, ale może oznaczać, że nie ciągniesz prawidłowe etykiety). Możesz spróbować:vis_labels = [label for label in ax.get_xticklabels() if label.get_visible() is True]; plt.setp(vis_labels[::2], visible==False)
To jest stary temat, ale od czasu do czasu potykam się o to i stworzyłem tę funkcję. To bardzo wygodne:
Jednym z ostrzeżeń związanych z kontrolowaniem taktów jest to, że nie cieszy się już interaktywną automatyczną aktualizacją maksymalnej skali po dodaniu linii. Więc zrób
i ponownie uruchom funkcję resadjust.
źródło
Opracowałem nieeleganckie rozwiązanie. Rozważ, że mamy oś X, a także listę etykiet dla każdego punktu w X.
Przykład: Powiedzmy, że chcę pokazywać etykiety z kleszczami tylko dla „feb” i „Jun” Dobrze, teraz mamy fałszywą listę etykiet. Najpierw nakreśliliśmy oryginalną wersję. Teraz zmodyfikowana wersja.źródło
jeśli chcesz tylko ustawić odstęp prostą wkładką z minimalną płytą grzewczą:
działa również łatwo w przypadku drobnych kleszczy:
trochę kęs, ale dość kompaktowy
źródło
To zadziałało dla mnie
jeśli chcesz zaznaczyć od [1,5] (od 1 do 5 włącznie), zamień
źródło
xmarks = range(1, length+1, 1)
. całkiem pewne, że lista jest zbędna.Implementacja Pure Python
Poniżej znajduje się czysta implementacja żądanej funkcjonalności w języku Python, która obsługuje dowolne szeregi liczbowe (int lub float) o wartościach dodatnich, ujemnych lub mieszanych i pozwala użytkownikowi określić żądany rozmiar kroku:
Przykładowe dane wyjściowe
Przykładowe użycie
Zauważ, że oś x ma wartości całkowite równomiernie rozmieszczone o 5, podczas gdy oś y ma inny przedział (
matplotlib
zachowanie domyślne, ponieważ tiki nie zostały określone).źródło