Menu

R'de Çubuk Grafiği: Sayımlardan ve Tablolardan barplot()

R'de barplot() ile nasıl çubuk grafiği yapılır - isimli bir vektörden ya da table() çıktısından, bir matristen gruplu ve yığılı çubuklar, biçimlendirme ve geom_col ile geom_bar farkı.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

Çubuk Grafikleri Kategorileri Karşılaştırır

Bir çubuk grafiği "her birinden ne kadar?" sorusunu yanıtlar - kategori başına bir çubuk, çubuk uzunluğu kategorinin değerini gösterir. R'de temel fonksiyon barplot()'tır ve girdisi basitçe bir yükseklikler vektörüdür. Vektöre isim verin; isimler çubukların altındaki etiketler olur:

visits <- c(Mon = 42, Tue = 51, Wed = 47, Thu = 60, Fri = 78)

barplot(visits,
        main = "Store visits by day",
        ylab = "Visits")

Güne göre etiketlenmiş beş gri çubuk, mütevazı bir pazartesiden neredeyse iki kat yüksek bir cuma tepesine tırmanıyor. Kurulacak bir şey yok, yapılandırılacak bir şey yok - isimli bir vektör kurabiliyorsanız onu çizebilirsiniz.

Bu sayfadaki çalıştırılabilir düzenleyiciler yalnızca metin çıktısı gösterir; dolayısıyla buradaki barplot() çağrıları yerel bir R oturumuna yapıştırılacak statik parçacıklardır - ama onlardan önceki sayma adımı gayet iyi çalışır ve en çok önem taşıyan adım da odur.

Gerçek İş Akışı: Önce table(), Sonra barplot()

Pratikte elinizde nadiren düzgün, önceden sayılmış yükseklikler bulunur. Elinizde ham bir kategori etiketi sütunu vardır - anket yanıtı, sipariş, kullanıcı başına bir satır - ve asıl iş saymaktır. table() bunu tek çağrıda yapar ve çıktısı, barplot() fonksiyonunun tam olarak istediği şey olan isimli bir sayım vektörüdür:

Sonra grafik bir satır daha:

barplot(sort(t, decreasing = TRUE),
        main = "Survey responses",
        ylab = "Count")

Bu iki adım - önce table(), sonra barplot() - R'deki en yaygın çubuk grafiği akışıdır. Tabloyu önce sıralamak ucuz bir iyileştirmedir: yüksekliğe göre sıralanmış çubuklar, kategorilerin doğal bir sırası olmadıkça (günler, aylar, doz düzeyleri) alfabetik sıralanmış çubuklardan daha hızlı okunur - o durumda seviyeleri düzgün sıralanmış bir faktör, table() fonksiyonunun onları alfabetiklemesini engeller. Gerçek toplulaştırma isteyen çubuklar için - satır sayıları yerine grup başına toplamlar ya da ortalamalar - önce gruplama ve özetleme adımını yapın ve sonucu barplot() fonksiyonuna verin.

Etiketler ve Stil

Etiketler normalde vektörün isimlerinden gelir, ama names.arg onları geçersiz kılar - verinin kodları bir izleyici kitlesine uygun olmadığında kullanışlıdır:

barplot(visits,
        names.arg = c("Monday", "Tuesday", "Wednesday",
                      "Thursday", "Friday"),
        col    = "steelblue",
        border = NA,
        main   = "Store visits by day",
        las    = 2)
  • col çubukları doldurur; her çubuğu ayrı renklendirmek için bir vektör geçirin, ama varsayılan olarak gökkuşağı yapmaya direnin - renk bir şey ifade etmeli, örneğin bahsettiğiniz tek çubuğu işaretlemeli.
  • border = NA, daha temiz bir görünüm için çubuk dış hatlarını kaldırır.
  • las = 2, eksen etiketlerini eksene dik döndürür - birbirinin üstüne binen uzun kategori adlarının çözümü. İsimler gerçekten uzunsa bunu daha büyük bir alt kenar boşluğuyla (par(mar = c(8, 4, 4, 2))) birleştirin.

Bir Matristen Gruplu ve Yığılı Çubuklar

İki kategorik boyutu aynı anda göstermek için - diyelim ki çeyrek başına kanal başına satışlar - barplot() fonksiyonuna bir matris verin. Her sütun kategori ekseninde bir konum olur ve satırlar alt çubuklar olur:

sales <- matrix(c(12, 18,   15, 22,   20, 19,   24, 27),
                nrow = 2,
                dimnames = list(c("Online", "Retail"),
                                c("Q1", "Q2", "Q3", "Q4")))

# Grouped: rows stand next to each other within each quarter
barplot(sales, beside = TRUE,
        col = c("steelblue", "orange"),
        legend.text = rownames(sales),
        main = "Sales by channel and quarter")

# Stacked: rows pile up into one total bar per quarter (the default)
barplot(sales, beside = FALSE,
        col = c("steelblue", "orange"),
        legend.text = rownames(sales))

