Menu

R'de ggplot2: Grafik Dilbilgisine Yeni Başlayanlar Rehberi

ggplot2 nasıl çalışır - veri + aes() + geom zihinsel modeli, estetikleri eşlemek ile sabitlemek arasındaki fark, labs(), facet_wrap(), temalar ve ggsave() ile grafik kaydetme.

ggplot2 Grafikleri Katmanlardan Kurar

ggplot2, R'nin en yaygın kullanılan grafik paketidir ve insanların ona bu kadar bağlı olmasının nedeni bir tasarım fikridir: grafik dilbilgisi. Temel R size grafik başına bir fonksiyon verir - plot(), hist(), barplot() - her biri kendi argümanlarıyla. ggplot2 ise size küçük bir birleştirilebilir parça kümesi verir - bir veri kümesi, sütunlardan görsel özelliklere bir eşleme ve çizim katmanları - ve bunlar + ile herhangi bir grafiğe birleşir. Dilbilgisini bir kez öğrenin; her yeni grafik türü tek bir sözcüğü değişmiş aynı cümledir. Bonus olarak varsayılanlar (gri panel, makul eksenler, otomatik açıklamalar) hiçbir biçimlendirme çabası olmadan sunulabilir görünür.

Bu bir eklenti paketidir, dolayısıyla tek seferlik bir kurulum ve oturum başına bir yükleme ister:

install.packages("ggplot2")   # once, on your machine
library(ggplot2)              # at the top of every script that uses it

Baştan bilinmesi gereken bir beklenti: ggplot2 bir veri çerçevesi ister (başıboş vektörler değil), tercihen düzenli uzun biçimde - gözlem başına bir satır, değişken başına bir sütun. Veriniz genişse, onu önce uzunlaştırmak genellikle grafik sorunu gibi görünen şeyi eritir.

Zihinsel Model: Veri, Eşleme, Geometri

Her ggplot, her parça için bir tane olmak üzere üç soruyu yanıtlar:

  1. Veri - hangi veri çerçevesi? ggplot(mtcars, ...)
  2. Eşleme - hangi sütunlar hangi görsel özellikleri yönetiyor? aes(x = wt, y = hp)
  3. Geometri - gözlemler nasıl çizilmeli? + geom_point()

İşte anatomi, parça parça:

ggplot(mtcars, aes(x = wt, y = hp)) +
    geom_point()
  • ggplot(mtcars, ...), varsayılan verisi mtcars olan bir grafik başlatır. Tek başına boş bir gri panel çizer - henüz katman yok.
  • aes(x = wt, y = hp) estetik eşlemedir: yatay konum wt sütunundan, dikey konum hp sütunundan gelir. mtcars$wt değil, yalın sütun adları yazdığınıza dikkat edin - eşleme, verdiğiniz verinin içinde değerlendirilir.
  • + geom_point(), her satırı bir nokta olarak çizen bir katman ekler. + gerçekten katmanların toplanmasıdır: grafik, kurduğunuz bir nesnedir ve eklemeye devam edebilirsiniz - başka bir geom, etiketler, bir tema - her biri başka bir + ile.

Onu çalıştırın; saçılım grafiği rehberindeki temel R sürümüyle aynı ağırlık-karşı-beygir saçılımını, beyaz ızgara çizgili gri bir panelde alırsınız. geom_point() yerine geom_line() koyun; aynı eşleme bir çizgi grafiğine dönüşür - dilbilgisi işini yapıyor.

Gerçekten Kullanacağınız Geom'lar

Bir düzine geom, gündelik işin neredeyse tamamını kapsar:

geom_point()       # scatter plot: two numeric variables
geom_line()        # line chart: trends over an ordered variable
geom_col()         # bar chart from pre-computed heights (needs y)
geom_bar()         # bar chart that counts raw rows for you (no y)
geom_histogram()   # distribution of one numeric variable (set binwidth)
geom_boxplot()     # distributions compared across groups
geom_smooth()      # fitted trend line; method = "lm" for straight

