# install.packages("tidyverse", repos="https://cran.rstudio.com") # paketin yüklenmesi
library("tidyverse") # paketin aktifleştirilmesi

1 GGPLOT

library(dplyr)
library(magrittr)
library(haven)
library(plotly)
load("import/PISA_OGR_2018.rda")
miniPISA <- PISA_OGR_2018 %>%
select(CINSIYET, SINIF,KITAPSAYISI, SES, Anne_Egitim, Baba_Egitim,Okuloncesi_yil,OKUL_TUR,OKUMA_ZEVK,
       OK_YETERLIK,ODOKUMA1) 
# kategorik değişkenlerin faktör olarak kaydı
miniPISA<- miniPISA %>% mutate_if(is.labelled, sjlabelled::as_factor)
# Faktör değiskenlere düzey atama amacıyla yazılan fonksiyon
levelsnames <- function(x){
  levels(x) <- names(attr(x,"labels"))
  x
}
# yazılan fonksiyonun faktör değişkenlere uygulanması
miniPISA <-mutate_if(miniPISA,is.factor, levelsnames)
head(miniPISA)

özelleştirmeler + ile ekleniyor

#qplot(x, y, data, geom)
#ggplot(x, y, data, geom)
#ggplot( data, aes(x, y)) + geom.grafikismi()

#ggplot(x, y, data, geom="density") 
#ggplot( data, aes(x, y)) + geom.density()

1.1 density plot

ggplot(miniPISA, aes(x=ODOKUMA1))+
  geom_density(linetype=5, fill="darkorange")+
  theme_bw()

### apa formatında plot

library(papaja)
## Warning: package 'papaja' was built under R version 4.3.3
## Loading required package: tinylabels
## Warning: package 'tinylabels' was built under R version 4.3.3
ggplot(miniPISA, aes(x=ODOKUMA1))+
  geom_density(linetype=5, fill="darkorange")+
  theme_apa()

1.2 histogram

grafik_1 <- ggplot(miniPISA, aes(x=ODOKUMA1)) #ilk katmanın oluşturulması
grafik_1 # oluşturulan nesnenin kaydedilmesi

grafik_1 + geom_histogram() # histogram çizilmesi
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

### yüzey (facet) ekleme facet_wrap(~değişken, ncol=n) facet_wrap(~değişken, nrow=n)

grafik_1 +
  geom_histogram()  +       
  facet_wrap(~CINSIYET, ncol=2) # cinsiyet değişkenindeki faktörlerin sütunda yer alması
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

grafik_1 + 
  geom_histogram() +
   facet_wrap(~CINSIYET, nrow=2) # cinsiyet değişkenindeki faktörlerin satırda yer alması
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

library(haven)
miniPISA <- 
  miniPISA %>% 
  mutate_if(is.labelled, funs(as_factor(.)))
## Warning: `funs()` was deprecated in dplyr 0.8.0.
## ℹ Please use a list of either functions or lambdas:
## 
## # Simple named list: list(mean = mean, median = median)
## 
## # Auto named with `tibble::lst()`: tibble::lst(mean, median)
## 
## # Using lambdas list(~ mean(., trim = .2), ~ median(., na.rm = TRUE))
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
 ggplot(miniPISA, aes(x=ODOKUMA1)) +
  geom_histogram()+  #histogram çizilmesi
  facet_grid(SINIF~CINSIYET) # sınıf ve cinsiyete göre yüzey eklenmesi
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

 ggplot(miniPISA %>% filter(SINIF=="SINIF 9"),aes(x=ODOKUMA1) ) + 
  geom_histogram()+
  facet_wrap(~CINSIYET)+theme_apa()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

ggplot(miniPISA %>% filter(SINIF=="SINIF 9"),aes(x=ODOKUMA1) ) + 
  geom_histogram()+
  facet_grid(CINSIYET~KITAPSAYISI)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

ggplot(miniPISA %>% filter(SINIF=="SINIF 9"),aes(x=ODOKUMA1) ) + 
  geom_histogram()+
  facet_grid(CINSIYET~.)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

### ggplot’un arayüzlü kullanımı

library(esquisse)
## Warning: package 'esquisse' was built under R version 4.3.3
#esquisser()

1.3 Gruplama Değişkenleri

library(dplyr)
library(magrittr)
library(ggplot2)

p1 <- ggplot(
      miniPISA %>% 
      group_by(SINIF,CINSIYET) %>% 
      mutate(ort=mean(ODOKUMA1)) %>%  # ortalama puanların sütun olarak ekleme
        ungroup(), # gruplamanın iptal edilmesi
     aes(x=SINIF, y=ort, color=CINSIYET )) + # cinsiyete göre sınıf düzeyinde ortalamaların verilmesi
  geom_point() +  #saçılım grafiği oluşturma
  xlab("Sınıf Düzeyi")+ # x eksenine etiket verilmesi
  ylab("Ortalama Puan")+ #y eksenine etiket verilmesi
  ggtitle("Sınıf Ortalamalarının Cinsiyete Göre")
