Matplotlib daje duże możliwości edycji stylów wykresów, od edycji pojedynczych elementów do tworzenia formatu, który może być używany przez wszystkie wykresy. Przejdziemy po kolei przez zbiór tych edycji co pozwoli każdemu z was na dostosowanie „look and feel” do swoich potrzeb. Co ciekawe można stworzyć styl odpowiadający twojej firmie.
1 – Wstęp
W artykule o wykresach matplotlib mówiliśmy o tym jak tworzyć wykresu. Teraz skupimy się na edycji ich wyglądu, takiego jak kolor, sposób rysowania linii czy dodawanie tekstu.
Zaczynamy od wczytania bibliotek i danych które będziemy wizualizować.
%matplotlib inline import matplotlib import matplotlib.pyplot as plt import pandas as pd df = pd.read_csv(r'https://analityk.edu.pl/wp-content/uploads/2020/12/data.csv') df['date'] = pd.to_datetime(df.date, format='%d/%m/%Y') x=df['date'] y=df['Close']
narysujmy najprostszy wykres i zacznijmy go edytować:
plt.plot(x,y)
2 – Style i edycja
Pierwszym elementem będzie zmiana kolory i typu linii. Jak może pamiętacie, zaczynając rysowanie wykresy tworzymy sobie jego figurę oraz axes (czyli reprezentacje wykresu). Wywołamy następnie metodę plot, po czym wy edytujemy kolejne parametry. Może to wydawać się z początku nie intuicyjne, dlaczego najpierw wywołujemy „plot” a dopiero potem edytujemy. Pamiętajmy, że plot tworzy nam wykres w pamięci a rysuje go dopiero po zakończeniu pracy. Dzięki czemu dostosowujemy jego parametry już po stworzeniu i otrzymujemy oczekiwany wynik.
# zmiana koloru i stylu fig, ax = plt.subplots(figsize=(10,8)) res = ax.plot(x, y) line = res[0] # dzięki temu możemy korzystać z autouzupełniania line.set_c('#d1371f') line.set_linestyle('dashed')
metoda:
- set_c – pozwala na ustawienie koloru w tym przypadku podajemy go w formie kodu HEX,
- set_linestyle – ustawia nam rodzaj wyświetlania linii (’-’, ’–’, ’-.’, ’:’, 'None’, ’ ’, ”, 'solid’, 'dashed’, 'dashdot’, 'dotted’)
Dodajmy teraz tytuł robimy to za pomocą wywołania na obiekcie „AX” metody set_title
# Ustawienie tytułu title = ax.set_title('Bitcoin Pricing')
Tytuł nie musi być usytuowany na samej górze, możemy go przemieszczać w bardzo prosty sposób. Podając dokładną pozycję lub procent od wysokości i szerokości. W tym wypadku wydłużyliśmy też wykres ustawiając figsize na 10,3
fig, ax = plt.subplots(figsize=(10,3)) res = ax.plot(x, y) line = res[0] line.set_c('#d1371f') line.set_linestyle('dashed') title = ax.set_title('Bitcoin Pricing') title.set_position((.2,.7)) #.20% 70%
3 – Edycja Osi wykresu
Ważnym elementem każdego wykresu są jego osie. Zarówno ich widoczność jak i odstępy. W bibliotece matplotlib możemy ustawić poszczególne „ticks” na każdej z osi. Robimy to za pomocą metody „set ticks”. W tym przypadku na osi Y dodamy pozycje -50,500,200,5000,40000. Pozwoli nam to lepiej zrozumieć wykres.
yax = ax.get_yaxis() yax.set_ticks([-50, 500, 2000, 5000, 40000])
W kolejnym etapie, mamy możliwość usunięcia zbędnych osi za pomocą wykorzystania metody „set_visible” na elemencie spine.
yax = ax.get_yaxis() yax.set_ticks([-50, 500, 2000, 5000, 40000]) ax.spines['right'].set_visible(False) ax.spines['top'].set_visible(False)
Natomiast, aby wy edytować zakres osi zamiast podając kolejne „ticks” możemy podać zakres wykresu który chcemy zobaczyć i zostanie on nam przybliżony za pomocą ustawienia parametry „ylim”.
fig, ax = plt.subplots(figsize=(10,8)) res = ax.plot(x, y) plt.ylim(0,1000)
Oprócz tytuł czy edycji osi możemy dodawać tekst na wykresie w odpowiednich miejscach.
fig, ax = plt.subplots(figsize=(10,8)) res = ax.plot(x, y) ax.text(ax.get_xlim()[0], 2100, 'Bitcoin', clip_on=True)
Możemy również dostosować ten mało widoczny tekst otrzymany bez podawania parametrów. Podajmy do metody „ax.text”, kolejne parametry takie jak umiejscowienie na wykresie, text, czcionkę, rozmiar czy wręcz tło „boxa” w który pisany jest tekst.
# Dostosuj parametry fig, ax = plt.subplots(figsize=(10,8)) res = ax.plot(x, y) ax.text(ax.get_xlim()[0], 2100, 'Bitcoin', clip_on=True, family='Comic Sans MS', size=20) ax.text(ax.get_xlim()[0], 5700, 'Bitcoin', clip_on=True, family='Serif', size=20, style='italic', bbox={'facecolor': 'red', 'alpha': .5})
4 – Wbudowane style
Matplotlib ma również możliwość korzystania z wbudowanych znanych wszystkim styli. Jednym z nich jest ggplot, często używany przy analizie danych w programie matlab. Wywodzi się z niego sama biblioteka, stąd też jej nazwa matplotlib.
# zmiana stylu zmienia sposób wyświetlania dla wszystkich kolejnych wywołań rysowania wykresów plt.style.use('ggplot') fig, ax = plt.subplots(figsize=(10,8)) res = ax.plot(x, y)
5 – Podsumowanie
Nie są to oczywiście wszystkie możliwości biblioteki, ale dają spory wgląd w to jak następuję edycja kolejnych części wykresu. Także jeśli chcecie zaskoczyć swojego odbiorcę dobrze wystylizowany wykresem, matplotlib służy pomocą. Oto lista wszystkich dostępnych stylów w podstawowym jej wydaniu:
print(plt.style.available)
[’Solarize_Light2′, '_classic_test_patch’, 'bmh’, 'classic’, 'dark_background’, 'fast’, 'fivethirtyeight’, 'ggplot’, 'grayscale’, 'seaborn’, 'seaborn-bright’, 'seaborn-colorblind’, 'seaborn-dark’, 'seaborn-dark-palette’, 'seaborn-darkgrid’, 'seaborn-deep’, 'seaborn-muted’, 'seaborn-notebook’, 'seaborn-paper’, 'seaborn-pastel’, 'seaborn-poster’, 'seaborn-talk’, 'seaborn-ticks’, 'seaborn-white’, 'seaborn-whitegrid’, 'tableau-colorblind10′]
Na koniec zobaczcie jak można tworzyć pojedynczy wykres w konkretnym stylu bez potrzeby zmieniania go dla wszystkich wykresów.
with plt.style.context('dark_background'): fig,ax = plt.subplots(figsize=(10,8)) ax.plot(x,y, linestyle='dotted', linewidth=3)
wystarczy wszystkie metody rysowania wstawić w operacje „with plt.style.context”
powyższy kod do znalezienia na naszym githubie w repozytorium matplotlib