1 Çubuk Grafiği (Bar Graph)
1.1 Basit Çubuk Grafiği (Basic Bar Graph)
## 'data.frame': 6 obs. of 2 variables:
## $ Time : num 1 2 3 4 5 7
## $ demand: num 8.3 10.3 19 16 15.6 19.8
## - attr(*, "reference")= chr "A1.4, p. 270"
# Time değişkenini kategorik veri olarak tanımlarsak;
ggplot(BOD, aes(x=factor(Time), y=demand)) +
geom_bar(stat="identity")
# renk eklemek için geom_bar() fonksiyonunun içinde fill parametresi kullanılabilir.
# çerçeve için ise color parametresi kullanılabilir.
ggplot(pg_mean, aes(x=group, y=weight)) +
geom_bar(stat="identity", fill="lightblue", color="black")
1.2 Çubukları Birlikte Gruplama
## Cultivar Date Weight sd n se
## 1 c39 d16 3.18 0.9566144 10 0.30250803
## 2 c39 d20 2.80 0.2788867 10 0.08819171
## 3 c39 d21 2.74 0.9834181 10 0.31098410
## 4 c52 d16 2.26 0.4452215 10 0.14079141
## 5 c52 d20 3.11 0.7908505 10 0.25008887
## 6 c52 d21 1.47 0.2110819 10 0.06674995
##
## c39 c52
## 3 3
# Cultivar değişkeni 2 kategoriye sahip, kategorilere göre çubuk grafiği çizdirmek istersek;
ggplot(cabbage_exp, aes(x = Date, y = Weight, fill = Cultivar)) +
geom_bar(stat="identity",position = "dodge") # position = "dodge" yan yana çizilmesini sağlıyor
# scale_fill_brewer() fonksiyonu ile renklendirebiliriz.
ggplot(cabbage_exp, aes(x=Date, y = Weight, fill = Cultivar)) +
geom_bar(stat="identity",position="dodge", colour = "black") +
scale_fill_brewer(palette = "Pastel2")
# Çubuk grafikleri yatay hale getirmek için coord_flip() kullanılabilir.
ggplot(cabbage_exp, aes(x=Date, y = Weight, fill = Cultivar)) +
geom_bar(stat="identity",position="dodge", colour = "black") +
scale_fill_brewer(palette = "Pastel2") +
coord_flip()
# legend'ın yerini değiştirmek için
ggplot(cabbage_exp, aes(x=Date, y = Weight, fill = Cultivar)) +
geom_bar(stat="identity",position="dodge", colour = "black") +
scale_fill_brewer(palette = "Pastel2") +
coord_flip() +
theme(legend.position = "top")
1.3 Kategorik Değişkenler İçin Çubuk Grafiği (Bar Graph of Counts)
# x-eksenindeki değişkenler kategorik değişkenler olduğunda bar graph kullanılabilir.
levels(diamonds$cut)
## [1] "Fair" "Good" "Very Good" "Premium" "Ideal"
## [1] 0.23 0.21 0.23 0.29 0.31 0.24 0.24 0.26 0.22 0.23
# x-eksenindeki değişken sürekli değişkendir, histogram daha uygundur.
ggplot(diamonds, aes(x=carat)) +
geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
1.4 Çubuk Grafiğini Renklendirme (Using Color in a Bar Graph)
library(gcookbook) # uspopchange veri seti için
upc <- subset(uspopchange, rank(Change) > 40) # Change değişkeninde en yüksek 10 veriye ulaşmak için.
head(upc,3)
## State Abb Region Change
## 3 Arizona AZ West 24.6
## 6 Colorado CO West 16.9
## 10 Florida FL South 17.6
ggplot(upc, aes(x=reorder(Abb, Change), y=Change, fill=Region)) + #reorder() ile
# küçükten büyüğe sıralandı.
geom_bar(stat="identity", colour="black") +
scale_fill_manual(values=c("#669933", "#FFCC66")) # renk kodları girildi.
1.5 Olumlu ve Olumsuz Çubukları Farklı Renklendirme (Coloring Negative and Positive Bars Differently)
csub <- subset(climate, Source=="Berkeley" & Year >= 1900)
csub$pos <- csub$Anomaly10y >= 0
head(csub)
## Source Year Anomaly1y Anomaly5y Anomaly10y Unc10y pos
## 101 Berkeley 1900 NA NA -0.171 0.108 FALSE
## 102 Berkeley 1901 NA NA -0.162 0.109 FALSE
## 103 Berkeley 1902 NA NA -0.177 0.108 FALSE
## 104 Berkeley 1903 NA NA -0.199 0.104 FALSE
## 105 Berkeley 1904 NA NA -0.223 0.105 FALSE
## 106 Berkeley 1905 NA NA -0.241 0.107 FALSE
#guide=FALSE komutu ile legend kaldırılabilir.
ggplot(csub, aes(x=Year, y=Anomaly10y, fill=pos)) +
geom_bar(stat="identity", position="identity", colour="black", size=0.25) +
scale_fill_manual(values= c("#CCEEFF", "#FFDDDD"), guide=FALSE)
1.6 Çubuk Genişliğini ve Boşluğu Ayarlama (Adjusting Bar Width and Spacing)
ggplot(pg_mean, aes(x=group, y=weight)) +
geom_bar(stat="identity", width=0.5) #kalınlığı ayarlamak için width paremetresi kullanılır.
ggplot(cabbage_exp, aes(x=Date, y=Weight, fill=Cultivar)) +
geom_bar(stat="identity", width=0.5, position="dodge")
#position_dodge() ile boşluğu da ayarlayabiliriz.
ggplot(cabbage_exp, aes(x=Date, y=Weight, fill=Cultivar)) +
geom_bar(stat="identity", width=0.5, position=position_dodge(0.7))
1.7 Yığılmış Çubuk Grafiği (Stacked Bar Graph)
## Cultivar Date Weight sd n se
## 1 c39 d16 3.18 0.9566144 10 0.30250803
## 2 c39 d20 2.80 0.2788867 10 0.08819171
## 3 c39 d21 2.74 0.9834181 10 0.31098410
## 4 c52 d16 2.26 0.4452215 10 0.14079141
## 5 c52 d20 3.11 0.7908505 10 0.25008887
## 6 c52 d21 1.47 0.2110819 10 0.06674995
ggplot(cabbage_exp, aes(x=Date, y=Weight, fill=Cultivar, order=desc(Cultivar))) +
geom_bar(stat="identity")
1.8 Oransal Yığılmış Çubuk Grafiği (Making a Proportional Stacked Bar Graph)
ce <- ddply(cabbage_exp, "Date", transform, percent_weight = Weight / sum(Weight) * 100)
ce #percent_weight değişkeni altında weight değişkenini yüzdelik hale getirdik.
## Cultivar Date Weight sd n se percent_weight
## 1 c39 d16 3.18 0.9566144 10 0.30250803 58.45588
## 2 c52 d16 2.26 0.4452215 10 0.14079141 41.54412
## 3 c39 d20 2.80 0.2788867 10 0.08819171 47.37733
## 4 c52 d20 3.11 0.7908505 10 0.25008887 52.62267
## 5 c39 d21 2.74 0.9834181 10 0.31098410 65.08314
## 6 c52 d21 1.47 0.2110819 10 0.06674995 34.91686
ggplot(ce, aes(x=Date, y=percent_weight, fill=Cultivar)) +
geom_bar(stat="identity", colour="black") +
scale_fill_brewer(palette="Pastel1")
1.9 Çubuk Grafiğine Etiket Ekleme (Adding Labels to a Bar Graph)
# vjust (the vertical justification)
# vjust parametresi ile yazının çubuğun neresine geleceğini ayarlayaibliriz.
# Çubuğun aşağısında yer alması için pozitif değerler verilir.
ggplot(cabbage_exp, aes(x=interaction(Date, Cultivar), y=Weight)) +
geom_bar(stat="identity") +
geom_text(aes(label=Weight), vjust=1.5, colour="white")
# geom_text ile çubukların üzerine değerlerini ekledik.
# label=Weight yazarak üzerine hangi etiketin geleceğini belirledik.
# Çubuğun üstünde yer alması için negatif değerler verilir.
ggplot(cabbage_exp, aes(x=interaction(Date, Cultivar), y=Weight)) +
geom_bar(stat="identity") +
geom_text(aes(label=Weight), vjust=-0.2)
# y-ekseninin boyutunu değiştirerek grafiğimizi daha anlaşılır hale
# getirebiliriz.
ggplot(cabbage_exp, aes(x=interaction(Date, Cultivar), y=Weight)) +
geom_bar(stat="identity") +
geom_text(aes(label=Weight), vjust=-0.2) +
ylim(0, max(cabbage_exp$Weight) * 1.05)
# ylim fonksiyonu ile minimum değerini 0
# maksimum değerini ise weight değişkeninin maksimum değerinin
# 1.05 katı olarak ayarladık.
# geom_text içersinide y- ekseni değerini girdiğimizde
# boyutu otomatik olarak ayarlar.
ggplot(cabbage_exp, aes(x=interaction(Date, Cultivar), y=Weight)) +
geom_bar(stat="identity") +
geom_text(aes(y=Weight+0.1, label=Weight))
# geom_text içerisinde textin rengini, konumunu boyutunu belirleyebiliriz.
ggplot(cabbage_exp, aes(x=Date, y=Weight, fill=Cultivar)) +
geom_bar(stat="identity", position="dodge") +
geom_text(aes(label=Weight), vjust=1.5, colour="white",
position=position_dodge(.9), size=5)
## Cultivar Date Weight sd n se
## 1 c39 d16 3.18 0.9566144 10 0.30250803
## 2 c52 d16 2.26 0.4452215 10 0.14079141
## 3 c39 d20 2.80 0.2788867 10 0.08819171
## 4 c52 d20 3.11 0.7908505 10 0.25008887
## 5 c39 d21 2.74 0.9834181 10 0.31098410
## 6 c52 d21 1.47 0.2110819 10 0.06674995
## Cultivar Date Weight sd n se label_y
## 1 c39 d16 3.18 0.9566144 10 0.30250803 3.18
## 2 c52 d16 2.26 0.4452215 10 0.14079141 5.44
## 3 c39 d20 2.80 0.2788867 10 0.08819171 2.80
## 4 c52 d20 3.11 0.7908505 10 0.25008887 5.91
## 5 c39 d21 2.74 0.9834181 10 0.31098410 2.74
## 6 c52 d21 1.47 0.2110819 10 0.06674995 4.21
ggplot(ce, aes(x=Date, y=Weight, fill=Cultivar)) +
geom_bar(stat="identity") +
geom_text(aes(y=label_y, label=Weight), vjust=1.5, colour="white")
ce <- arrange(cabbage_exp, Date, Cultivar)
# y-eksenindeki etiketlerin değerini değiştireceğimiz için label_y
# adında bir değişken oluşturuyoruz
# bu değişkeni normal y değerinden daha düşük seçerek yazıyı
# aşağıya çekiyoruz.
ce <- ddply(ce, "Date", transform, label_y=cumsum(Weight)-0.65*Weight);ce
## Cultivar Date Weight sd n se label_y
## 1 c39 d16 3.18 0.9566144 10 0.30250803 1.1130
## 2 c52 d16 2.26 0.4452215 10 0.14079141 3.9710
## 3 c39 d20 2.80 0.2788867 10 0.08819171 0.9800
## 4 c52 d20 3.11 0.7908505 10 0.25008887 3.8885
## 5 c39 d21 2.74 0.9834181 10 0.31098410 0.9590
## 6 c52 d21 1.47 0.2110819 10 0.06674995 3.2545
ggplot(ce, aes(x=Date, y=Weight, fill=Cultivar)) +
geom_bar(stat="identity") +
geom_text(aes(y=label_y, label=Weight), colour="white")
# Biraz daha güzel ve doğru bir görsel haline getirmek için.
# label_y değişkenini rev() fonksiyonu ile tersine çevirebiliriz.
ggplot(ce, aes(x=Date, y=Weight, fill=Cultivar)) +
geom_bar(stat="identity", colour="black") +
geom_text(aes(y=rev(label_y),
label=paste(format(Weight, nsmall=2#basamak sayisi
), "kg")), size=4) +
guides(fill=guide_legend(reverse=TRUE)) +
scale_fill_brewer(palette="Pastel1")
# Tarihleri legend kısmına alıp x-eksenine Cultivar değişkenini alırsak
ggplot(data = ce, aes(x = Cultivar, y = Weight, fill = Date, label = label_y)) +
geom_bar(stat = "identity") +
geom_text(size = 3.5, col= "white",position = position_stack(vjust = 0.5),
label=paste(format(ce$Weight, nsmall=2#basamak sayisi
), "kg"))
1.10 Cleveland Nokta Grafiği (Making a Cleveland Dot Plot)
## 'data.frame': 25 obs. of 26 variables:
## $ id : Factor w/ 144 levels "abreubo01","alfoned01",..: 138 128 41 3 59 4 13 17 24 69 ...
## $ first: chr "Larry" "Ichiro" "Jason" "Roberto" ...
## $ last : chr "Walker" "Suzuki" "Giambi" "Alomar" ...
## $ name : chr "Larry Walker" "Ichiro Suzuki" "Jason Giambi" "Roberto Alomar" ...
## $ year : int 2001 2001 2001 2001 2001 2001 2001 2001 2001 2001 ...
## $ stint: int 1 1 1 1 1 1 1 1 1 1 ...
## $ team : Factor w/ 30 levels "ANA","ARI","ATL",..: 10 25 21 9 10 13 13 25 29 3 ...
## $ lg : Factor w/ 2 levels "AL","NL": 2 1 1 1 2 2 2 1 1 2 ...
## $ g : int 142 157 154 157 159 136 156 158 133 159 ...
## $ ab : int 497 692 520 575 587 513 577 623 463 572 ...
## $ r : int 107 127 109 113 132 79 110 118 77 113 ...
## $ h : int 174 242 178 193 197 170 191 206 153 189 ...
## $ 2b : int 35 34 47 34 54 31 55 37 31 33 ...
## $ 3b : int 3 8 2 12 2 1 5 3 5 5 ...
## $ hr : int 38 8 38 20 49 27 34 37 11 38 ...
## $ rbi : int 123 69 120 100 146 108 126 141 54 102 ...
## $ sb : int 14 56 2 30 7 5 7 5 15 9 ...
## $ cs : int 5 14 0 6 5 1 9 5 5 10 ...
## $ bb : int 82 30 129 80 98 57 92 40 39 98 ...
## $ so : int 103 53 83 71 104 57 121 110 55 82 ...
## $ ibb : int 6 10 24 5 15 14 5 5 3 20 ...
## $ hbp : int 14 8 13 4 5 3 13 9 8 2 ...
## $ sh : int 0 4 0 9 1 0 0 5 1 0 ...
## $ sf : int 8 4 9 9 5 8 6 13 1 5 ...
## $ gidp : int 9 3 17 9 14 18 8 11 5 13 ...
## $ avg : num 0.35 0.35 0.342 0.336 0.336 ...
# Yukarıda karmaşık duran nokta grafiğini biraz daha
# düzenli hale getirebiliriz.
ggplot(tophit, aes(x=avg, y=reorder(name, avg))) + # name değişkenine göre sıraladık.
geom_point(size=3) + # daha büyük noktalar için
theme_bw() + # ggplot2 de bulunan tema
theme(panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
panel.grid.major.y =
element_line(colour="grey60", # çizgilerin renki için
linetype="dashed")) # çizginin kesikli çıkması için.
# name değişkenini aşağıya aldık.
ggplot(tophit, aes(x=reorder(name, avg), y=avg)) +
geom_point(size=3) + # Use a larger dot
theme_bw() +
theme(axis.text.x = element_text(angle=60, hjust=1), # angle ile açısını
# hjust ile eksene olan uzaklığı
# belirledik.
panel.grid.major.y = element_blank(),
panel.grid.minor.y = element_blank(),
panel.grid.major.x = element_line(colour="grey60", linetype="dashed"))
# isimleri önce lg değişkenine sonra da avg değikenine göre
# sıralayalım.
nameorder <- tophit$name[order(tophit$lg, tophit$avg)]
# isimleri nameorder değişkenindeki levels'lara göre sıralayalım ve faktöre
# çevirelim
tophit$name <- factor(tophit$name, levels=nameorder)
ggplot(tophit, aes(x=avg, y=name)) +
geom_segment(aes(yend=name), xend=0, colour="grey50") + # çizgilerin nerede başlayıp
# biteceğini ve rengini belirtiyoruz.
geom_point(size=3, aes(colour=lg)) +
scale_colour_brewer(palette="Set1", limits=c("NL","AL")) +
theme_bw() +
theme(panel.grid.major.y = element_blank(), # Arkada bulunan dikey gridleri sildik.
legend.position=c(1, 0.55), # Legend'i grafiğin içine alıp konumunu
# belirttik, bu satırı yazmazsak dışarıda
# kalır.
legend.justification=c(1, 0.5)) # Legend konumu için.
# facet_grid fonksiyonunu kullanarak daha farklı bir
# grafik elde edebiliriz.
ggplot(tophit, aes(x=avg, y=name)) +
geom_segment(aes(yend=name), xend=0, colour="grey50") +
geom_point(size=3, aes(colour=lg)) +
scale_colour_brewer(palette="Set1", limits=c("NL","AL"), guide=FALSE) +
theme_bw() +
theme(panel.grid.major.y = element_blank()) +
facet_grid(lg ~ ., scales="free_y", space="free_y")