Katmanlar üst üste binir ve ggplot2'nin ifade gücünde temel R'yi geçmeye başladığı yer burasıdır: geom_point() + geom_smooth(method = "lm"), tek okunabilir satırda regresyon çizgisi ve güven bandı olan bir saçılım grafiğidir. Grafikler birer nesne olduğu için bir temel kaydedip ondan dallanabilirsiniz de:

p <- ggplot(mtcars, aes(x = wt, y = hp)) + geom_point()

p + geom_smooth(method = "lm")   # one variant
p + geom_smooth()                # another (loess curve)

Eşleme ve Sabitleme: Klasik aes() Karışıklığı

Her ggplot2 acemisinin, genellikle ilk hafta yaptığı tek hata: birebir bir rengi aes() içine koymak. Kural kısadır - aes() içi "veriyle değişir" demektir; dışı "sabit ayar" demektir - ve iki yerleşim tamamen farklı şeyler yapar:

# MAPPING: color varies by a column - each cylinder count gets its own
# color, and a legend appears automatically
ggplot(mtcars, aes(x = wt, y = hp, color = factor(cyl))) +
    geom_point(size = 2)

# SETTING: every point is literally steelblue - no legend, no mapping
ggplot(mtcars, aes(x = wt, y = hp)) +
    geom_point(color = "steelblue", size = 2)

Ve tuzağın kendisi:

# WRONG: "blue" inside aes() is treated as data, not as a color
ggplot(mtcars, aes(x = wt, y = hp, color = "blue")) +
    geom_point()

Bu, tek girdisi "blue" olarak etiketlenmiş bir açıklamayla birlikte somon pembesi noktalar çizer. Nedeni: aes() sütunları özelliklere eşler; dolayısıyla color = "blue", değeri her yerde "blue" sözcüğü olan tek kategorili sahte bir sütun oluşturur ve ggplot o kategoriye varsayılan ilk rengini atar - ki o da kırmızımsı bir somondur. "Noktaları mavi yap" demek istiyorsanız renk eşlemenin dışına gider: geom_point(color = "blue"). Aynı kural size, shape, fill ve alpha için de geçerlidir. (Eşleme örneğindeki factor(cyl) ifadesine de dikkat edin: cyl sayısaldır ve onu factor() içine sarmak, sürekli bir renk geçişi yerine grup başına ayrı renkler ister.)

Etiketler, Yüzeyler ve Temalar

labs() her şeyi tek bir yerde adlandırır - ve bir grafik, gerçek etiketleri olana kadar bitmiş sayılmaz:

ggplot(mtcars, aes(x = wt, y = hp, color = factor(cyl))) +
    geom_point(size = 2) +
    labs(title = "Horsepower vs. weight",
         x     = "Weight (1000 lbs)",
         y     = "Horsepower",
         color = "Cylinders")

Yüzeyler (facet), ggplot2'nin başlık özelliğidir: tek bir grafiği küçük çoklamalara böler, grup başına bir panel, panellerin dürüstçe karşılaştırılması için ortak eksenlerle:

ggplot(mtcars, aes(x = wt, y = hp)) +
    geom_point() +
    facet_wrap(~ cyl)

Üç panel belirir - 4, 6 ve 8 silindirli arabalar için birer tane - her panelin üstünde grup değeri yazılı bir ızgarada dizilmiş hâlde. Temel R'de bu, elle ortak sınır ayarlanan bir par(mfrow) hokkabazlığıdır; burada tek satırdır. Yüzeylere ayırma düzenli veriyi ödüllendirir; ggplot2'nin bir dplyr işlem hattıyla bu kadar doğal eşleşmesinin nedeni budur - filtreleyin ve özetleyin, sonra sonucu doğrudan ggplot() içine aktarın.

Temalar, veri dışı mürekkebi tek çağrıda yeniden biçimlendirir: + theme_minimal() (temiz beyaz arka plan), + theme_bw(), + theme_classic() (yalnızca eksenler, ızgara yok) ya da gri varsayılan. Proje başına bir tane seçin ve tutarlı kalın - her şeklin aynı temayı paylaştığı bir rapor, bir karalama defteri değil tek bir belge gibi okunur.

