Hikayeler

Reklam vermek için turkmmo@gmail.com

Matplotlib’te Legend’i Ayrı Bir Alan Üzerine Atma (Subplot Düzeni)

devemoji

dev.mmooyun.com
Telefon Numarası Onaylanmış Üye
Yönetici
VIP Üye
Paylaşım
Ayın Üyesi
Katılım
4 Ocak 2016
Konular
163
Mesajlar
817
Online süresi
1ay 29g
Reaksiyon Skoru
756
Altın Konu
59
Başarım Puanı
214
TM Yaşı
10 Yıl 3 Ay 18 Gün
MmoLira
3,668
DevLira
3

Metin2 EP, Valorant VP dahil tüm oyun ürünlerini en uygun fiyatlarla bulabilir, Item ve Karakterlerinizi hızlıca satabilirsiniz. HEMEN TIKLA!

Bir süre grafikle uğraştıktan sonra şunu fark ediyorsun, legend dediğin şey bazen grafiğin üstünü kapatmaya başlıyor. Özellikle aynı figure içinde birden fazla subplot varsa iş iyice karışıyor. O noktada legend’i grafiklerin içine değil, ayrı bir alana koyma fikri devreye giriyor. İlk başta gereksiz gibi duruyor ama büyük veri grafiğinde baya fark ettiriyor.

Olay aslında basit: figure içinde zaten birkaç eksen var (subplot’lar), bir de ekstra boş bir alan açıp legend’i oraya taşıyorsun. Ama bunu yaparken önemli bir detay var, figure layout’unu önceden ayarlamak gerekiyor. Yoksa legend için yer açayım derken grafiklerin kendisi sıkışıyor. rcParams tarafında figure.subplot.left, right, top, bottom gibi değerlerle oynanıyor.

Bu biraz eski oyunlarda HUD yerleşimi ayarlamak gibi, her şeyi sıkıştırmadan dengeli tutman gerekiyor. İlk örnekte 2x2 subplot var. Her bir panelde sinüs bazlı rastgele grafikler çiziliyor ama dikkat edilen şey şu, legend tek tek subplot’larda tutulmuyor. Bunun yerine tüm line objeleri toplanıp ayrı bir eksene taşınıyor. fig.add_axes() ile figure’un sağ tarafına ince bir alan açılıyor ve legend oraya basılıyor. Sonra da o eksenin koordinatları tamamen kapatılıyor, sadece legend kalıyor.


Ekran görüntüsü 2026-04-14 235256.png



Burada küçük ama önemli bir detay var, line objeleri direkt toplanabiliyor ama bu her grafik tipi için aynı değil. Mesela plot() çıktısı düz line döndürürken, bar() gibi şeyler container döndürüyor. Yani direkt toplama işi her zaman çalışmıyor. O yüzden bazen listeye append() yapmak gerekiyor, yoksa legend boş ya da hatalı çıkabiliyor. Bu farkı ilk gördüğümde biraz kafam karışmıştı çünkü aynı “grafik” gibi duruyor ama arka planda davranış farklı. İkinci örnekte iş biraz daha büyüyor, hem sin hem cos bar chart’ları üst üste çiziliyor. Burada her subplot içinde iki farklı bar seti var ama legend yine tek bir yerde toplanıyor. Burada dikkat çekici nokta şu, BarContainer diye bir şey dönüyor.

Yani tek bir çizgi değil, bir grup obje. Bu yüzden legend tarafında direkt tek eleman gibi davranmıyor, içine bakmak gerekiyor. Sonuçta yine aynı yöntem kullanılıyor, tüm bar container’lar bir listeye ekleniyor ve en sonunda ayrı axes üzerine legend basılıyor. O alan da frame’siz hale getirilip sadece yazılar bırakılıyor. Böylece grafikler temiz kalıyor, legend de kenarda bağımsız duruyor.

Genel olarak bakınca bu yöntem biraz “UI düzenleme” işi gibi. Grafik çizmekten çok, ekranı nasıl böleceğini ve bilgiyi nereye koyacağını planlıyorsun. Özellikle çoklu subplot ve karma veri olduğunda legend’i ayrı alana taşımak gerçekten işleri rahatlatıyor.

 
Son düzenleme:

Şu an konuyu görüntüleyenler (Toplam : 1, Üye: 0, Misafir: 1)

Geri
Üst