Merhabalar,
Bu yazımda, PYTHON İLE VERİ GÖRSELLEŞTİRME yazımda değindiğim subplot konusunu ele alacağım. Subplot; satır veya sütunda bir veya daha çok grafiği çizdirmemizi sağlayan bir grafik türüdür. Bu grafikler aynı tür ve boyutta olabileceği gibi farklı tür ve boyutlarda da olabilir. Kullanıcının istediği tasarımı verebilmesi ve verinin hikayesini daha akıcı bir şekilde anlatabilmesi nedeniyle oldukça kullanışlıdır.
Farklı subplotlar göstermek için araştırma yaparken, çok kolay bir şekilde istediğiniz tasarımı oluşturmayı sağlayan bir fonksiyon ile karşılaştım. Bu fonksiyon matplotlib kütüphanesinden subplot_mosaic. Sizlere bu fonksiyonu anlatabilmek ve çeşitli grafik türlerini tek bir figure altında nasıl oluşturabileceğinizi göstermek amacıyla bir veri seti oluşturdum. Veri setinin amacı görselleştirme çalışması olduğu için lütfen anlam çıkarmaya çalışmayın:)
Kodların anlamlarını tek tek açıklayacağım. En sonda ise hepsini birleştireceğim. Buraya tıklayarak kodun nihai haline gidebilirsiniz.
Bir grafik türünü birçok kütüphaneden oluşturabileceğinizi ve grafiği oluşturmak için yazdığım bazı kodları, kullandığınız kütüphanenin bunu otomatik olarak yapması nedeniyle yapmak zorunda kalmayacağınızı bilerek okumanızı tavsiye ederim.
Her şeyi açıkladıysak, kullandığımız kütüphaneleri import ederek başlayalım.
import pandas as pd import numpy as np import matplotlib.pyplot as plt
np.random.seed(24) kategori=["A","B","C","D","E","F","G","H","I","J","K"] pozisyon=["yönetmen","yönetmen yardımcısı","uzman","uzman yardımcısı","direktör","bölüm yöneticisi"] cinsiyet=["Erkek","Kadın"] time_series=pd.DataFrame() time_series["Tarih"]=pd.date_range(start="2022-01-01",end="2022-10-20") time_series["kategori"]=[kategori[np.random.randint(len(kategori))] for i in range(time_series.shape[0])] time_series["Satislar"]=[np.random.randint(25000,100000) for i in range(time_series.shape[0])] time_series["pozisyon"]=[pozisyon[np.random.randint(len(pozisyon))] for i in range(time_series.shape[0])] time_series["yas"]=[np.random.randint(24,65) for i in range(time_series.shape[0])] time_series["satislarx2"]=time_series["Satislar"]*2 time_series["cinsiyet"]=[cinsiyet[np.random.randint(len(cinsiyet))] for i in range(time_series.shape[0])] time_series.head()
bar_plot=time_series.groupby("kategori")["Satislar"].sum().reset_index() bar_plot.head()
pie_plot=time_series.groupby("pozisyon")["Satislar"].sum().reset_index() pie_plot.head()
stacked_bar_chart=pd.pivot_table(index="pozisyon",columns="cinsiyet",values="Satislar",data=time_series) stacked_bar_chart.head()
grouped_bar_chart=pd.pivot_table(index="kategori",columns="cinsiyet",values="Satislar",data=time_series) grouped_bar_chart.head()
mosaic=""" ABBCD AEEEE AFFGG """
axd=plt.figure(constrained_layout=True,figsize=(18,8)).subplot_mosaic(mosaic)
grouped_bar_chart.plot.barh(ax=axd["A"]) axd["B"].bar(stacked_bar_chart.index, stacked_bar_chart["Erkek"], label='Men') axd["B"].bar(stacked_bar_chart.index, stacked_bar_chart["Kadın"],bottom=stacked_bar_chart["Erkek"],label='Women') axd["B"].tick_params(axis='x', rotation=45) axd["B"].set(xticks=[0,2,4]) axd["B"].legend(loc='best', bbox_to_anchor=(0.5, 1, 0., 0.5)) axd["C"].scatter(time_series["satislarx2"],time_series["Satislar"],color="blue") axd["D"].hist(time_series["Satislar"],color="red") axd["E"].plot(time_series["Tarih"],time_series["Satislar"],color="orange") axd["E"].tick_params(axis='x', rotation=45) axd["F"].pie(pie_plot["Satislar"],labels=pie_plot["pozisyon"]) axd["G"].bar(bar_plot["kategori"],bar_plot["Satislar"],color="green") plt.savefig("subplot_mosaic.png") plt.show()
import pandas as pd import numpy as np import matplotlib.pyplot as plt np.random.seed(24) kategori=["A","B","C","D","E","F","G","H","I","J","K"] pozisyon=["yönetmen","yönetmen yardımcısı","uzman","uzman yardımcısı","direktör","bölüm yöneticisi"] cinsiyet=["Erkek","Kadın"] time_series=pd.DataFrame() time_series["Tarih"]=pd.date_range(start="2022-01-01",end="2022-10-20") time_series["kategori"]=[kategori[np.random.randint(len(kategori))] for i in range(time_series.shape[0])] time_series["Satislar"]=[np.random.randint(25000,100000) for i in range(time_series.shape[0])] time_series["pozisyon"]=[pozisyon[np.random.randint(len(pozisyon))] for i in range(time_series.shape[0])] time_series["yas"]=[np.random.randint(24,65) for i in range(time_series.shape[0])] time_series["satislarx2"]=time_series["Satislar"]*2 time_series["cinsiyet"]=[cinsiyet[np.random.randint(len(cinsiyet))] for i in range(time_series.shape[0])] bar_plot=time_series.groupby("kategori")["Satislar"].sum().reset_index() pie_plot=time_series.groupby("pozisyon")["Satislar"].sum().reset_index() stacked_bar_chart=pd.pivot_table(index="pozisyon",columns="cinsiyet",values="Satislar",data=time_series) grouped_bar_chart=pd.pivot_table(index="kategori",columns="cinsiyet",values="Satislar",data=time_series) mosaic=""" ABBCD AEEEE AFFGG """ axd=plt.figure(constrained_layout=True,figsize=(18,8)).subplot_mosaic(mosaic) grouped_bar_chart.plot.barh(ax=axd["A"]) axd["B"].bar(stacked_bar_chart.index, stacked_bar_chart["Erkek"], label='Men') axd["B"].bar(stacked_bar_chart.index, stacked_bar_chart["Kadın"],bottom=stacked_bar_chart["Erkek"],label='Women') axd["B"].tick_params(axis='x', rotation=45) axd["B"].set(xticks=[0,2,4]) axd["B"].legend(loc='best', bbox_to_anchor=(0.5, 1, 0., 0.5)) axd["C"].scatter(time_series["satislarx2"],time_series["Satislar"],color="blue") axd["D"].hist(time_series["Satislar"],color="red") axd["E"].plot(time_series["Tarih"],time_series["Satislar"],color="orange") axd["E"].tick_params(axis='x', rotation=45) axd["F"].pie(pie_plot["Satislar"],labels=pie_plot["pozisyon"]) axd["G"].bar(bar_plot["kategori"],bar_plot["Satislar"],color="green") plt.savefig("subplot_mosaic.png") plt.show()
Yorumlar
Yorum Gönder