beside = TRUE, iki kanalı her çeyrek içinde omuz omuza koyar - kanalları doğrudan karşılaştırmak istediğinizde en iyisidir. Yığılı varsayılan, çeyrek başına toplamı vurgular ve ayrımı her çubuğun içinde gösterir; toplamlar için dürüsttür ama taban çizgileri kaydığı için iç parçaları çubuklar arasında karşılaştırmayı zorlaştırır. legend.text = rownames(sales), her iki sürümü de okunabilir kılan açıklamayı ekler.

Bir anahtar daha: horiz = TRUE, çubukları yatay eksen boyunca yerleştirir. Uzun adlı çok sayıda kategori için en nazik yerleşimdir - her etiket kendi çubuğunun yanında kendi satırında oturur, döndürme gerekmez.

Çubuk Grafiği mi, Histogram mı?

Arayanlar bunları sürekli karıştırır ve ayrım otuz saniyeye değer: bir çubuk grafiği ayrık kategorileri karşılaştırır - eksen bir etiket kümesidir, çubuklar ayrıktır ve onları yeniden sıralamak meşrudur. Bir histogram ise tek bir sayısal değişkeni kutular - eksen sürekli bir ölçektir, kutular ardışık aralıklar olduğu için çubuklar birbirine değer ve onları yeniden sıralamak saçmalık olurdu. Sütununuz sözcükler içeriyorsa ("Yes", "Chrome", "Q3") barplot(table(x)) istersiniz. Ölçümler içeriyorsa (boylar, fiyatlar, yanıt süreleri) histogram ve hist(x) istersiniz.

ggplot2: geom_col ile geom_bar

ggplot2 sürümü, sayımın zaten yapılıp yapılmadığına göre ayrılan iki geom ile gelir:

library(ggplot2)

# geom_bar(): raw observations in, counting done for you
ggplot(survey, aes(x = response)) +
    geom_bar(fill = "steelblue")

# geom_col(): heights already computed, one row per bar
totals <- data.frame(day = c("Mon", "Tue", "Wed", "Thu", "Fri"),
                     visits = c(42, 51, 47, 60, 78))

ggplot(totals, aes(x = day, y = visits)) +
    geom_col(fill = "steelblue")

geom_bar(), grafiğe gömülmüş table() demektir: gözlem başına bir satır alır ve toplar. geom_col() önceden toplulaştırılmış veriyi alır ve bir y sütununu çubuk yüksekliğine eşler - klasik barplot() fonksiyonunun karşılığı. Zaten sayılmış veriyi geom_bar() fonksiyonuna beslemek standart acemi tuzağıdır: satırları sayar (her birinden bir tane) ve her çubuk aynı yükseklikte çıkar.

Buradan Ne Çıkarıyorsunuz

  • barplot(heights) isimli bir vektörü çizer - ve table(x) ham kategori verisinden tam olarak o biçimi üretir, dolayısıyla barplot(table(x)) çekirdek deyimdir.
  • Çizmeden önce tabloyu sıralayın (ya da faktör seviyelerini ayarlayın); çubuk sırası mesajın bir parçasıdır.
  • Bir matris, gruplu (beside = TRUE) ya da yığılı (varsayılan) çubuklar verir; legend.text = rownames(m) ekleyin.
  • names.arg, col, las = 2 ve horiz = TRUE etiketlemeyi halleder; yatay çubuklar uzun adlar için en iyisidir.
  • Kategoriler → çubuk grafiği; sayısal kutular → histogram. ggplot2'da: ham satırlar → geom_bar(), hesaplanmış yükseklikler → geom_col().

Sırada: ggplot2 - bütün bu grafikleri ve çok daha fazlasını aynı birkaç birleştirilebilir parçadan kuran dilbilgisi.

Sıkça Sorulan Sorular

R'de çubuk grafiği nasıl yapılır?

Yükseklikler vektörü üzerinde barplot() çağırın. Vektöre isim verin - ya da çıktısı zaten isimli olan table() ile kurun - ve her eleman etiketli bir çubuk olur: barplot(table(df$category)).

R'de gruplu ya da yığılı çubuk grafiği nasıl yapılır?

Bir matris geçirin. Her sütun kategori ekseninde bir konum olur; beside = TRUE satırları yan yana duran çubuklar olarak çizer (gruplu), varsayılan beside = FALSE ise onları yığar. Okurların satırları ayırt edebilmesi için legend.text = rownames(m) ekleyin.

R'de barplot() ile hist() arasındaki fark nedir?

barplot() ayrık kategorileri karşılaştırır - kategori başına bir çubuk, çubuklar ayrık. hist() tek bir sayısal değişkeni ardışık aralıklara kutular - eksen sürekli bir ölçek olduğu için çubuklar birbirine değer. Değişkeniniz sözcüklerse barplot(table(x)) istersiniz; sayılarsa hist(x) istersiniz.

ggplot2'da geom_bar mı geom_col mu kullanmalıyım?

geom_bar() sizin için sayar - ona ham gözlemleri verin, her kategoriyi toplar. geom_col() ise zaten hesapladığınız değerleri çizer - ona çubuk başına bir satır artı bir yükseklik sütunu verin. Önceden sayılmış veriyi geom_bar() ile kullanmak klasik hatadır; o veri geom_col() ister.

Coddy programming languages illustration

Coddy ile kodlamayı öğren

BAŞLA