Ana içeriğe atla

Matplotlib'de Histogramlar

Histogramlar hakkında bilgi edinin ve matplotlib yardımıyla verilerden nasıl içgörü elde edebileceğinizi keşfedin.
Güncel 3 Eki 2026  · 8 dk. oku

Yapay Zeka ile Keşfedin

ChatGPTClaudePerplexity

Giriş

Vikipedi’ye göre, histogram sayısal verilerin dağılımının doğru bir grafiksel temsilidir. Sürekli bir değişkenin (nicel değişken) olasılık dağılımının bir tahminidir ve ilk olarak Karl Pearson tarafından tanıtılmıştır. Bir tür çubuk grafiktir. Bir histogram oluşturmanın ilk adımı, değer aralığını “bin” olarak adlandırılan bölümlere ayırmaktır — yani, tüm değer aralığını bir dizi aralığa bölmek —  ve ardından her aralığa kaç değerin düştüğünü saymaktır. Binler genellikle bir değişkenin art arda gelen, çakışmayan aralıkları olarak belirlenir. Binler (aralıklar) bitişik olmalı ve çoğunlukla eşit boyutludur (ancak eşit olmak zorunda değildir).

Sayısal verilerin yanı sıra, histogramlar görüntülerin dağılımını görselleştirmek için de kullanılabilir; çünkü görüntüler, $0$ ile $255$ arasında değişen resim öğelerinin (piksel) bir birleşiminden ibarettir. Histogramın x ekseni bin sayısını, y ekseni ise belirli bir binin frekansını gösterir. Bin sayısı, verinizin dağılımını nasıl görselleştirmek istediğinize bağlı olarak değiştirilebilen bir parametredir.

Örneğin: Piksel değerleri $0$ ile $255$ arasında olan bir RGB görüntünün histogramını çizmek istediğinizi varsayalım. Bu görüntünün sahip olabileceği maksimum bin sayısı $255$’tir. x_axis (bin sayısı) değerini $255$ tutarsanız, y_axis o görüntüdeki her pikselin frekansını gösterecektir.

Histogramlar, özünde bar grafikleriyle benzerdir; bir histogramın görsel bir örneğine bakalım:

Histogram, sayısal verilerin veya neredeyse herkes tarafından sezgisel olarak anlaşılan görüntü verilerinin olasılıksal dağılımını görselleştirmek ve anlamak için mükemmel bir araçtır. Python’da histogram oluşturmak ve çizmek için pek çok farklı seçenek vardır. Python’da grafik oluşturmak için yerleşik birkaç kütüphane bulunur ve bunlardan biri de matplotlib’tir.

Bugünkü derste, çeşitli veri setlerinde histogram oluşturmak ve görselleştirmek için çoğunlukla matplotlib kullanacaksınız.

O halde daha fazla zaman kaybetmeden başlayalım.

NumPy ve Matplotlib Kullanarak Histogram Çizimi

import numpy as np

Tekrarlanabilirlik için, her çalıştırmada aynı çıktıyı verecek numPy’nin seed fonksiyonunu kullanacaksınız.

Ortalaması $0$ ve standart sapması $1$ olan bir gauss (normal) dağılımının histogramını çizeceksiniz.

np.random.seed(100)
np_hist = np.random.normal(loc=0, scale=1, size=1000)
np_hist[:10]
array([-1.74976547,  0.3426804 ,  1.1530358 , -0.25243604,  0.98132079,
        0.51421884,  0.22117967, -1.07004333, -0.18949583,  0.25500144])

Yukarıdaki dağılımın ortalamasını ve standart sapmasını doğrulayalım.

np_hist.mean(),np_hist.std()
(-0.016772157343909157, 1.0458427194167)

Sonraki adımda, numPy’nin histogram fonksiyonunu kullanacak ve bu fonksiyon hist ile bin_edges değerlerini döndürecektir.

hist,bin_edges = np.histogram(np_hist)
hist
array([  7,  37, 111, 207, 275, 213, 105,  31,  10,   4])
bin_edges
array([-3.20995538, -2.50316588, -1.79637637, -1.08958687, -0.38279736,
        0.32399215,  1.03078165,  1.73757116,  2.44436066,  3.15115017,
        3.85793967])

