20 Latihan
20.1 Latihan 1
Buatlah Grafik seperti di atas dengan menggunakan grafik bawaan R dan package ggplot2 dengan ketentuan sebagai berikut:
- Data Kurs Rupiah ke Dolar dibangkitkan berdasarkan \(N(15.1.5)\) untuk sebelum Covid19 dan sesudah Covid19 \(N(13.1.5)\).
- Titik Sebelum Covid19 berwarna
steelblue
dan sesudah Covid19 berwarnadarkgreen
. - Garis pembatas berada pada Hari ke-60 dan berwarna
maroon3
- Tulisan Sebelum Covid19 dan Setelah Covid19 berada ditengah2 sumbu x data masing-masing dan untuk sumbu y berada di posisi 18.
20.2 Jawaban 1
Grafik bawaan
set.seed(12)
#sebelum covid19
x1 <- 1:59
y1 <- rnorm(59,13,1.5)
#sesudah covid19
x2 <- 60:109
y2 <- rnorm(50,15,1)
plot(x1,y1,type="p",xlab="Hari ke-",ylab="Kurs Rupiah ke Dollar",
main="Data (Buatan) Kurs Rupiah ke Dollar Jan-April 2020 ",
pch=16,cex=1.5,xlim = c(1,110), ylim = c(10,20),col="steelblue")
# menambahkan plot data setelah covid19
points(x2,y2,cex=1.5,col="dark green")
#menambahkan garis vertikal
abline(v=60,col="maroon3",lwd=2.5)
#menambahkan tulisan
text(x=mean(x1),y=18,labels="Sebelum Covid19",cex=1)
text(x=mean(x2),y=18,labels="Sesudah Covid19",cex=1)
Note
- Setelah menggunakan fungsi
plot
, kita bisa menambahkan jenis plot lain dengan fungsipoints
(plot titik),line
(plot garis),text
(plot tulisa),abline
(plot garis miring/horizontal/vertikal) dan sebagainya. - Argumen
type="p"
merupakan argumen untuk menentukan tipe grafik apa yang ingin dibuat. - Argumen
lwd
merupakan argumen untuk menentukan ketebalan garis - Fungsi
abline
memilki argumena
danb
yang merupakan intercept dan koefisien persamaan garis. Argumenh
danv
masing-masing digunakan untuk membuat garis horizontal dan vertikal pada titik tertentu`. - Argumen
xlim
danylim
merupakan argumen untuk menamplikan batas bawah dan atas dari sumbu x dan sumbu y. Argumen ini harus diisi jika penambahan data baru berada diluar nilai maksimum dan minimum data awal agar dapat ditampilkan oleh plot. ggplot
set.seed(12)
#sebelum covid19
x1 <- 1:59
y1 <- rnorm(59,13,1.5)
#sesudah covid19
x2 <- 60:109
y2 <- rnorm(50,15,1)
ggplot()+geom_point(aes(x1,y1),col="steelblue",size=2.5)+
# menambahkan plot data setelah covid19
geom_point(aes(x2,y2),col="darkgreen",size=2.5,shape=1)+
# menambahkan garis vertikal
geom_vline(xintercept = 60, col="maroon3",size=1.25)+
# menambahkan tulisan
geom_text(aes(x=mean(x1),y=18,label="Sebelum Covid19"))+
geom_text(aes(x=mean(x2),y=18,label="Sesudah Covid19"))+
xlab("Hari ke-")+
ylab("Kurs rupiah ke dollar")+
ggtitle("Data (Buatan) Kurs Rupiah ke Dollar Jan-April 2020 ")+
# mengubah tema sehingga background putih
theme_bw()
Note
- Argumen
size
digunakan untuk mengatur ukuran titik ataupun ketebalan pada garis. Nilai argumen ini tidak sama dengancex
danlwd
pada plot bawaan. Misalnya sajacex=1.5
tidak menghasilkan ukuran yang sebanding dengansize=1.5
. - Argumen
shape
digunakan untuk menentukan bentuk titik. Argumen ini bisa diisi dengan nilai yang sama dengan argumenpch
dan menghsalikan bentuk titik yang sama. Misalnya sajapch=1
merupakan bentuk titik yang berlubang tengahnya, begitu pulashape=1
akan menghasilkan bentuk titik yang berlubang tengahnya juga. - Fungsi
geom_text()
selalu membutuhkan argumenlabel
didalamaes
-nya. Argumenlabel
dapat berupa vektorcharacter
(ukuran vektor sebanyak observasi datanya) maupuncharater
biasa. Dalam kasus ini karena titiknya hanya satu makalabel
yang dibutuhkan adalahcharacter
biasa.
20.3 Latihan 2
Buatlah grafik seperti gambar dibawah ini dengan \(t=[-5,5]\) dan kemudian gantilah setiap titiknya dengan huruf N. Gunakanlah grafik bawaan R dan ggplot2!
20.4 Jawaban 2
Grafik Bawaan
Tanpa N
t <- seq(-5,5,0.1)
x <- 16*(sin(t)^3)
y <- 13*cos(t)-5*cos(2*t)-2*cos(3*t)-cos(4*t)
plot(x,y,pch=16,xlab = expression(16*sin(t)^3),
ylab =expression( 13*cos(t)-5*cos(2*t)-2*cos(3*t)-cos(4*t)))
Dengan N
t <- seq(-5,5,0.1)
x <- 16*(sin(t)^3)
y <- 13*cos(t)-5*cos(2*t)-2*cos(3*t)-cos(4*t)
plot(x,y,pch="N",xlab = expression(16*sin(t)^3),
ylab =expression( 13*cos(t)-5*cos(2*t)-2*cos(3*t)-cos(4*t)))
ggplot2
Tanpa N
t <- seq(-5,5,0.1)
x <- 16*(sin(t)^3)
y <- 13*cos(t)-5*cos(2*t)-2*cos(3*t)-cos(4*t)
qplot(x,y,geom = "point")+
xlab(expression(16*sin(t)^3))+
ylab(expression( 13*cos(t)-5*cos(2*t)-2*cos(3*t)-cos(4*t)))+
theme_bw()
Dengan N
t <- seq(-5,5,0.1)
x <- 16*(sin(t)^3)
y <- 13*cos(t)-5*cos(2*t)-2*cos(3*t)-cos(4*t)
qplot(x,y,geom = "text",label="N")+
xlab(expression(16*sin(t)^3))+
ylab(expression( 13*cos(t)-5*cos(2*t)-2*cos(3*t)-cos(4*t)))+
theme_bw()
Note
Fungsi expression
digunakan untuk menampilkan font tulisan dan simbol matematika dalam grafik.
20.5 Latihan 3
Buatlah grafik seperti gambar dibawah ini dengan \(\alpha=[0,1]\). Gunakanlah grafik bawaan R dan ggplot2!
myMu <- 0.5
mySigma <- 0.25
curve(expr = 100*(x^3-x^2)+15, from=0, to=1,col="darkred",cex =2,
xlab = expression(alpha),
ylab = expression(100 %*% (alpha^3 - alpha^2) + 15),
main = expression(paste("Function: ",
f(alpha) == 100 %*% (alpha^3 - alpha^2) + 15)))
text(0.1, 0.1, bquote(sigma[alpha] == .(mySigma)), lwd=2)
text(0.6, 7, paste("(The mean is ", myMu, ")", sep=""), cex=1.25)
text(0.5, 12,
bquote(paste("Variance : ", sigma^2 == .(mySigma^2))))
20.6 Jawaban 3
Grafik bawaan R
myMu <- 0.5
mySigma <- 0.25
curve(expr = 100*(x^3-x^2)+15, from=0, to=1,col="darkred",cex =2,
xlab = expression(alpha),
ylab = expression(100 %*% (alpha^3 - alpha^2) + 15),
main = expression(paste("Function: ",
f(alpha) == 100 %*% (alpha^3 - alpha^2) + 15)))
text(0.1, 0.1, bquote(sigma[alpha] == .(mySigma)), lwd=2)
text(0.6, 7, paste("(The mean is ", myMu, ")", sep=""), cex=1.25)
text(0.5, 12,
bquote(paste("Variance : ", sigma^2 == .(mySigma^2))))
Note
- fungsi
curve
digunakan untuk membuat grafik fungsi hanya dengan memasukan batas atas dan batas bawah domain fungsi tersebut. fungsi ini paling tidak membutuhkan argumenexpr
(berbentuk fungsi dari \(x\) \(f(x)\)), argumenfrom
(batas bawah) dan argumento
(batas atas). Pada kasus diatas, kita ingin membuat grafik dari fungsi \(f(\alpha)=100(\alpha^3 - \alpha^2) + 15\), karena argumenexpr
harus berbentuk fungsi dari \(x\) maka yang harus diinputkan adalah \(f(x)=100(x^3 - x^2) + 15\). - Fungsi paste digunakan untuk menggabungkan beberapa tipe data R menjadi
character
.
Contoh:
Misal kita ingin menampilkan x=3
pada judul suatu grafik, dengan nilai 3 tersimpan pada objek a
.
untuk menampilkan nilai yang tersimpan pada suatu objek pada fungsi bquote
digunakan .(xxx)
, dengan xxx
dianggap sebagai nama objek R.
4. Simbol %*%
akan menambilkan simbol \(\times\) pada plot.
ggplot2
myMu <- 0.5
mySigma <- 0.25
x <- seq(0,1,0.1)
ggplot()+
stat_function(aes(x),fun = function(x) 100*(x^3-x^2)+15,
geom="line",col="darkred",size=1.25)+
xlab(expression(alpha))+
ylab(expression(100 %*% (alpha^3 - alpha^2) + 15))+
ggtitle(expression(paste("Function: ",
f(alpha) == 100 %*% (alpha^3 - alpha^2) + 15)))+
geom_text(aes(x=0.1,y=1,
label= deparse(bquote(sigma[alpha] == .(mySigma)))),
parse = TRUE,size=5)+
geom_text(aes(x=0.6,y=7,
label= paste("(The mean is ", myMu, ")", sep="")),
size=5)+
geom_text(aes(0.5, 12,
label = deparse(bquote(
paste("Variance : ", sigma^2 == .(mySigma^2))))),
parse = TRUE, size=5)+theme_bw()
Note
- Fungsi
deparse
dan argumenparse=TRUE
dibutuhkan agar hasil daribquote
bisa ditampilkan di plot stat_function
merupakan fungsi yang sepadan seperti fungsicurve
, hanya sajastat_function
variabel untuk mengisi sumbu \(x\) harus terdefinisi lebih dahulu. Hal lain yang perlu diperhatikan adalah isi argumenfun
harus diawali denganfunction(xxx)
denganxxx
merupakan sembarang variabel.
20.7 Latihan 4
Buatlah gambar dibawah ini dengan menggunakan grafik bawaan R dan ggplot2.
20.8 Jawaban 4
Grafik Bawaan
set.seed(12)
y <- rchisq(10000,df=4)
hist(y,freq=FALSE,ylim=c(0,0.3),
main=expression(paste("Grafik distribusi ",
chi^2,(4)," dengan 10rb amatan" ))
,col="steelblue")
curve(expr=dchisq(x,df=4),from = min(y),to = max(y),col="red",lty=2,lwd=3,add=TRUE)
Note
- Fungsi
dchisq
merupakan fungsi pdf dari distribusi \(\chi^2\). Semua fungsi pdf dari distribusi lain dapat diisikan ke argumenexpr
, hanya saja argumen pertamanya harus berupa x. Contoh fungsi pdf normal menjadidnorm(x,mu=10,sd=1)
. - Argumen
freq=FALSE
berarti sumbu y yang ditampilkan pada histrogram berupa peluang. Jikafreq=TRUE
sumbu x nya berupa frekuensi.
ggplot2
set.seed(12)
y <- rchisq(10000,df=4)
ggplot()+geom_histogram(aes(x=y,y = ..density..),fill="steelblue",
col="black")+
stat_function(aes(x=y),fun = dchisq,args = list(df=4),geom = "line",
col="red",size=1.25,lty=2)+
ggtitle(expression(paste("Grafik distribusi ",chi^2,(4),
" dengan 10rb amatan" )))+
theme_bw()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Note
- Agar histogram sumbu y nya merupakan peluang maka sumbu y pada fungsi
aes
yang ada di dalam fungsigeom_histrogram
diisi dengan argumen..density..
. Jika ingin dalam frequensi maka argumeny=..density..
dihapus saja.
20.9 Latihan 5
Buatlah grafik seperti gambar dibawah ini dengan 10000 amatan. Gunakanlah grafik bawaan R dan ggplot2!
## Jawaban 5
set.seed(12)
x <- rbinom(10000,prob = 0.5,size = 5)
par(mfrow=c(1,2))
barplot(table(x),main=paste0("Bin(5,0.5) frekuensi" ),ylab="frekuensi")
## membuat persentase
persen_x = table(x)/sum(table(x))*100
barplot(persen_x,main=paste0("Bin(5,0.5) persentase" ),ylab="persentase(%)")
Note
Fungsi
table
digunakan untuk melakukan tabluasi jumlah elemen yang sama pada suatu vektor. Output dari fungsitable
adalah vektor numerik yang setiap elemenya memiliki nama.Input data pada fungsi
barplot
merupakan vektor numerik yang setiap elemenya memiliki nama.
Contoh:
ggplot
set.seed(12)
x <- rbinom(10000,prob = 0.5,size = 5)
plot1 <- ggplot()+
geom_bar(aes(x))+
scale_x_continuous(breaks = 0:5)+
ylab("frekuensi")+
ggtitle(paste0("Bin(5,0.5) frekuensi" ))+theme_bw()
plot2 <- ggplot()+
geom_bar(aes(x,y=((..count..)/sum(..count..))*100))+
scale_x_continuous(breaks = 0:5)+
ylab("persentase(%)")+
ggtitle(paste0("Bin(5,0.5) persentase" ))+theme_bw()
ggarrange(plot1,plot2)
Note
- fungsi
scale_x_continuous(breaks=0:5)
digunakan untuk menampilkan angka 0 sampai 5 pada sumbu x. Jika fungsi ini dihilangkan maka angka yang ditampilkan pada sumbu x akan secara otomatis didefinisikan. - fungsi
ggarrange
digunakan untuk menggabungkan dua plotggplot
dalam satu layout. fungsi ini berasal dari packageggpubr
## Latihan 6
Buatlah keempat jenis Grafik dengan layout seperti pada gambar di bawah ini. Data dibangkitkan berdistribusi \(N(5,1)\) sebanyak 100 amatan menggunakan grafik bawaan R dan ggplot2 dengan memperhatikan beberapa hal berikut:
- Urutan pengerjaan dilakukan sesuai nomor urut pada gambar
- Untuk plot garis dan scatterplot sumbu x nya adalah angka 1 sampai 10 dan sumbu y nya adalah data yang dibangkitkan
20.10 Jawaban 6
Grafik Bawaan
## [1] 1 2 3 4
ggplot2
set.seed(12)
y <- rnorm(100,5,1)
x <- 1:100
plot1 <- qplot(y = y,geom = "boxplot")+
ggtitle("Boxplot Bilangan Acak Normal")+
theme_bw()
plot2 <- ggplot()+
geom_line(aes(x,y),col="blue")+
ggtitle("Plot garis Bilangan Acak Normal")+
theme_bw()
plot3 <- ggplot()+
geom_histogram(aes(x=y,y = ..density..),fill="steelblue",col="black")+
stat_function(aes(x = y),fun = dnorm,
args = list(mean=5,sd=1),geom = "line",
col="red",size=1.25,lty=2)+
ggtitle("Histogram Bilangan Acak Normal")+
theme_bw()
plot4 <- ggplot()+
geom_point(aes(x,y),col=rainbow(100))+
ggtitle("Scatter Plot Bilangan Acak Normal")+
theme_bw()
ggarrange(plot4,plot3,plot2,plot1)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.