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")