最近答应xxhll来进行一下数据可视化方面的基础知识普及。所以就每天一个关于什么数据类型做什么图的讲解吧。同时结合data-to-viz.com的代码进行学习绘图。
所有的做图都是基于数据来的。而所有的数据也都是基于数据类型来做图的。当我们知道我们有什么样子的数据的时候,以及数据是什么类型的时候,我们也就自然而然的知道我们应该做什么样子的图来呈现我们的数据了。
在学做图之前,我们要明白数据都分为几类。基本数据类型主要包括两大类
由于二维的图也是分为x轴和y轴。两种变量也可以组合成多种类型。
这次我们就先从单个的连续性变量来看。
对于单个的连续性变量的做图,我们可以做的基本的图包括直方图和密度图.单个的连续性变量的话,并不是为了说明数据之间的关系的,而是为了说明本身的数据分布的情况。
直方图主要是通过将连续性变量来切割成多个不同的分组,
在ggplot2当中,我们可以通过geom_histogram来绘制数据的直方图。在这个参数函数当中,我们可以通过binwidth或者bin来控制分箱的多少。其中binwidth越小代表分的组越多。而bin越小代表分的组越少。默认的是bin = 30代表分成30个组。
library(ggplot2)
data=data.frame(value=rnorm(100))
p1 <- ggplot(data, aes(value)) + geom_histogram() ## 30个箱子
p2 <- ggplot(data, aes(value)) + geom_histogram(bins = 10)
cowplot::plot_grid(p1, p2)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
默认情况下,直方图的y是计数。但是我们可以可以改成密度。
data <- data.frame(
var1 = rnorm(1000),
var2 = rnorm(1000, mean=2)
)
ggplot(data) + geom_histogram( aes(x = var1, y = ..density..), fill="#69b3a2" ) +
geom_histogram(aes(x = var2, y = -..density.., fill = "#404080"))
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
base plot当中,我们可以通过hist来绘制直方图
my_variable=c(rnorm(1000 , 0 , 2) , rnorm(1000 , 9 , 2))
layout(mat = matrix(c(1,2),2,1,byrow = T), heights = c(1,8))
par(mar=c(0, 3.1, 1.1, 2.1))
boxplot(my_variable , horizontal=TRUE , ylim=c(-10,20), xaxt="n" , col=rgb(0.8,0.8,0,0.5) , frame=F)
par(mar=c(4, 3.1, 1.1, 2.1))
hist(my_variable , breaks=40 , col=rgb(0.2,0.8,0.5,0.5) , border=F , main="" , xlab="value of the variable", xlim=c(-10,20))
# Create data
my_variable=rnorm(2000, 0 , 10)
# Calculate histogram, but do not draw it
my_hist=hist(my_variable , breaks=40 , plot=F)
# Color vector
my_color= ifelse(my_hist$breaks < -10, rgb(0.2,0.8,0.5,0.5) , ifelse (my_hist$breaks >=10, "purple", rgb(0.2,0.2,0.2,0.2) ))
# Final plot
plot(my_hist, col=my_color , border=F , main="" , xlab="value of the variable", xlim=c(-40,40) )
对于如何用直方图来查看异常值来说,我们可以在其结果的x轴上就可以到的。
var1 <- c(rnorm(1000, mean=2),10)
hist(var1)
通过上图我们就可以看到,数据的主要分布是在0-6。但是明显看到10的地方是有一个异常值分布的。