ggsave() ile Kaydetme - ve Temel R'nin Hâlâ Uygun Olduğu Durumlar

ggsave(), en son grafiği diske yazar ve biçimi dosya uzantısından çıkarır:

ggsave("hp-vs-weight.png", width = 8, height = 5)          # last plot shown
ggsave("hp-vs-weight.pdf", plot = p, width = 8, height = 5) # a saved object

width ve height varsayılan olarak inç cinsindendir; onları açıkça ayarlayın, çünkü yazı tipi boyutları çıktı boyutlarıyla ölçeklenir ve varsayılanlar şeklin gideceği yere nadiren uyar.

Ne zaman uğraşmalı meselesine gelince: bir analiz sırasında tek bir değişkene beş saniyelik bir bakış için temel R'nin plot() fonksiyonu ve arkadaşları daha az yazma ve sıfır bağımlılıktır - ggplot2'yi her yerde kullanmanın bir ödülü yok. ggplot2, bir şekil gruplar, açıklamalar, yüzeyler ya da bir izleyici kitlesi içerdiği an ekmeğini çıkarır: dilbilgisi, temel grafiklerin ancak çabayla üstesinden geldiği karmaşıklığa ölçeklenir.

Buradan Ne Çıkarıyorsunuz

  • ggplot2 her grafiği veri + aes() eşlemesi + geom katmanlarından, + ile birleştirerek kurar; dilbilgisini bir kez öğrenin, her grafik türü için yeniden kullanın.
  • aes() sütunları görsel özelliklere eşler - veri çerçevenizin içinde değerlendirilen yalın sütun adları.
  • aes() içi = veriyle değişir (ve bir açıklama alır); dışı = sabit ayar. aes(color = "blue") klasik hatadır.
  • Başlıklar için labs(), küçük çoklamalar için facet_wrap(~ group), biçimlendirme için theme_minimal() ve arkadaşları, dışa aktarım için açık boyutlarla ggsave().
  • Hızlı tek bakış: temel R. Gruplar, yüzeyler ya da bir izleyici kitlesi: ggplot2.

Bu, grafik bölümünü kapatıyor - buradan doğal sonraki adım, bu grafiklerin ortaya çıkardığı biçimlere sayı koyan betimleyici istatistik.

Sıkça Sorulan Sorular

R'de ggplot2 nedir?

ggplot2, R'nin en popüler grafik paketidir. Grafik türü başına bir fonksiyon yerine, her grafiği aynı üç parçadan kurarsınız - bir veri çerçevesi, sütunlardan görsel özelliklere bir aes() eşlemesi ve bir ya da daha fazla geom_*() katmanı - + ile birleştirilerek. tidyverse'ün parçasıdır.

ggplot2 nasıl kurulur?

Bir kez install.packages("ggplot2") çalıştırın, sonra onu kullanan her betiğin en üstüne library(ggplot2) yazın. Kurmak paketi makinenize koyar; library() onu mevcut oturuma yükler.

ggplot2'da aes() ne yapar?

aes(), verinizin sütunlarını görsel özelliklere eşler: aes(x = wt, y = hp, color = factor(cyl)), yatay konumun wt sütunundan, dikey konumun hp sütunundan ve nokta renginin silindir sayısından geldiğini söyler. aes() içindeki her şey veriyle değişir; dışındaki her şey sabit bir ayardır.

ggplot noktalarım neden istediğim renkte değil?

Rengi aes() içine koydunuz: aes(color = "blue") bir renk ayarlamaz, "blue" adında uydurma bir kategoriyi eşler; dolayısıyla ggplot kendi varsayılan rengini seçer ve bir açıklama ekler. Birebir bir renk ayarlamak için onu eşlemenin dışına koyun: geom_point(color = "blue").

Coddy programming languages illustration

Coddy ile kodlamayı öğren

BAŞLA