本文講述如何利用ggplot2繪制密度圖和直方圖
準(zhǔn)備數(shù)據(jù):
set.seed(1126)? #設(shè)置隨機(jī)種子,讓結(jié)果可重復(fù)
data <- rnorm(100)? #生成100個(gè)符合正態(tài)分布的數(shù)字
min <- floor(min(data))? ?#這一串?dāng)?shù)字的最小值向下取整
max <- ceiling(max(data))? ?#這一串?dāng)?shù)字的最大值向上取整
range <- cut(data,breaks = seq(min,max,0.5))? ?#以0.5為間隔,分割數(shù)據(jù)
data <- as.data.frame(data)
text <- as.data.frame(summary(range))? ?#此數(shù)據(jù)框?yàn)間eom_text做準(zhǔn)備
text$x <- seq(min+0.25,max-0.25,0.5)? ? #設(shè)置圖中標(biāo)記文本的橫坐標(biāo)
colnames(text)[1] <- "count"
text$prop <- proportions(text$count)? ? #計(jì)算構(gòu)成比
開始畫圖:
ggplot(data = data,aes(data,..density../2))+? ? ? # 縱坐標(biāo) = 頻率/組距,我這里組距設(shè)置的是0.5,因此我又除以2,讓縱坐標(biāo)表示頻率。
? geom_density(size = 1.2,color = "skyblue")+? ?#設(shè)置顏色
? geom_histogram(color = "yellow",fill = "deeppink",breaks = seq(min,max,0.5),alpha = 0.5)+
? coord_cartesian(expand = F,xlim = c(min-0.2,max+0.2),ylim = c(0,max(text$prop)+0.02))+
? scale_y_continuous(breaks = seq(0,0.5,0.05))+
? scale_x_continuous(breaks = seq(min,max,1))+? ? #這兩個(gè)函數(shù)設(shè)置坐標(biāo)軸顯示多少刻度點(diǎn)
? labs(x = "",y = "Frequency")+
? geom_text(data = text,aes(x,y = prop+0.005,label = prop))+
? theme(panel.background = element_blank(),
? ? ? ? panel.grid.major.y = element_line(colour = "grey",linetype = 2),
? ? ? ? axis.line = element_line(colour = "black",size = rel(2),arrow = arrow(angle = 30,length = unit(0.1,"inches"))),? #為坐標(biāo)軸添加箭頭
? ? ? ? axis.title = element_text(size = rel(1.2)),
? ? ? ? axis.text.x = element_text(size = rel(1.5),hjust = 1),
? ? ? ? axis.text.y = element_text(hjust = 1,size = rel(1.5)),
? ? ? ? axis.ticks = element_line(size = rel(1.5)),
? ? ? ? plot.margin = margin(15,9,9,9))