Şimdi, matplotlib’in plt.bar fonksiyonunu kullanarak histogramı çizelim; burada x ekseniniz ve y ekseniniz sırasıyla bin_edges ve hist olacaktır.

import matplotlib.pyplot as plt
%matplotlib inline
plt.figure(figsize=[10,8])

plt.bar(bin_edges[:-1], hist, width = 0.5, color='#0504aa',alpha=0.7)
plt.xlim(min(bin_edges), max(bin_edges))
plt.grid(axis='y', alpha=0.75)
plt.xlabel('Değer',fontsize=15)
plt.ylabel('Frekans',fontsize=15)
plt.xticks(fontsize=15)
plt.yticks(fontsize=15)
plt.ylabel('Frekans',fontsize=15)
plt.title('Normal Dağılım Histogramı',fontsize=15)
plt.show()

bin_edges değerlerini tam sayıya yuvarlayalım.

bin_edges = np.round(bin_edges,0)
plt.figure(figsize=[10,8])

plt.bar(bin_edges[:-1], hist, width = 0.5, color='#0504aa',alpha=0.7)
plt.xlim(min(bin_edges), max(bin_edges))
plt.grid(axis='y', alpha=0.75)
plt.xlabel('Değer',fontsize=15)
plt.ylabel('Frekans',fontsize=15)
plt.xticks(fontsize=15)
plt.yticks(fontsize=15)
plt.ylabel('Frekans',fontsize=15)
plt.title('Normal Dağılım Histogramı',fontsize=15)
plt.show()

Şimdi grafik çok daha iyi görünüyor, değil mi?

hist ve bin_edges kavramlarını anlamak için bir örneğe bakalım:

Rastgele değerlerden oluşan bir dizi tanımlayacak ve binleri $5$ aralığa göre belirleyeceksiniz.

hist, bin_edges = np.histogram([1, 1, 2, 2, 2, 2, 3],bins=range(5))
hist
array([0, 2, 4, 1])

Yukarıdaki çıktıda, hist değeri bin $0$’da $0$, bin $1$’de $2$, bin $3$’te $4$, bin $4$’te $1$ öğe olduğunu gösterir.

bin_edges
array([0, 1, 2, 3, 4])

Benzer şekilde, yukarıdaki bin_edges çıktısı, bin $0$’ın $[0,1)$ aralığında, bin $1$’in $[1,2)$ aralığında, bin $2$’nin $[2,3)$ aralığında, bin $3$’ün ise $[3,4)$ aralığında olduğunu ifade eder.

Yalnızca Matplotlib Kullanarak Histogram Çizimi

matplotlib kullanarak histogram çizmek çocuk oyuncağıdır. Yapmanız gereken tek şey, matplotlib’in plt.hist() fonksiyonunu kullanmak ve verileri bin sayısıyla birlikte birkaç isteğe bağlı parametreyle geçmektir.

plt.hist() içinde bins='auto' vermek size “ideal” bin sayısını sağlar. Amaç, verinizin en doğru temsilini üretecek bin genişliğini seçmektir.

Hepsi bu. Öyleyse, numpy kullanarak oluşturduğunuz normal_distribution histogramını çizelim.

plt.figure(figsize=[10,8])
n, bins, patches = plt.hist(x=np_hist, bins=8, color='#0504aa',alpha=0.7, rwidth=0.85)
plt.grid(axis='y', alpha=0.75)
plt.xlabel('Değer',fontsize=15)
plt.ylabel('Frekans',fontsize=15)
plt.xticks(fontsize=15)
plt.yticks(fontsize=15)
plt.ylabel('Frekans',fontsize=15)
plt.title('Normal Dağılım Histogramı',fontsize=15)
plt.show()

İki histogramı birlikte çizmek

plt.figure(figsize=[10,8])
x = 0.3*np.random.randn(1000)
y = 0.3*np.random.randn(1000)
n, bins, patches = plt.hist([x, y])

Pandas Kullanarak Iris Verisinin Histogramını Çizmek

