""" Program czytający z pliku liczbę studentów, którzy uzyskali daną ocenę i przedstawiający te dane w postaci wykresu słupkowego oraz kołowego. """ import numpy as np import matplotlib.pyplot as plt oc = np.loadtxt("oceny_liczba.txt") #Poniżej zmieniam typ danych w tablicy. W przypadku ocen #zapobiega to traktowaniu ich przez Matplotliba jako liczby #(tylko etykiety) i ustawiania słupków na wykresie w odpowiadających #im miejscach. Liczby ocen też ładniej wyglądają jako liczby całkowite. ocena = oc[:,0].astype(str) liczba = oc[:,1].astype(int) etykiety = np.array(['niedostateczny', 'dostateczny', 'dostateczny+','dobry', 'dobry+','bardzo dobry']) kolory = np.array(['black', 'red', 'orange', 'yellow', 'blue', 'green']) fig,ax = plt.subplots(1,2) ax[0].bar(ocena,liczba,label=etykiety,color=kolory,edgecolor='black') ax[0].legend() ax[0].set_title("Wykres słupkowy") ax[0].set_ylabel("Liczba osób") #Usuwam kategorie z 0 liczbą studentów, by Matplotlib nie wpychał ich #na siłę na wykres kołowy. maska = (liczba != 0) liczba = liczba[maska] kolory = kolory[maska] etykiety = etykiety[maska] ocena = ocena[maska] #Poniżej użyte np.full_like() tworzy tablicę stałych wartości (full), #o takim samym kształcie i typie co pierwszy argument (like). #Chcemy jednak inny typ, toteż użyto dtype=float. #Dzięki temu stworzona tablica ma zawsze kształt (rozmiar) dopasowany do wzorca. ax[1].pie(liczba,colors=kolory, wedgeprops={'edgecolor':'black'}, #czarne krawędzie wycinków explode= np.full_like(ocena,0.05,dtype=float), #odsunięcie wycinków od centrum wykresu, mogą być różne labels=etykiety, #etykietki na legendę autopct='%.1f%%', #automatyczne procenty (format oznacza, że mają 1 cyfrę po przecinku) pctdistance=1.25, #odległość tekstu z procentami od centrum labeldistance=0.6, #odległość tekstu z etykietkami od centrum shadow=True, #cień pod wykresem startangle=105, #kąt pod jakim znajduje się początek wykresu (przeciwnie do ruchu zegara) textprops = {"color" : "#810098","backgroundcolor" : "lightgray", #właściwości tekstu na wykresie "size" : 12, "weight" : "bold", "ha" : "center"}) #centruje etykietki horyzontalnie ax[1].set_title("Diagram kołowy") fig.suptitle("Oceny z przedmiotu") plt.show()