3 用ggplot2制图
代码提供:
张洛宏 徐颖 陈宇祥 柯颖婷
主要内容: -散点图 抖散图 箱线图 直方图 密度图 提琴图 山峦图 椭圆图 2D密度图 -图的分面 -图上标注文本
3.1 读取数据
#数据准备
library(ggplot2)
library(tidyverse)
data(diamonds)
#使用ggplot2的自带数据集diamonds
set.seed(100)
<- diamonds[sample(nrow(diamonds),1000),]
dsmall head(dsmall)
## # A tibble: 6 × 10
## carat cut color clarity depth table price x y z
## <dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
## 1 1.26 Ideal G SI1 59.6 57 6738 7.08 7.04 4.21
## 2 0.7 Ideal D VS2 62.7 57 3448 5.65 5.67 3.55
## 3 0.36 Ideal F SI1 62 56 770 4.59 4.54 2.83
## 4 2.1 Premium J SI2 59.1 58 12494 8.46 8.4 4.98
## 5 1.21 Premium D SI2 59.7 58 4946 7.06 6.96 4.19
## 6 2 Good E SI2 64.7 57 15393 7.75 7.86 5.05
3.2 散点图 抖散图 箱线图 直方图
散点图
ggplot(data=dsmall,aes(x=carat,y=price))+
geom_point()
#设置颜色
ggplot(data=dsmall,
aes(x=carat,y=price,color=cut))+
geom_point()
抖散图
ggplot(data=dsmall,aes(x=cut,y=x))+
geom_point()
%>%
dsmall ggplot(aes(x = cut, y =x)) +
geom_jitter() #为每个点的位置增加了少量的随机变化,能够处理点相互重叠的问题
箱线图
ggplot(data=dsmall,
aes(x=cut,y=price,fill=cut,color=cut))+
geom_boxplot(alpha=0.7)
#添加标题、横纵轴标签
ggplot(data=dsmall,
aes(x=cut,y=price,fill=cut,color=cut))+
geom_boxplot(alpha=0.7)+
labs(x="钻石切工",y="钻石价格",title="钻石切工和钻石价格关系分布箱线图")
直方图
ggplot(data=dsmall,aes(x=price))+
geom_histogram(bins=30)
3.3 密度图 提琴图 山峦图 椭圆图 2D密度图
密度图
ggplot(data=dsmall,
aes(x=price,fill=cut))+
geom_density(alpha=0.5)
提琴图
ggplot(data=dsmall,
aes(x=cut,y=price,fill=cut))+
geom_violin(alpha=0.5)
山峦图
x为连续变量,y为离散变量
library(ggridges)
%>%
dsmall ggplot(aes(x = depth ,y = cut ,fill = cut)) +
::geom_density_ridges() ggridges
## Picking joint bandwidth of 0.378
椭圆图
%>%
dsmall ggplot(aes(x = log(carat), y = price)) +
geom_point() +
stat_ellipse(type = "norm", level = 0.95) #level=0.95为95%置信区间
2D密度图
%>%
dsmall ggplot(aes(x =carat , y = depth)) +
geom_bin2d() #作长方形分块的二维直方图
3.4 图的分面{facet_grid() / facet_wrap()}
%>%
dsmall ggplot(aes(x = carat)) +
geom_density() +
facet_grid(. ~ cut)
%>%
dsmall ggplot(aes(x = carat, fill = cut)) +
geom_histogram() +
facet_grid(cut ~ .)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
%>%
dsmall ggplot(aes(x = carat, y = stat(density))) +
geom_histogram(aes(fill = cut)) +
geom_density() +
facet_grid(cut ~ .)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
3.5 图上标注文本
#在图上用文本标注
library(ggforce)
%>%
dsmall ggplot(aes(x = carat, y = price)) +
geom_point() +
::geom_mark_ellipse(aes(
ggforcefilter = carat > 2.5,
label = "carat >2.5"))