ggplot2_散点图
2016-03-06 09:25
302 查看
散点图可以用来描述两个连续变量之间的关系,一般在做数据探索分析时会使用到,通过散点图发现变量之间的相关性强度、是否线性关系等。
1.绘制简单的散点图
2.绘制分组的散点图
可将分组变量(因子或字符变量)赋值给颜色或形状属性,实现分组散点图的绘制
注意点的形状,21-25之间的点的形状,既可以赋值边框颜色,又可以赋值填充色。
3.将离散型变量或因子映射给颜色属性或形状属性
图例上,颜色越深而对应的值越小,如何将值的大小与颜色的深浅保持一致?只需要人为的设置色阶,从低到高设置不同的颜色即可
4.重叠点的处理
当数据点非常多时,可能会导致数据点重叠严重,处理方法如下:
1)使用半透明的点
2)数据分箱,并用矩形表示{stat_bin2d()}
3)数据分箱,并用六边形表示{stat_binhex()}
4)使用二维密度估计,并将等高线添加到散点图中{stat_density2d()}
5)向散点图中添加边际地毯
默认情况下,stat_bin2d()函数将x轴和y轴的数据点各分位30段,即参数900个箱子;用户还可以自定义分段个数,以及箱子在垂直和水平方向上的宽度。
分箱的具体做法是,将点分箱,并统计每个箱中点的个数,然后通过某种方法可视化这个数量。
6.如果一个变量为离散变量,另一个变量为连续变量时,如何绘制散点图?
上图中也出现了严重的重叠,有以下两种处理方法:
1)使用扰动图(位置调整)
2)使用箱线图(适用于一个或两个变量为离散变量)
默认情况下,扰动函数在每个方向(水平和垂直)上添加的扰动值为数据点最小精度的40%,
当然也可以通过width和height参数自定义扰动量。
这里需要注意的是,横坐标为数值型变量时,必须要将其转换为因子,并在geom_boxplot()函数的属性中将因子映射给group,否则产生的效果图将是错误的。
如何在散点图的基础上再添加拟合曲线呢?下文将逐一介绍几种拟合线。
7.如果两个变量均是离散变量,该如何绘制散点图?实质上,这样的散点图我们称作气泡图。一般可以将这种图应用到价值转移中。
8.Cleveland点图和散点图矩阵
1.绘制简单的散点图
library(ggplot2) set.seed(123) x <- rnorm(100,mean = 2,sd = 3) y <- 1.5+2*x+rnorm(100) df <- data.frame(x = x,y = y) ggplot(df,aes(x = x,y = y))+geom_point()
2.绘制分组的散点图
可将分组变量(因子或字符变量)赋值给颜色或形状属性,实现分组散点图的绘制
set.seed(112) x <- rnorm(100,mean = 2,sd = 3) y <- 1.5+2*x+rnorm(100) z <- sample(c(0,1),size = 100,replace = TRUE) df <- data.frame(x = x,y = y,z = z) # 将数值型变量转换为因子型变量 df$z <- factor(df$z) #分组变量赋值给颜色属性 ggplot(df,aes(x = x,y = y,colour = z))+ geom_point(size = 3) #分组变量赋值给形状属性 ggplot(df,aes(x = x,y = y,shape = z))+ geom_point(size = 3) # 分组变量同时赋给颜色属性和形状属性 ggplot(df,aes(x = x,y = y,shape = z,colour = z))+ geom_point(size = 3)+ scale_color_brewer(palette = "Accent")+ scale_shape_manual(values = c(2,16))
注意点的形状,21-25之间的点的形状,既可以赋值边框颜色,又可以赋值填充色。
3.将离散型变量或因子映射给颜色属性或形状属性
x <- c(10,13,11,15,18,20,21,22,24,26) y <- c(76,60,70,58,55,48,44,40,26,18) z <- c(100,120,300,180,80,210,30,95,145,420) df <- data.frame(x = x,y = y,z = z) # 将连续型变量映射给颜色属性 ggplot(df,aes(x = x,y = y,colour = z))+ geom_point(size = 3)
图例上,颜色越深而对应的值越小,如何将值的大小与颜色的深浅保持一致?只需要人为的设置色阶,从低到高设置不同的颜色即可
# 将连续型变量映射给颜色属性,同时设置双色梯度 ggplot(df,aes(x = x,y = y,colour = z))+ geom_point(size = 3)+ scale_colour_gradient(low = "lightblue",high = "darkblue")
# 将连续变量映射给大小属性 ggplot(df,aes(x = x,y = y,size = z))+ geom_point()
# 将连续型变量赋给颜色属性或大小属性,自定义双色梯度,色阶间隔顺序由低到高 ggplot(df,aes(x = x,y = y,fill = z))+ geom_point(shape = 21,size = 3)+ scale_fill_gradient(low = "lightblue",high = "darkblue",breaks = c(100,150,200,300,350,400))
# 自定义球大小的间隔 ggplot(df,aes(x = x,y = y,size = z))+ geom_point()+ scale_size_continuous(breaks = c(100,150,200,250,300,350,400),guide = guide_legend()) # scale_size(breaks = c(100,150,200,250,300,350,400))结果一样
# 将连续变量值的大小与球的大小成比例 ggplot(df,aes(x = x,y = y,size = z))+ geom_point()+ scale_size_area(max_size = 10) # scale_size_area()可以确保数值0映射为0,max_size保证映射最大的点的大小
4.重叠点的处理
当数据点非常多时,可能会导致数据点重叠严重,处理方法如下:
1)使用半透明的点
2)数据分箱,并用矩形表示{stat_bin2d()}
3)数据分箱,并用六边形表示{stat_binhex()}
4)使用二维密度估计,并将等高线添加到散点图中{stat_density2d()}
5)向散点图中添加边际地毯
set.seed(112) x <- rnorm(10000) y <- rnorm(10000,0,2) df <- data.frame(x = x,y = y) # 不作任何处理 ggplot(df,aes(x = x,y = y))+ geom_point() # 使用透明度处理点的重叠问题 ggplot(df,aes(x = x,y = y))+ geom_point(alpha = 0.1) # 分箱,并用矩阵表示 ggplot(df,aes(x = x,y = y))+ stat_bin2d()
默认情况下,stat_bin2d()函数将x轴和y轴的数据点各分位30段,即参数900个箱子;用户还可以自定义分段个数,以及箱子在垂直和水平方向上的宽度。
# 设置bins为50, ggplot(df,aes(x = x,y = y))+ stat_bin2d(bins = 50)+ scale_fill_gradient(low = "steelblue",high = "darkred",limits = c(0,100),breaks = c(0,25,50,100))
分箱的具体做法是,将点分箱,并统计每个箱中点的个数,然后通过某种方法可视化这个数量。
# 分箱,用六边形表示,箱子水平和竖直方向的宽度各为0.2,0.3; # 图例标度范围0-100,显示在图例上的值(0,25,50,100) ggplot(df,aes(x = x,y = y))+ stat_bin_hex(binwidth = c(0.2,0.3))+ scale_fill_gradient(low = "lightgreen",high = "darkred",limits=c(0,100),breaks = c(0,25,50,100))
# 使用stat_density2d作二维密度估计,并将等高线添加到散点图中 ggplot(df,aes(x = x,y = y))+ geom_point()+ stat_density2d() #使用大小与分布密度成正比例的点,不添加等高线 ggplot(df,aes(x = x, y = y)) + stat_density2d(geom = 'point', aes(size = ..density..), contour = FALSE) + scale_size_area() #使用瓦片图展示数据分布密度情况 ggplot(df,aes(x = x, y = y)) + stat_density2d(geom = 'tile',aes(fill = ..density..), contour = FALSE) #向散点图中添加边际地毯(轴须线) ggplot(faithful,aes(x = eruptions, y = waiting)) + geom_point() + geom_rug() #通过边际地毯,可以快速查看每个坐标轴上数据的分布密疏情况。还可以通过向边际地毯线的位置坐标添加扰动并设定size减少线宽,从而减轻边际地毯线的重叠程度。 ggplot(faithful, aes(x = eruptions, y = waiting)) + geom_point() + geom_rug(position = 'jitter', size = 0.1)
6.如果一个变量为离散变量,另一个变量为连续变量时,如何绘制散点图?
set.seed(1234) x <- rep(1:5, each = 1000) y <- c(rnorm(1000),rnorm(1000,1,2),rnorm(1000,3,4),rt(1000,2),rt(1000,4)) df <- data.frame(x = x, y = y) df$x <- factor(df$x) #不作任何处理的散点图 ggplot(data = df, mapping = aes(x = x, y = y)) + geom_point()
上图中也出现了严重的重叠,有以下两种处理方法:
1)使用扰动图(位置调整)
2)使用箱线图(适用于一个或两个变量为离散变量)
# 给数据点添加随机扰动 ggplot(df,aes(x = x,y = y)) + geom_point(position = "jitter")
默认情况下,扰动函数在每个方向(水平和垂直)上添加的扰动值为数据点最小精度的40%,
当然也可以通过width和height参数自定义扰动量。
# 只在水平方向上添加50%的扰动量 ggplot(df,aes(x = x,y = y))+ geom_point(position = position_jitter(width = 0.5,height = 0))
# 绘制箱线图 ggplot(df,aes(x = x,y = y))+ geom_boxplot(aes(group = x),fill = "steelblue")
这里需要注意的是,横坐标为数值型变量时,必须要将其转换为因子,并在geom_boxplot()函数的属性中将因子映射给group,否则产生的效果图将是错误的。
如何在散点图的基础上再添加拟合曲线呢?下文将逐一介绍几种拟合线。
#不添加任何拟合线 ggplot(iris, aes(x = Petal.Length, y = Petal.Width, colour = Species)) + geom_point() #添加线性拟合线 ggplot(iris,aes(x = Petal.Length, y = Petal.Width, colour = Species)) + geom_point() + geom_smooth(method = 'lm') # stat_smooth(method = "lm") 结果一样 # 添加局部加权多项式曲线 ggplot(iris,aes(x = Petal.Length,y = Petal.Width,colour = Species))+ geom_smooth(method = "loess") # 添加逻辑斯特曲线 library(MASS) b <- biopsy # 载入数据集 # 绘制logistic曲线必须将因变量强制转换为0-1 b <- transform(b,class_trans = ifelse(class == "benign",0,1)) ggplot(b,mapping = aes(x = V1, y = class_trans))+ geom_point(position = position_jitter(width = 0.3,height = 0.6), alpha = 0.4,shape = 21,size = 2)+ geom_smooth(method = glm,method.args=list(family = "binomial"),se = FALSE) # glm模型必须指定参数family = "binomial",R内部才会调用逻辑斯特回归模型。
7.如果两个变量均是离散变量,该如何绘制散点图?实质上,这样的散点图我们称作气泡图。一般可以将这种图应用到价值转移中。
value1 <- rep(c('高价值','中价值','低价值'), each = 3) value2 <- rep(c('高价值','中价值','低价值'), times = 3) nums <- c(500,287,123,156,720,390,80,468,1200) df <- data.frame(value1 = value1, value2 = value2, nums = nums) df$value1 <- factor(df$value1, levels = c('高价值','中价值','低价值'), order = TRUE) df$value2 <- factor(df$value2, levels = c('低价值','中价值','高价值'), order = TRUE) ggplot(df,aes(x = value1, y = value2, size = nums)) + geom_point(colour = 'steelblue') + scale_size_area(max_size = 30, guide = FALSE) + geom_text(aes(label = nums), vjust = 0, colour = 'black', size = 5)
8.Cleveland点图和散点图矩阵
set.seed(1234) names <- letters Score <- runif(26, min = 55, max = 90) df <- data.frame(names = names, Score = Score) # 条形图 ggplot(df,aes(x = reorder(names,Score), y = Score)) + geom_bar(stat = 'identity', fill = 'steelblue', colour = 'black') + xlab('Name') + geom_text(aes(label = round(Score)), vjust = 1) # Cleveland 点图 ggplot(df,aes(x = reorder(names,Score), y = Score)) + geom_point(size = 5, shape = 21, fill = 'steelblue', colour = 'black') + xlab('Name') #使用pairs()函数绘制散点图矩阵 data(tips, package = "reshape") pairs(tips[,1:3]) #使用GGally包中的ggpairs()函数绘制散点图矩阵 library(GGally) ggpairs(tips[, 1:3])
相关文章推荐
- colorAccent,colorPrimary,colorPrimaryDark……来这里你就明白了
- Freemarker常用技巧
- Docker简介
- UIScrollView和MultiThreading、UITextField、Keyboard
- iOS之GCD再谈(dispatch_barrier_async)
- 选拔总结
- 消费者生产者
- Spring工作流程
- 来看看国外父母是怎么教孩子独立的
- MATLAB cat函数
- 自动计算cell时候计算不准确
- 7tkinter笔记五
- wince5.0 下中英文
- python小demo之判断闰年
- Android OkHttp完全解析 是时候来了解OkHttp了
- Qt的tr()函数
- BZOJ 2733 HNOI 2012 永无乡 平衡树启示式合并
- WinCE 系统下CPU变频
- Java小练习
- 微软Build2016:Win10 RS1红石正式版有哪些新功能?什么时候正式发布?