sklearn kullanarak iris adlı bir veri setini yükleyeceksiniz. sklearn içinde, anında yüklenebilen Iris veri setine sahip datasets adlı bir kütüphane vardır. Hadi, iris veri setini hızlıca yükleyelim.

from sklearn.datasets import load_iris
import pandas as pd
data = load_iris().data
names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width']

Sonrasında, iris veri setinin dataframe’ini oluşturacaksınız.

dataset = pd.DataFrame(data,columns=names)
dataset.head()
  sepal-length sepal-width petal-length petal-width
0 5.1 3.5 1.4 0.2
1 4.9 3.0 1.4 0.2
2 4.7 3.2 1.3 0.2
3 4.6 3.1 1.5 0.2
4 5.0 3.6 1.4 0.2
dataset.columns[0]
'sepal-length'

Son olarak, veri setinde bulunan tüm özellikler için histogramlar çizecek pandas yerleşik .hist() fonksiyonunu kullanacaksınız.

Harika değil mi?

fig = plt.figure(figsize = (8,8))
ax = fig.gca()
dataset.hist(ax=ax)
plt.show()

Petal-length, petal-width ve sepal-length tek tepeli (unimodal) bir dağılım gösterirken, sepal-width Gauss eğrisini yansıtır. Bunların tümü faydalı analizlerdir; çünkü bu tür dağılımlarla iyi çalışan bir algoritma kullanmayı düşünebilirsiniz.

Matplotlib ile Histogram Çizimi

plt.figure(figsize=[10,10])
f,a = plt.subplots(2,2)
a = a.ravel()
for idx,ax in enumerate(a):
    ax.hist(dataset.iloc[:,idx], bins='auto', color='#0504aa',alpha=0.7, rwidth=0.85)
    ax.set_title(dataset.columns[idx])
plt.tight_layout()
<Figure size 720x720 with 0 Axes>

İkili ve RGB Görüntülerin Histogramını Çizmek

Dersin son bölümünde, iki farklı alanın görüntülerini görselleştireceksiniz: ikili (belge) ve doğal görüntüler. İkili görüntüler, piksel değerleri çoğunlukla $0$ veya $255$ olan görüntülerdir; renk kanalına sahip bir görüntüde ise piksel değerleri $0$ ile $255$ arasında herhangi bir yerde olabilir.

Bir görüntünün parlaklık değerlerinin histogramını çizerek piksel dağılımını analiz etmek, belirli bir görüntü için her pikselin görülme sıklığını ölçmenin doğru yoludur. 8 bit gri tonlamalı bir görüntü için 256 olası parlaklık değeri vardır. Dolayısıyla, piksel dağılımı alanında belge ve doğal görüntüler arasındaki farkı incelemek için her biri belge ve doğal görüntüye ait olmak üzere iki histogram çizeceksiniz. Okunabilir belgelerin seyrek yapıda olduğunu göz önünde bulundurarak, bu belge görüntülerindeki piksel dağılımının çoğunlukla çarpık olması beklenir.

İki görüntüyü yüklemek, okuma sırasında $0$ parametresi geçirerek gri tonlamaya dönüştürmek ve sonunda aynı boyuta yeniden ölçeklendirmek için opencv modülünü kullanacaksınız.

import cv2
lena_rgb = cv2.imread('lena.png')
lena_gray = cv2.cvtColor(lena_rgb,cv2.COLOR_BGR2GRAY)
lena_gray.shape
(512, 512)
binary = cv2.imread('binary.png')
binary.shape
(1394, 2190, 3)
binary = cv2.resize(binary,(512,512),cv2.INTER_CUBIC)
binary.shape
(512, 512, 3)
binary_gray = cv2.cvtColor(binary,cv2.COLOR_BGR2GRAY)
binary_gray.shape
(512, 512)

Hem doğal hem de belge görüntüsünü görselleştirelim.

plt.figure(figsize=[10,10])

plt.subplot(121)
plt.imshow(lena_rgb[:,:,::-1])
plt.title("Doğal Görüntü")