p1 # nesnenin kaydedilmesi

1.3.1 grafiğin yüzeylere bölünmesi

ggplot(miniPISA,aes(x=ODOKUMA1, y=OKUMA_ZEVK, color=CINSIYET)) + 
  geom_point() +  #saçılım grafiği çizilmesi
  facet_grid(.~SINIF)   
## Warning: Removed 69 rows containing missing values or values outside the scale range
## (`geom_point()`).

1.3.2 grafik nesnesi

p2 <- ggplot(miniPISA, aes(x=SINIF, y=ODOKUMA1)) + # x ve y eksenlerini belirleme
  geom_point() # saçılım grafiği çizme
p2

1.3.3 color, s,size ve shape

Size parametresi ile büyüklük shape parametresi ile şekil düzenlemesi yapılabilmektedir. Default değerleri sırasıyla 1 ve noktadır. Bir örnek veri seti üzerinden bu parametrelerin kullanımlarını inceleyelim.

ggplot(miniPISA, aes(CINSIYET, OK_YETERLIK)) +
  geom_point(color = "blue",size=5, shape="a") # saçılım grafiğinin rengini, 
## Warning: Removed 199 rows containing missing values or values outside the scale range
## (`geom_point()`).

Estetik, çizilmiş verinin görsel bir özelliğini ifade etmektedir. ggplot2 paketinin kullandığı estetik özellikler bulunmaktadır. Bunlar; color nokta ve diğer şekillerin renklerini, fill sekil içi doldurma rengini, size noktaların büyüklüğünü, çizgilerin kalınlığı/inceliğini, alpha saydamlık derecesini, linetype kesikli çizgi tiplerini, labels eksen veya grafik etiketlerini, shape şekilleri görselleştirmede kullanılır. Buradaki “estetik”, geomlarda/şekillerde çizilen verileri de kapsamaktadır. Bu argümanların çoğu geom içerisinde kullanılır.

1.3.4 scale

ggplot2 paketinde, scale_*() fonksiyonları çeşitli çizim estetiğinin ölçeklerini özelleştirmek için kullanılır. Bu fonksiyonlar, ggplot’unuzdaki eksenlerin, etiketlerin ve diğer görsel öğelerin görünümünü ve davranışını kontrol etmenizi sağlar.

Yaygın olarak kullanılan bazı scale_*() fonksiyonları amaçlarıyla birlikte verilmiştir. Bu fonksiyonlar, grafiklerinizin görünümünde ince ayar yapmak ve iletmek istediğiniz bilgileri etkili bir şekilde iletmelerini sağlamak için esnek bir yol sağlar.

scale_x_continuous() ve scale_y_continuous(): Bu fonksiyonlar, sürekli değişkenler için x ve y eksenlerinin ölçeklerini özelleştirmek için kullanılır. Sınırları, kesmeleri, etiketleri ve diğer özellikleri belirtebilirsiniz. Örneğin scale_x_continuous(limits = c(0, 10), breaks = seq(0, 10, by = 2)) kodu ile x ekseni limitlerini ve kesim noktalarını belirler.

scale_x_discrete() ve scale_y_discrete(): Bu fonksiyonlar x ve y eksenlerindeki kategorik(factor) değişkenler için kullanılır. Eksen etiketlerinin ve adlarının görünümünü özelleştirmenize olanak tanırlar. Örneğin scale_x_discrete(labels = c(“A”, “B”, “C”)) kodu ile kategorik(faktor) değişkenin düzeyi değiştirilebilir.

scale_color_() ve scale_fill_(): Bu fonksiyonlar, renk ve dolgu gibi farklı estetikler için renk ölçeklerini özelleştirmek için kullanılır. Renk paletlerini, etiketler ve diğer özellikleri değiştirebilirsiniz. Örneğin scale_color_manual(values = c(“red”, “blue”, “green”)) üç düzeyli bir kategorik değişkeninin renklerini ayarlar.

scale_size() ve scale_size_continuous(): Bu fonksiyonlar bir çizimdeki öğelerin boyutunu özelleştirmek için kullanılır.

scale_shape(): Bu fonksiyon, bir dağılım grafiğindeki noktaların şeklini özelleştirmek için kullanılır. Şekiller ile aşağıda yer alan 24 değer kullanılabilir.

 sekiller <- data.frame(sekil = 0:24)
ggplot(sekiller, aes(0, 0, shape = sekil)) +
  geom_point(aes(shape = sekil), size = 5, fill = 'red') +
  scale_shape_identity() +
  facet_wrap(~sekil) +
  theme_void()

