R'de lolipop grafiği nasıl oluşturulur
Çubuk grafiğe benzer şekilde lolipop grafiği , kategorik bir değişkenin niceliksel değerlerini karşılaştırmak için kullanışlıdır. Lolipop grafiği, niceliksel değerleri temsil etmek için çubuk kullanmak yerine, sonunda daire bulunan çizgiler kullanır.
Lolipop grafiği, grafikteki renk miktarını en aza indirirken ve okuyucunun dikkatini grafikteki çizgiler veya diğer grafikler yerine grafikteki gerçek değerlere odaklarken birden fazla kategoriyi karşılaştırmanın harika bir yoludur. Birçok kişi lolipop tahtasının estetik açıdan da hoş olduğunu düşünüyor.
Bu eğitimde aşağıdaki lolipop grafiğini oluşturmak için gereken adımları inceleyeceğiz:
Örnek: R’deki Lolipop grafiği
Bu örnek için mtcars’ın yerleşik R veri kümesini kullanacağız:
#view first six rows of mtcars
head(mtcars)
Temel bir lolipop grafiği
Aşağıdaki kod nasıl olduğunu gösterir veri kümesindeki 32 arabanın her birinin mpg’sini (galon başına mil) karşılaştırmak için bir lolipop grafiği oluşturmak.
Araba adları veri kümesinin satır adlarında tanımlıdır, bu nedenle öncelikle veri kümesinde bu satır adlarını içeren yeni bir sütun oluştururuz.
Daha sonra lolipop grafiğini oluşturmak için kullanacağımız ggplot2 kütüphanesini yüklüyoruz.
Ggplot2 ile çizimdeki çizgileri oluşturmak için geom_segment’i kullanırız. Başlangıç ve bitiş x değerlerini sırasıyla 0 ve mpg olarak ayarladık. Başlangıç ve bitiş y değerlerini char olarak ayarladık:
#create new column for car names mtcars$car <- row.names(mtcars) #load ggplot2 library library(ggplot2) #create lollipop chart ggplot(mtcars, aes(x = mpg, y = car)) + geom_segment(aes(x = 0, y = car, xend = mpg, yend = car)) + geom_point()
Etiket ekleme
Ayrıca label ve geom_text bağımsız değişkenlerini kullanarak grafiğe etiketler de ekleyebiliriz:
ggplot(mtcars, aes(x = mpg, y = car, label = mpg )) + geom_segment(aes(x = 0, y = car, xend = mpg, yend = car)) + geom_point() + geom_text(nudge_x = 1.5)
Veya etiketleri her satırın sonuna yerleştirmek yerine, daireleri büyüterek ve etiketin yazı tipi rengini beyaz olarak değiştirerek bunları dairelerin içine yerleştirebiliriz:
ggplot(mtcars, aes(x = mpg, y = car, label = mpg)) + geom_segment(aes(x = 0, y = car, xend = mpg, yend = car)) + geom_point( size = 7 ) + geom_text( color = 'white', size = 2 )
Değerleri ortalamayla karşılaştırın
Değerleri belirli bir sayıyla karşılaştırmak için lolipop grafiği de kullanabiliriz. Örneğin, veri setinde ortalama mpg değerini bulabilir ve ardından her arabanın mpg’sini ortalamayla karşılaştırabiliriz.
Aşağıdaki kod, ortalama mpg değerini bulmak ve ardından arabaları artan mpg sırasına göre düzenlemek için dplyr kütüphanesini kullanır:
#load library dplyr library(dplyr) #find mean value of mpg and arrange cars in order by mpg descending mtcars_new <- mtcars %>% arrange(mpg) %>% mutate(mean_mpg = mean(mpg), flag = ifelse(mpg - mean_mpg > 0, TRUE, FALSE), car = factor(car, levels = .$car)) #view first six rows of mtcars_new head(mtcars_new)
Daha sonra aşağıdaki kod, dairenin rengini bayrak değerine (bu durumda DOĞRU veya YANLIŞ) eşit olacak şekilde ve her araba için başlangıç x değerini ortalama mpg değerine eşit olacak şekilde ayarlayarak lolipop grafiğini oluşturur.
ggplot(mtcars_new, aes(x = mpg, y = car, color = flag )) + geom_segment(aes( x = mean_mpg , y = car, xend = mpg, yend = car)) + geom_point()
Bu tür renk paletini kullanarak hangi arabaların veri seti ortalamasından daha düşük ve daha yüksek mpg’ye sahip olduğunu kolayca belirleyebiliriz.
Varsayılan olarak R, grafik renkleri olarak mavi ve kırmızıyı kullanır. Ancak Scale_color_manual argümanını kullanarak istediğimiz renkleri kullanabiliriz:
ggplot(mtcars_new, aes(x = mpg, y = car, color = flag)) +
geom_segment(aes(x = mean_mpg, y = car, xend = mpg, yend = car)) +
geom_point() +
scale_color_manual(values = c("purple", "blue"))
Grafik estetiğini değiştirin
Son olarak, grafiğin estetiğini daha da değiştirmek ve profesyonel görünümlü bir nihai ürün oluşturmak için ggplot2’nin geniş yeteneklerini kullanabiliriz:
ggplot(mtcars_new, aes(x = mpg, y = car, color = flag)) + geom_segment(aes(x = mean_mpg, y = car, xend = mpg, yend = car), color = "grey") + geom_point() + annotate("text", x = 27, y = 20, label = "Above Average", color = "#00BFC4", size = 3, hjust = -0.1, vjust = .75) + annotate("text", x = 27, y = 17, label = "Below Average", color = "#F8766D", size = 3, hjust = -0.1, vjust = -.1) + geom_segment(aes(x = 26.5, xend = 26.5, y = 19, yend = 23), arrow = arrow(length = unit(0.2,"cm")), color = "#00BFC4") + geom_segment(aes(x = 26.5, xend = 26.5, y = 18, yend = 14), arrow = arrow(length = unit(0.2,"cm")), color = "#F8766D") + labs(title = "Miles per Gallon by Car") + theme_minimal() + theme(axis.title = element_blank(), panel.grid.minor = element_blank(), legend.position = "none", text = element_text(family = "Georgia"), axis.text.y = element_text(size = 8), plot.title = element_text(size = 20, margin = margin(b = 10), hjust = 0), plot.subtitle = element_text(size = 12, color = "darkslategrey", margin = margin(b = 25, l = -25)), plot.caption = element_text(size = 8, margin = margin(t = 10), color = "grey70", hjust = 0))