15 Gorselleştirme
Grafikler bir veri kümesini anlamamıza yardımcı olur ve örüntüyü yorumlayabilmek önemli bir araçtır. Grafikler veriyi betimlemek amacıyla kullanılır.
Grafiklerin olabildiğince ayrıntı içermesine bunu yaparken de ayrıntıların ne kadarına yorumlayabileceğinize odaklanın.
Grafikleri sunarken editoryal kararlar gereklidir. Vurgulamak istediğiniz temel özellikleri vurgulayın. Gereksiz ayrıntıları ortadan kaldırın.
-
Grafik sistemleri
Base: öğrenmesi en kolay olan
Grid: diğer araçları geliştirmek için güçlü moduller
lattice: gridler üzerine kurulu genel amaçlı grafikler
ggplot2: grafiklerin grammeri
tidyverse
paketi veri düzenlemeleri, görselleştirmeleri, modellemeleri kolay bir şekilde yapabilmemizi sağlayan, R'ın birçok paketini içinde bulunduran pakettir. Bu paketin içeriğinde veri görselleştirme amacıylaggplot2
paketi de yer almaktadır.
# install.packages("tidyverse", repos="https://cran.rstudio.com")
library("tidyverse")
Grafikler oluşturulurken, genellikle birden fazla değişkene ilişkin gözlemlerin yer aldığı veri setleri kullanılır.
Grafiklerin kolay okunması adına
PISA_OGR_2018
veri setinden veri sayısının azaltılması amacıyla select() fonksiyonu ile bazı değişkenler seçilmiştir. Veri setinde sadece 9. ve 10. sınıflar filitrelenmiştir.Faktor olan değişlenlerde
to_factor
fonksiyonu ile kaetgorik hale dönüştürülmüştür.
library(tuev)
library(sjlabelled)
data(PISA_OGR_2018)
df1 <- 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ı
library(labelled)
df1 <- df1 %>% mutate(across(.cols=c(CINSIYET:KITAPSAYISI,
Anne_Egitim:OKUL_TUR), labelled::to_factor))
df1 <- df1 %>% filter(SINIF == "SINIF 9" | SINIF == "SINIF 10")
15.1 ggplot
Grafikleri iyi bilinen ggplot2 paketi grafikleri üzerinden işleyeceğiz.
ggplot2 paketindeki grafikler genellikle daha iyi bir görünüme sahiptir ancak daha gelişmiş kodlama becerileri gerektirir (daha fazla bilgi edinmek için "Graphics in R with ggplot2" makalesine bakın).
Grafiklerinizi yayınlamanız veya paylaşmanız gerekiyorsa, mümkünse ggplot2 kullanmanızı öneririm, aksi takdirde varsayılan grafikler işinizi görecektir.
İpucu: Yakın zamanda esquisse eklentilerinden ggplot2 oluşturucusunu keşfettim. Kendiniz kodlamak zorunda kalmadan ggplot2 paketinden nasıl kolayca grafik çizebileceğinizi görün.
- Bu sayfa görüntülenen tüm grafikler özelleştirilebilir. Örneğin, başlığı, x ve y ekseni etiketlerini, rengi vb. düzenlemek mümkündür.
library(ggplot2)
ggplot(df1,aes(x=ODOKUMA1)) + geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

ggplot2 paketi, lattice paketi gibi verilerdeki birden çok değişkeni aynı grafik üzerinde göstermek ve veriler arasındaki çok düzeyli ilişkileri özetlemek amacıyla geliştirilmiştir.
Açılımı grafiğin grameri (grammer of graphics) şeklindedir.
lattice grafiklerindeki gibi grafikler nesneler olarak kaydedilmekte ve birden çok grafiği tek bir grafiğin üzerinde gösterebilmektedir.
-
lattice paketine göre en önemli farkı katman mantığıyla çalışmasıdır.
- Metin ekleme,
- renklendirme,
- açıklama kutucukları vb... özelleştirmeler toplama (+) işareti ile kodlara eklenebilmektedir.
-
ggplot2 paketnde Temel Fonksiyonların Kullanımı aşağıdaki şekildedir.
- **qplot()** ve **ggplot()** fonksiyonları - **qplot()**, hızlı grafik (quick plot) çizimi anlamına gelmektedir. - **qplot(x, y, data, geom)** veya - **ggplot(x, y, data, geom)** veya - **ggplot( data, aes(x, y)) + geom.grafikismi()**
aes() her bir değişkenin alacağı rolü belirlemede kullanılır.
geom() argümanı çizilecek grafiği türünü belirlemek için kullanılmaktadır. Geometrik nesneler (geometric objects) olarak adlandırılmaktadır.
-
Örneğin yoğunluk grafiği çizilmek istendiğinde;
ggplot(x, y, data, geom="density") veya
ggplot( data, aes(x, y)) + geom.density()
ggplot2 paketinde yer alan tüm grafikler aşağıda listelenmiştir.
library(ggplot2)
ls(pattern = '^geom_', env = as.environment('package:ggplot2'))
## [1] "geom_abline" "geom_area" "geom_bar"
## [4] "geom_bin_2d" "geom_bin2d" "geom_blank"
## [7] "geom_boxplot" "geom_col" "geom_contour"
## [10] "geom_contour_filled" "geom_count" "geom_crossbar"
## [13] "geom_curve" "geom_density" "geom_density_2d"
## [16] "geom_density_2d_filled" "geom_density2d" "geom_density2d_filled"
## [19] "geom_dotplot" "geom_errorbar" "geom_errorbarh"
## [22] "geom_freqpoly" "geom_function" "geom_hex"
## [25] "geom_histogram" "geom_hline" "geom_jitter"
## [28] "geom_label" "geom_line" "geom_linerange"
## [31] "geom_map" "geom_path" "geom_point"
## [34] "geom_pointrange" "geom_polygon" "geom_qq"
## [37] "geom_qq_line" "geom_quantile" "geom_raster"
## [40] "geom_rect" "geom_ribbon" "geom_rug"
## [43] "geom_segment" "geom_sf" "geom_sf_label"
## [46] "geom_sf_text" "geom_smooth" "geom_spoke"
## [49] "geom_step" "geom_text" "geom_tile"
## [52] "geom_violin" "geom_vline"
15.2 Histogram
- Aşağıdaki kod sadece ilk katmanı oluşturur.

