Baro sklypas Matplotlib mieste
Juostinė diagrama arba juostinė diagrama yra diagrama, vaizduojanti duomenų kategoriją su stačiakampėmis juostomis, kurių ilgis ir aukštis yra proporcingi jų atstovaujamoms reikšmėms. Juostos diagramos gali būti braižomos horizontaliai arba vertikaliai. Juostinė diagrama apibūdina atskirų kategorijų palyginimus. Viena iš diagramos ašių žymi konkrečias lyginamąsias kategorijas, o kita ašis – tas kategorijas atitinkančias išmatuotas vertes.
Baro sklypo kūrimas
The matplotlib API programoje Python suteikia bar() funkciją, kurią galima naudoti naudojant MATLAB stilių arba kaip į objektą orientuotą API. Funkcijos bar() sintaksė, kuri bus naudojama su ašimis, yra tokia:
plt.bar(x, height, width, bottom, align)
Funkcija sukuria juostos diagramą, apribotą stačiakampiu, priklausomai nuo pateiktų parametrų. Toliau pateikiamas paprastas juostos diagramos pavyzdys, kuris parodo studentų, įtrauktų į skirtingus instituto kursus, skaičių.
Python3
import> numpy as np> import> matplotlib.pyplot as plt> > # creating the dataset> data> => {> 'C'> :> 20> ,> 'C++'> :> 15> ,> 'Java'> :> 30> ,> > 'Python'> :> 35> }> courses> => list> (data.keys())> values> => list> (data.values())> > fig> => plt.figure(figsize> => (> 10> ,> 5> ))> # creating the bar plot> plt.bar(courses, values, color> => 'maroon'> ,> > width> => 0.4> )> plt.xlabel(> 'Courses offered'> )> plt.ylabel(> 'No. of students enrolled'> )> plt.title(> 'Students enrolled in different courses'> )> plt.show()> |
Išvestis-
Čia plt.bar(kursai, reikšmės, spalva='maroon') naudojamas norint nurodyti, kad juostinė diagrama turi būti braižoma naudojant kursų stulpelį kaip X ašį, o reikšmes kaip Y ašį. Spalvos atributas naudojamas juostų spalvai nustatyti (šiuo atveju kaštoninė).plt.xlabel (siūlomi kursai) ir plt.ylabel (užsiregistravę studentai) naudojami atitinkamoms axes.plt.title() žymėti. Padaryti pavadinimą graph.plt.show() naudojamas norint parodyti grafiką kaip išvestį naudojant ankstesnes komandas.
Baro sklypo pritaikymas
Python3
import> pandas as pd> from> matplotlib> import> pyplot as plt> # Read CSV into pandas> data> => pd.read_csv(r> 'cars.csv'> )> data.head()> df> => pd.DataFrame(data)> name> => df[> 'car'> ].head(> 12> )> price> => df[> 'price'> ].head(> 12> )> # Figure Size> fig> => plt.figure(figsize> => (> 10> ,> 7> ))> # Horizontal Bar Plot> plt.bar(name[> 0> :> 10> ], price[> 0> :> 10> ])> # Show Plot> plt.show()> |
Išvestis:
Aukščiau pateiktoje juostinėje diagramoje pastebėta, kad X ašies žymės persidengia viena su kita, todėl to negalima tinkamai matyti. Taigi, sukant X ašies žymes, tai gali būti aiškiai matoma. Štai kodėl reikia pritaikyti juostines diagramas.
Python3
import> pandas as pd> from> matplotlib> import> pyplot as plt> # Read CSV into pandas> data> => pd.read_csv(r> 'cars.csv'> )> data.head()> df> => pd.DataFrame(data)> name> => df[> 'car'> ].head(> 12> )> price> => df[> 'price'> ].head(> 12> )> # Figure Size> fig, ax> => plt.subplots(figsize> => (> 16> ,> 9> ))> # Horizontal Bar Plot> ax.barh(name, price)> # Remove axes splines> for> s> in> [> 'top'> ,> 'bottom'> ,> 'left'> ,> 'right'> ]:> > ax.spines[s].set_visible(> False> )> # Remove x, y Ticks> ax.xaxis.set_ticks_position(> 'none'> )> ax.yaxis.set_ticks_position(> 'none'> )> # Add padding between axes and labels> ax.xaxis.set_tick_params(pad> => 5> )> ax.yaxis.set_tick_params(pad> => 10> )> # Add x, y gridlines> ax.grid(b> => True> , color> => 'grey'> ,> > linestyle> => '-.'> , linewidth> => 0.5> ,> > alpha> => 0.2> )> # Show top values> ax.invert_yaxis()> # Add annotation to bars> for> i> in> ax.patches:> > plt.text(i.get_width()> +> 0.2> , i.get_y()> +> 0.5> ,> > str> (> round> ((i.get_width()),> 2> )),> > fontsize> => 10> , fontweight> => 'bold'> ,> > color> => 'grey'> )> # Add Plot Title> ax.set_title(> 'Sports car and their price in crore'> ,> > loc> => 'left'> , )> # Add Text watermark> fig.text(> 0.9> ,> 0.15> ,> 'Jeeteshgavande30'> , fontsize> => 12> ,> > color> => 'grey'> , ha> => 'right'> , va> => 'bottom'> ,> > alpha> => 0.7> )> # Show Plot> plt.show()> |
Išvestis:
Yra daug daugiau pritaikymų barų sklypams.
Keli barų sklypai
Kai keičiamas vienas kintamasis, duomenų rinkinį reikia palyginti, naudojami keli stulpeliai. Galime lengvai konvertuoti ją į sukrautą srities juostinę diagramą, kurioje kiekvienas pogrupis rodomas po vieną ant kitų. Jį galima nubraižyti keičiant strypų storį ir padėtį. Toliau pateiktoje juostinėje diagramoje parodytas inžinerijos šakos išlaikytų studentų skaičius:
Python3
import> numpy as np> import> matplotlib.pyplot as plt> # set width of bar> barWidth> => 0.25> fig> => plt.subplots(figsize> => (> 12> ,> 8> ))> # set height of bar> IT> => [> 12> ,> 30> ,> 1> ,> 8> ,> 22> ]> ECE> => [> 28> ,> 6> ,> 16> ,> 5> ,> 10> ]> CSE> => [> 29> ,> 3> ,> 24> ,> 25> ,> 17> ]> # Set position of bar on X axis> br1> => np.arange(> len> (IT))> br2> => [x> +> barWidth> for> x> in> br1]> br3> => [x> +> barWidth> for> x> in> br2]> # Make the plot> plt.bar(br1, IT, color> => 'r'> , width> => barWidth,> > edgecolor> => 'grey'> , label> => 'IT'> )> plt.bar(br2, ECE, color> => 'g'> , width> => barWidth,> > edgecolor> => 'grey'> , label> => 'ECE'> )> plt.bar(br3, CSE, color> => 'b'> , width> => barWidth,> > edgecolor> => 'grey'> , label> => 'CSE'> )> # Adding Xticks> plt.xlabel(> 'Branch'> , fontweight> => 'bold'> , fontsize> => 15> )> plt.ylabel(> 'Students passed'> , fontweight> => 'bold'> , fontsize> => 15> )> plt.xticks([r> +> barWidth> for> r> in> range> (> len> (IT))],> > [> '2015'> ,> '2016'> ,> '2017'> ,> '2018'> ,> '2019'> ])> plt.legend()> plt.show()> |
Išvestis:
Sukrautas baro sklypas
Sukrauti juostų diagramos vaizduoja skirtingas grupes viena ant kitos. Juostos aukštis priklauso nuo gauto grupių rezultatų derinio aukščio. Jis pereina nuo apačios prie vertės, o ne nuo nulio iki vertės. Toliau pateiktas juostos brėžinys parodo berniukų ir mergaičių indėlį į komandą.
Python3
import> numpy as np> import> matplotlib.pyplot as plt> N> => 5> boys> => (> 20> ,> 35> ,> 30> ,> 35> ,> 27> )> girls> => (> 25> ,> 32> ,> 34> ,> 20> ,> 25> )> boyStd> => (> 2> ,> 3> ,> 4> ,> 1> ,> 2> )> girlStd> => (> 3> ,> 5> ,> 2> ,> 3> ,> 3> )> ind> => np.arange(N)> width> => 0.35> fig> => plt.subplots(figsize> => (> 10> ,> 7> ))> p1> => plt.bar(ind, boys, width, yerr> => boyStd)> p2> => plt.bar(ind, girls, width,> > bottom> => boys, yerr> => girlStd)> plt.ylabel(> 'Contribution'> )> plt.title(> 'Contribution by the teams'> )> plt.xticks(ind, (> 'T1'> ,> 'T2'> ,> 'T3'> ,> 'T4'> ,> 'T5'> ))> plt.yticks(np.arange(> 0> ,> 81> ,> 10> ))> plt.legend((p1[> 0> ], p2[> 0> ]), (> 'boys'> ,> 'girls'> ))> plt.show()> |
Išvestis-