ggplot(miniPISA, aes(x = ODOKUMA1,y = OK_YETERLIK, color = CINSIYET)) +
geom_point(position = "jitter") +
scale_color_manual(values = c("red", "blue"))
## Warning: Removed 199 rows containing missing values or values outside the scale range
## (`geom_point()`).

1.3.5 Limits

limits argümanı ile sınırlar belirlenir. Örneğin x ekseninin minimum ve maksimum değerleri belirlenmek isteniyorsa aşağıdaki örnekteki gibi bu argüman kullanılır.

ggplot(miniPISA, aes(x = ODOKUMA1,y = OK_YETERLIK,color = CINSIYET)) + # cinsiyete göre gruplandırma
geom_point(position = "jitter") +  # üst üste gelen noktaları kaydırma 
scale_x_continuous("Okuma Puanları",limits = c(100,900)) + # x eksenindeki okuma puanlarını sınırlandırma
scale_color_discrete("Cinsiyet",labels=c("KIZ","ERKEK"))  # cinsiyete göre 
## Warning: Removed 199 rows containing missing values or values outside the scale range
## (`geom_point()`).

1.3.6 Breaks

breaks=seq() fonksiyonu ile eksenin sınırları ve ayrımı belirlenir. seq() içine sırasıyla eksenin başlayacağı sayı, biteceği sayı ve kaçar kaçar ilerleneceği yazılır.

ggplot(miniPISA, aes(x = ODOKUMA1,
y = OK_YETERLIK,
color = CINSIYET)) +
geom_point(position = "jitter") +
scale_x_continuous("Okuma Puanları",limits = c(100,900),
         breaks=seq(100,900,100)) +
  scale_color_discrete("Cinsiyet")
## Warning: Removed 199 rows containing missing values or values outside the scale range
## (`geom_point()`).

Çıktıda görüldüğü üzere x ekseninde okuma puanları, y ekseninde okuma yeterlik puanları yer alacak seçilde saçılım grafiği çizilmiştir. x ekseni 100 ile 900 arasında sınırlandırılmış ve 100’er 100’er ayrılmıştır. Cinsiyet değişkenine göre gruplandırma yapıldığından kız ve erkek öğrencilere ait saçılım grafiği verilmiştir.

1.3.7 expand

expand argümanı ile genişletme yani birleştirme yapılır. Aşağıdaği örnekte expand=c(0,0) ile x eksen limitleri değiştirilmiştir.

ggplot(miniPISA, aes(x = ODOKUMA1,
y = OK_YETERLIK,
color = CINSIYET)) +
geom_point(position = "jitter") +
scale_x_continuous("Okuma Puanları",limits = c(100,900),
                   breaks=seq(100,900,100), expand=c(0,0)) +
scale_color_discrete("Cinsiyet")
## Warning: Removed 199 rows containing missing values or values outside the scale range
## (`geom_point()`).

1.3.8 labs

labs argümanı ile etiketleme eklenir. Grafik eksenleri (x ve y), başlık(title), alt başlık(subtitle) ve grup (color) isimlendirmeleri yapılır.

ggplot(miniPISA, aes(x = ODOKUMA1,
y = OK_YETERLIK,
color = CINSIYET)) +
geom_point(position = "jitter") +
  labs(x = "\nBasari Puanları",
       y = "\nYeterlik Puanları",
       color = "Grup")
## Warning: Removed 199 rows containing missing values or values outside the scale range
## (`geom_point()`).

1.4 bar grafiği

ggplot(miniPISA, aes(CINSIYET, fill = SINIF)) + geom_bar() + # bar grafiği
  labs(x = "Cinsiyet",
       y = "Frekans") #etiketleme yapılması

Grafik ile veri eşlemesi aynı zamanda mapping= argümanı ile de yapılabilir.

ggplot(data = miniPISA, mapping = aes(x = CINSIYET)) +
  geom_bar() 

Elde edilen çıktıda x ekseninde cinsiyet y ekseninde ise frekansların yer aldığı görülmektedir. Şimdi y ekseninde frekans değerleri yerine yüzde değerlerini alalım.

ggplot(data = miniPISA, mapping = aes(x = CINSIYET)) + 
  geom_bar(aes(y = (..count..)/sum(..count..)))+ 
  scale_y_continuous(name = "Yüzde", labels=scales::percent) 
## Warning: The dot-dot notation (`..count..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(count)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

1.4.1 scale fill

bölgeleri renklendirme

ggplot(miniPISA, aes(CINSIYET, fill = SINIF)) +
  geom_bar() +
   labs(x = "Cinsiyet",
       y = "Frekans") +
  scale_fill_manual("CINSIYET", values = c("red","blue","orange","green",
                                           "darkblue","purple"))