15.2.1 Katman eklenmesi
grafik_1 + geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

15.2.2 Yüzey eklenmesi
grafik_1 +
geom_histogram() +
facet_wrap(~CINSIYET, nrow=2)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

grafik_1 +
geom_histogram() +
facet_wrap(~SINIF, nrow=2)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

-
facet_grid fonksiyonu ise hem tek hem de iki değişkenin panellerde gösterimi için
facet_grid(satırdeğişkeni~sütundeğişkeni)
facet_grid(satırdeğişkeni~.) veya
facet_grid(.~sütundeğişkeni)
Yüzeyde kategorik değişkenlerin düzeylerini görebilmek için factor değişken olarak tanımlamak gerekir.
ggplot(df1, aes(x=ODOKUMA1)) +
geom_histogram()+
facet_grid(SINIF~CINSIYET)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

- Yüzeylerin sütunda oluşturulması
ggplot(df1,aes(x=ODOKUMA1))+
geom_histogram()+
facet_grid(.~CINSIYET)

- Yüzeylerin satırlarda oluşturulması
ggplot(df1,aes(x=ODOKUMA1))+
geom_histogram()+
facet_grid(CINSIYET~.)

ggplot(df1,aes(x=ODOKUMA1))+
geom_histogram()+
facet_grid(.~SINIF)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

ggplot(df1,aes(x=ODOKUMA1))+
geom_histogram()+
facet_grid(SINIF~.)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

15.2.3 gruplama değişkenleri
- Renklendirme, sembol şekli, sembol büyüklüğü ve çizgi türü belirleyen fonksiyonlar yardımıyla gruplama yapılmaktadır.
15.2.3.1 color ile gruplandırma
- Açıklama kutucukları otomatik çıkar!
p1 <- ggplot(
df1 %>%
group_by(SINIF,CINSIYET) %>%
mutate(ort=mean(ODOKUMA1)) %>% ungroup(),
aes(x=SINIF, y=ort, color=CINSIYET )) +
geom_point() +
xlab("Sınıf Düzeyi")+
ylab("Ortalama Puan")
p1

- Yüzey eklenmiş garfiklerde de gruplama değişkeni kullanılabilir.
ggplot(df1,aes(x=ODOKUMA1,y=OK_YETERLIK,color=CINSIYET)) +
geom_point()+
facet_grid(.~SINIF)
## Warning: Removed 190 rows containing missing values (`geom_point()`).

15.3 Grafik nesnesi
- Oluşturulan grafik p nesnesine atanmıştır. p nesnesine + ile katmanlar eklenebilir.
- Kategorik degişkenler eksen değerlerini belirler.
p <- ggplot(mtcars, aes(cyl, mpg)) +
geom_point()
p

- cyl değişkenin sadece 4,6 ve 8 değerlerini eksende belirtmek için factor olarak tanımlamak gerekir.
ggplot(mtcars, aes(factor(cyl), mpg)) +
geom_point()

- Grafikler üç bölümden oluşur
15.4 AESTHETICS
- fill
- color
- size
- shape
- alpha
- linetype
- labels
15.4.1 color parametresi
ggplot(df1, aes(CINSIYET, OK_YETERLIK)) +
geom_point(color = "blue")
## Warning: Removed 190 rows containing missing values (`geom_point()`).