plt.subplot(122)
plt.imshow(binary[:,:,::-1])
plt.title("Belge Görüntüsü")
plt.show()

Not: Görüntüde toplam $255$ piksel olduğu ve $0$ ile $255$ arasındaki her piksel değerinin frekansını görselleştirmek istediğiniz için bins değerini $255$ olarak kullanacaksınız.

hist, edges = np.histogram(binary_gray,bins=range(255))
plt.figure(figsize=[10,8])

plt.bar(edges[:-1], hist, width = 0.8, color='#0504aa')
plt.xlim(min(edges), max(edges))
plt.grid(axis='y', alpha=0.75)
plt.xlabel('Değer',fontsize=15)
plt.ylabel('Frekans',fontsize=15)
plt.xticks(fontsize=15)
plt.yticks(fontsize=15)
plt.ylabel('Frekans',fontsize=15)
plt.title('Belge Görüntüsü Histogramı',fontsize=15)
plt.show()
hist, edges = np.histogram(lena_gray,bins=range(260))
plt.figure(figsize=[10,8])

plt.bar(edges[:-1], hist, width = 0.5, color='#0504aa')
plt.xlim(min(edges), max(edges))
plt.grid(axis='y', alpha=0.75)
plt.xlabel('Pikseller',fontsize=15)
plt.ylabel('Piksel Frekansı',fontsize=15)
plt.xticks(fontsize=15)
plt.yticks(fontsize=15)
plt.ylabel('Frekans',fontsize=15)
plt.title('Doğal Görüntü Histogramı',fontsize=15)
plt.show()

Yukarıdaki şekillerden, doğal görüntünün $256$ parlaklık düzeyinin tümüne yayıldığını ve rastgele bir dağılıma sahip olduğunu; buna karşın, belge görüntüsünün tek tepeli bir dağılım gösterdiğini ve piksel değerleri $0$ ile $255$ arasında çoğunlukla çarpık olduğunu gözlemleyebilirsiniz.

Sonuç

Dersi tamamladığınız için tebrikler.

Bu ders, numpy ve pandas yardımıyla matplotlib kullanarak nasıl histogram oluşturabileceğinize dair iyi bir başlangıç noktasıydı.

Ayrıca, histogramın gücünden yararlanarak iki farklı görüntü alanını, yani belge ve doğal görüntüyü nasıl birbirinden ayırabileceğinizi de öğrendiniz.

Veri görselleştirme teknikleri hakkında daha fazla bilgi edinmek isterseniz, DataCamp’in Matplotlib ile Veri Görselleştirme kursunu göz önünde bulundurabilirsiniz.

Lütfen bu dersle ilgili tüm sorularınızı aşağıdaki yorumlar bölümünde sormaktan çekinmeyin.

Konular
Python
Veri Görselleştirme

Python hakkında daha fazla bilgi edinin

Kurs

Matplotlib ile Veri Görselleştirmeye Giriş

4 sa
236.9K
Matplotlib kullanarak veri görselleştirmeleri oluşturmayı, özelleştirmeyi ve paylaşmayı öğrenin.
Ayrıntıları GörüntüleRight Arrow
Kursa Başla
Devamını GörRight Arrow
İlgili

blog

2026’da En Popüler 40 Yazılım Mühendisi Mülakat Sorusu

Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Dario Radečić's photo

Dario Radečić

15 dk.

blog

Hızlı Sevkiyat İçin Pratik Vibe Kodlama Teknoloji Yığını

Ön uç, arka uç, veritabanları, kimlik doğrulama, depolama, e-posta, test, dağıtım ve izleme için en iyi araçları keşfedin.
Abid Ali Awan's photo

Abid Ali Awan

14 dk.

Eğitim

Python'da Listeyi String'e Nasıl Dönüştürürsünüz

Bu hızlı eğitimde, Python'da bir listeyi string'e nasıl dönüştüreceğinizi öğrenin.
Adel Nehme's photo

Adel Nehme

Eğitim

.gitignore Nasıl Kullanılır: Örneklerle Pratik Bir Giriş

Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Kurtis Pykes 's photo

Kurtis Pykes

8 dk.

Devamını GörDevamını Gör