15.4.2 size ve shape parametresi
- her iki parametrenin de olağan değeri 1 dir.
ggplot(df1, aes(CINSIYET, OK_YETERLIK)) +
geom_point(color = "blue",size=5,shape="a")
## Warning: Removed 190 rows containing missing values (`geom_point()`).

- color argümanı ile renklendirme
ggplot(df1, aes(CINSIYET, OK_YETERLIK, color = SINIF)) +
geom_point()
## Warning: Removed 190 rows containing missing values (`geom_point()`).

Üstüse gelen noktalar için position
identity
dodge
stack
fill
jitter
jitterdodge
nudge
ggplot(df1, aes(CINSIYET, OK_YETERLIK, color = SINIF)) +
geom_point()
## Warning: Removed 190 rows containing missing values (`geom_point()`).

ggplot(df1, aes(CINSIYET, OK_YETERLIK, color = SINIF)) +
geom_point(position = "jitter")
## Warning: Removed 190 rows containing missing values (`geom_point()`).

15.4.3 size parametresi
- parametreler için veri setinden bir değişken değeri seçilebilir.
ggplot(df1, aes(CINSIYET, OK_YETERLIK, size = SINIF)) +
geom_point()
## Warning: Using size for a discrete variable is not advised.
## Warning: Removed 190 rows containing missing values (`geom_point()`).

- size parametresi üst üste binen noktaları kaydırarak ayırma
ggplot(df1, aes(CINSIYET, OK_YETERLIK, size = SINIF)) +
geom_point(position = "jitter")
## Warning: Using size for a discrete variable is not advised.
## Warning: Removed 190 rows containing missing values (`geom_point()`).

15.5 Katmanlar
15.5.1 alpha
- Şeffaflık düzeyi için alpa
ggplot(df1, aes(ODOKUMA1, OK_YETERLIK, color = SINIF)) +
geom_point(alpha = 0.4)
## Warning: Removed 190 rows containing missing values (`geom_point()`).

- Katmanları nesneye ekleme grafik1 adlı nesneye istenilen katmanlar eklenebilir.
grafik1 <- ggplot(df1, aes(ODOKUMA1, OK_YETERLIK, color = SINIF))
grafik1 +geom_point(alpha = 1.2)
## Warning: Removed 190 rows containing missing values (`geom_point()`).

grafik1 adlı nesneye CINSIYET değişkenine göre şekil ekleme
grafik1 +geom_point(aes(shape=CINSIYET))
## Warning: Removed 190 rows containing missing values (`geom_point()`).

15.5.2 text
Değişken adları text komutu ile veri sembolü olarak eklenebilir. Gösterim amacıyla df veri setinin sadece ilk 10 satırı kullanılmıştır.

15.5.3 Scale
Scale fonksiyonları - scale_x() - scale_y() - scale_color() - scale_fill() - scale_shape() - scale_linetype() - scale_size() - scale_x_continuous() - scale_y() - scale_color_discrete() - scale_fill() - scale_shape() - scale_linetype() - scale_size()
ggplot(df1, aes(x = ODOKUMA1,y = OK_YETERLIK, color = CINSIYET)) +
geom_point(position = "jitter") +
scale_x_continuous("Okuma Puanları") +
scale_color_discrete("Cinsiyet")
## Warning: Removed 190 rows containing missing values (`geom_point()`).

15.5.4 *limits
ggplot(df1, aes(x = ODOKUMA1,
y = OK_YETERLIK,
color = CINSIYET)) +
geom_point(position = "jitter") +
scale_x_continuous("Okuma Puanları",limits = c(100,900)) +
scale_color_discrete("Cinsiyet")
## Warning: Removed 190 rows containing missing values (`geom_point()`).

15.5.5 *breaks
ggplot(df1, 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 190 rows containing missing values (`geom_point()`).

15.5.6 expand
ggplot(df1, 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 190 rows containing missing values (`geom_point()`).

15.5.7 labs
ggplot(df1, aes(x = ODOKUMA1,
y = OK_YETERLIK,
color = CINSIYET)) +
geom_point(position = "jitter") +
labs(x = "\nBasari Puanları",
y = "\nYeterlik Puanları",
color = "Grup")
## Warning: Removed 190 rows containing missing values (`geom_point()`).

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

15.8 Bar Grafikleri

# df2 <- mutate(df2, Cinsiyet = factor(
# CINSIYET,
# c(1, 2),
# c("kiz", "erkek")
# ))
ggplot(data = df1, mapping = aes(x = CINSIYET)) +
geom_bar()

ggplot(data = df1, 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.

15.9 Kaynaklar
ggplot2: elegant graphics for data analysis by Hadley Wickham, Danielle Navarro, and Thomas Lin Pedersen
Fundamentals of Data Visualization by Claus O. Wilke
Data Visualization: A practical introduction by Kieran Healy
😕
😄