plyr包,dplyr包,ggplot2包

@plyr包,dplyr包,ggplot2包
Plyr包:
each函数 each(…)
能够把多个函数整合到一个函数中,每个函数必须只能返回一个数值。
举例:
each(min, max)(1:10)
each(length, mean, var)(rnorm(100))
each(“min”, “max”)(1:10)
each(c(“min”, “max”))(1:10)
each(c(min, max))(1:10)
colwise函数
把作用于数据框行向量的函数(如mean,median)转化为作用于数据框列向量的函数
举例:
对msleep数据框的各个字段求均值
colwise(median)(msleep, na.rm = T)
另外还有衍生的catcolwise()和numcolwise()函数,它们分别针对的是函数只在离散和数值型的变量上操作
head(baseball,5)
nmissing=function(x)sum(is.na(x))
colwise(nmissing)(baseball)
也可以写成:
f=colwise(nmissing)
f(baseball)
ddply(baseball,.(year),colwise(nmissing))
nmissing <- function(x) sum(is.na(x))
colwise(nmissing)(baseball)
ddply函数
对数据框进行分组统计
#ddply()+ colwise() 函数的组合使用:分组+数据框操作
ddply(baseball, .(year), colwise(nmissing))
ddply(baseball, .(year), colwise(nmissing, c(“sb”, “cs”, “so”)))
ddply(baseball, .(year), colwise(nmissing, ~ sb + cs + so))
ddply(baseball, .(year), colwise(nmissing, is.character))
ddply(baseball, .(year), colwise(nmissing, is.numeric))
ddply(baseball, .(year), colwise(nmissing, is.discrete))
ddply(baseball, .(year), numcolwise(nmissing))
ddply(baseball, .(year), catcolwise(nmissing))
对msleep数据框按vore进行分组,对每个小组中的数值型字段,求中位数
ddply(msleep, .(vore), numcolwise(median), na.rm = T)
对msleep数据框按vore进行分组,对每个小组中的数值型字段,求均值
ddply(msleep, .(vore), numcolwise(mean), na.rm = T)
numcolwise
只对数值变量进行计算,而跳过分类变量,处理类型混杂的数据集非常方便
numcolwise(mean)(baseball, na.rm = TRUE)
numcolwise(mean, na.rm = TRUE)(baseball)
arrange
根据数据框的变量对数据框排序(按照变量管理行)
arrange(.data, …)
data为要处理的列;…为要按照某变量排列,默认为升序排列。
举例
arrange(mtcars, desc(disp)) ##按照disp变量降序排列
mtcars[with(mtcars, order(cyl, disp)), ]
arrange(mtcars, cyl, disp)
myCars = cbind(vehicle=row.names(mtcars), mtcars)
arrange(myCars, cyl, disp)
arrange(myCars, cyl, desc(disp))
rename
根据变量名而不是变量位置重新命名
举例
x <- c(“a” = 1, “b” = 2, d = 3, 4)
x <- rename(x, replace = c(“d” = “c”))
rename(mtcars, c(“disp” = “displacement”))
count 等效as.data.frame(table(x))
返回包含数字以及包含参数列表中的数字的单元格的个数。利用函数 COUNT 可以计算单元格区域或数字数组中数字字段的输入项个数。
COUNT(value1,value2,…)Value1, value2, … 为包含或引用各种类型数据的参数(1 到 30个),但只有数字类型的数据才被计算。
举例
count(baseball[1:100,], vars = “id”)
count(baseball[1:100,], vars = “id”, wt_var = “g”)
count(baseball[1:100,], c(“id”, “year”))
#MATCH 匹配 在指定的数据中用指定方法查找相关的数组
MATCH(lookup_value,lookup_array,match_type)
第一个参数为 为需要在数据表中查找的数值。(为数值或者单元格)
第二个参数为 需要查找的数组、表格,为连续性的数组
第三个参数 Match_type 为数字 -1、0 或 1。Match-type 指明 Microsoft Excel 如何在 lookup_array 中查找 lookup_value。
如果 match_type 为 1,函数 MATCH 查找小于或等于 lookup_value 的最大数值。Lookup_array 必须按升序排列:…、-2、-1、0、1、2、…、A-Z、FALSE、TRUE。默认为1
match_df
配合count,选出符合条件的行,从一个数据框中提取与另一个数据框中相同的行
count(baseball,“id”)
longterm=subset(count(baseball,“id”),freq>25)
bb_longterm=match_df(baseball,longterm,on=“id”)
join
类似sql中的join,比merge速度更快,程序语言,字符串,指返回一个字符串,此字符串由包含在数组中的许多子字符串联接创建。
first <- ddply(baseball, “id”, summarise, first = min(year))
system.time(b2 <- merge(baseball, first, by = “id”, all.x = TRUE))
system.time(b3 <- join(baseball, first, by = “id”))
dplyr包:
tbl_df()
是数据库的 table 文件,属性数据表结构文件定义了地图属性数据的表结构,包括字段数、字段名称、字段类型和字段宽度、索引字段及相应图层的一些关键空间信息描述。可用于将过长过大的数据集转换为显示更友好的 tbl_df 类型。使用dplyr包处理数据前,建议先将数据集转换为tbl对象。
语法 : tbl_df(data)
举例:
data.frame类型数据集
class(mtcars)
转换为tbl_df类型
ds <- tbl_df(mtcars)
转换为data.frame类型
df <- as.data.frame(ds)
filter筛选
filter() 和slice()函数可以按给定的逻辑条件筛选出符合要求的子数据集, 类似于 base::subset() 函数,但代码更加简洁, 同时也支持对同一对象的任意个条件组合(表示AND时要使用&或者直接使用逗号),返回与.data相同类型的对象。原数据集行名称会被过滤掉。
语法 : filter(.data, …)
举例1:
#过滤出cyl == 8的行
filter(mtcars, cyl == 8)
filter(mtcars, cyl < 6)
#过滤出cyl < 6 并且 vs == 1的行
filter(mtcars, cyl < 6 & vs == 1)
filter(mtcars, cyl < 6, vs == 1)
#过滤出cyl < 6 或者 vs == 1的行
filter(mtcars, cyl < 6 | vs == 1)
#过滤出cyl 为4或6的行
filter(mtcars, cyl %in% c(4, 6))
语法 : slice(.data, …)
slice() 函数通过行号选取数据。
举例 2:
#选取第一行数据
slice(mtcars, 1L)
filter(mtcars, row_number() == 1L)
#选取最后一行数据
slice(mtcars, n())
filter(mtcars, row_number() == n())
#选取第5行到最后一行所有数据
slice(mtcars, 5:n())
filter(mtcars, between(row_number(), 5, n()))
Arrange 排列
arrange()按给定的列名依次对行进行排序,类似于base::order()函数。默认是按照升序排序,对列名加 desc() 可实现倒序排序。原数据集行名称会被过滤掉。
语法 : arrange(.data, …)
举例1:
以cyl和disp联合升序排序
arrange(mtcars, cyl, disp)
以disp降序排序
arrange(mtcars, desc(disp))
Select 选择
select()用列名作参数来选择子数据集。dplyr包中提供了些特殊功能的函数与select函数结合使用, 用于筛选变量,包括starts_with,ends_with,contains,matches,one_of,num_range和everything等。用于重命名时,select()只保留参数中给定的列,rename()保留所有的列,只对给定的列重新命名。原数据集行名称会被过滤掉。
语法 : select(.data, …)
举例 1:
iris <- tbl_df(iris)
选取变量名前缀包含Petal的列
select(iris, starts_with(“Petal”))
选取变量名前缀不包含Petal的列
select(iris, -starts_with(“Petal”))
选取变量名后缀包含Width的列
select(iris, ends_with(“Width”))
选取变量名后缀不包含Width的列
select(iris, -ends_with(“Width”))
选取变量名中包含etal的列
select(iris, contains(“etal”))
选取变量名中不包含etal的列
select(iris, -contains(“etal”))
正则表达式匹配,返回变量名中包含t的列
select(iris, matches(".t."))
正则表达式匹配,返回变量名中不包含t的列
select(iris, -matches(".t."))
直接选取列
select(iris, Petal.Length, Petal.Width)
返回除Petal.Length和Petal.Width之外的所有列
select(iris, -Petal.Length, -Petal.Width)
使用冒号连接列名,选择多个列
select(iris, Sepal.Length:Petal.Width)
选择字符向量中的列,select中不能直接使用字符向量筛选,需要使用one_of函数
vars <- c(“Petal.Length”, “Petal.Width”)
select(iris, one_of(vars))
返回指定字符向量之外的列
select(iris, -one_of(vars))
返回所有列,一般调整数据集中变量顺序时使用
select(iris, everything())
调整列顺序,把Species列放到最前面
select(iris, Species, everything())
举例 2:
df <- as.data.frame(matrix(runif(100), nrow = 10))
df <- tbl_df(df[c(3, 4, 7, 1, 9, 8, 5, 2, 6, 10)])
选择V4,V5,V6三列
select(df, V4:V6)
select(df, num_range(“V”, 4:6))
语法 :rename(.data, …)
举例 3:
重命名列Petal.Length,返回子数据集只包含重命名的列
select(iris, petal_length = Petal.Length)
重命名所有以Petal为前缀的列,返回子数据集只包含重命名的列
select(iris, petal = starts_with(“Petal”))
重命名列Petal.Length,返回全部列
rename(iris, petal_length = Petal.Length)
Mutate 变形
mutate()和transmute()函数对已有列进行数据运算并添加为新列,类似于base::transform() 函数, 不同的是可以在同一语句中对刚增添加的列进行操作。mutate()返回的结果集会保留原有变量,transmute()只返回扩展的新变量。原数据集行名称会被过滤掉。
语法 :mutate(.data, …)
transmute(.data, …)
举例 1:
添加新列wt_kg和wt_t,在同一语句中可以使用刚添加的列
mutate(mtcars, wt_kg = wt * 453.592, wt_t = wt_kg / 1000)
计算新列wt_kg和wt_t,返回对象中只包含新列
transmute(mtcars, wt_kg = wt * 453.592, wt_t = wt_kg / 1000)
Distinct 去重(不同的)
distinct()用于对输入的tbl进行去重,返回无重复的行,类似于 base::unique() 函数,但是处理速度更快。原数据集行名称会被过滤掉。
语法 :distinct(.data, …, .keep_all = FALSE)
举例 1:
df <- data.frame(
x = sample(10, 100, rep = TRUE),
y = sample(10, 100, rep = TRUE)
)
以全部两个变量去重,返回去重后的行数
nrow(distinct(df))
nrow(distinct(df, x, y))
以变量x去重,只返回去重后的x值
distinct(df, x)
以变量y去重,只返回去重后的y值
distinct(df, y)
以变量x去重,返回所有变量
distinct(df, x, .keep_all = TRUE)
以变量y去重,返回所有变量
distinct(df, y, .keep_all = TRUE)
对变量运算后的结果去重
distinct(df, diff = abs(x - y))
Summarise 概括
对数据框调用函数进行汇总操作, 返回一维的结果。返回多维结果时会报如下错误: Error: expecting result of length one, got : 2
原数据集行名称会被过滤掉。
语法 :summarise(.data, …)
举例 1:
返回数据框中变量disp的均值
summarise(mtcars, mean(disp))
返回数据框中变量disp的标准差
summarise(mtcars, sd(disp))
返回数据框中变量disp的最大值及最小值
summarise(mtcars, max(disp), min(disp))
返回数据框mtcars的行数
summarise(mtcars, n())
返回unique的gear数
summarise(mtcars, n_distinct(gear))
返回disp的第一个值
summarise(mtcars, first(disp))
返回disp的最后个值
summarise(mtcars, last(disp))
Sample 抽样
抽样函数,sample_n()随机抽取指定数目的样本,sample_frac()随机抽取指定百分比的样本,默认都为不放回抽样,通过设置replacement = TRUE可改为放回抽样,可以用于实现Bootstrap抽样。
语法 :sample_n(tbl, size, replace = FALSE, weight = NULL, .env = parent.frame())
举例 1:
随机无重复的取10行数据
sample_n(mtcars, 10)
随机有重复的取50行数据
sample_n(mtcars, 50, replace = TRUE)
随机无重复的以mpg值做权重取10行数据
sample_n(mtcars, 10, weight = mpg)
语法 :sample_frac(tbl, size = 1, replace = FALSE, weight = NULL,.env = parent.frame())
举例 2:
默认size=1,相当于对全部数据无重复重新抽样
sample_frac(mtcars)
随机无重复的取10%的数据
sample_frac(mtcars, 0.1)
随机有重复的取总行数1.5倍的数据
sample_frac(mtcars, 1.5, replace = TRUE)
随机无重复的以1/mpg值做权重取10%的数据
sample_frac(mtcars, 0.1, weight = 1 / mpg)
group分组
group_by()用于对数据集按照给定变量分组,返回分组后的数据集。对返回后的数据集使用以上介绍的函数时,会自动的对分组数据操作。
语法 :group_by(.data, …, add = FALSE)
举例 1:
使用变量cyl对mtcars分组,返回分组后数据集
by_cyl <- group_by(mtcars, cyl)
返回每个分组中最大disp所在的行
filter(by_cyl, disp == max(disp))
返回每个分组中变量名包含d的列,始终返回分组列cyl
select(by_cyl, contains(“d”))
使用mpg对每个分组排序
arrange(by_cyl, mpg)
对每个分组无重复的取2行记录
sample_n(by_cyl, 2)
举例 2:
使用变量cyl对mtcars分组,然后对分组后数据集使用聚合函数
by_cyl <- group_by(mtcars, cyl)
返回每个分组的记录数
summarise(by_cyl, n())
#求每个分组中disp和hp的均值
summarise(by_cyl, mean(disp), mean(hp))
#返回每个分组中唯一的gear的值
summarise(by_cyl, n_distinct(gear))
#返回每个分组第一个和最后一个disp值
summarise(by_cyl, first(disp))
summarise(by_cyl, last(disp))
#返回每个分组中最小的disp值
summarise(by_cyl, min(disp))
summarise(arrange(by_cyl, disp), min(disp))
#返回每个分组中最大的disp值
summarise(by_cyl, max(disp))
summarise(arrange(by_cyl, disp), max(disp))
#返回每个分组中disp第二个值
summarise(by_cyl, nth(disp,2))
举例 3:
#使用cyl对数据框分组
grouped <- group_by(mtcars, cyl)
#获取分组数据集所使用的分组变量
groups(grouped)
#ungroup从数据框中移除组合信息,因此返回的分组变量为NULL
groups(ungroup(grouped))
语法 :group_indices(.data, …)
返回分组后,每条记录的分组id。
举例 4:
#返回每条记录所在分组id组成的向量
group_indices(mtcars, cyl)
语法 :group_size(x)
n_groups(x)
group_size用于返回每个分组的记录数,n_groups返回分成的组数。
举例 5:
by_cyl <- group_by(mtcars, cyl)
#返回每个分组记录数组成的向量
group_size(by_cyl)
summarise(by_cyl, n())
table(mtcarsKaTeX parse error: Expected 'EOF', got '#' at position 6: cyl) #̲返回所分的组数 n_group…model <- rownames(mtcars)
first <- mtcars[1:20, ]
second <- mtcars[10:32, ]
取两个集合的交集
intersect(first, second)
取两个集合的并集,并去重
union(first, second)
取两个集合的差集,返回first中存在但second中不存在的记录
setdiff(first, second)
取两个集合的交集,返回second中存在但first中不存在的记录
setdiff(second, first)
取两个集合的交集, 不去重
union_all(first, second)
判断两个集合是否相等,返回TRUE
setequal(mtcars, mtcars[32:1, ])
bind数据合并
dplyr包中也提供了按行/列合并数据集的函数,合并的对象为数据框,也可以是能够转换为数据框的列表。按行合并函数bind_rows()通过列名进行匹配,不匹配的值使用NA替代,类似于base:: rbind()函数。按列合并函数bind_cols()通过行号匹配,因此合并的数据框必须有相同的行数,函数类似于base:: cbind()函数。原数据集行名称会被过滤掉。语法如下:
按行合并,.id添加新列用于指明合并后每条数据来自的源数据框
bind_rows(…,.id = NULL)
按列合并
bind_cols(…)
合并数据集
combine(…)
举例 1:
one <- mtcars[1:4, ]
two <- mtcars[11:14, ]
按行合并数据框one和two
bind_rows(one, two)
按行合并元素为数据框的列表
bind_rows(list(one, two))
按行合并数据框,生成id列指明数据来自的源数据框,id列的值使用数字代替
bind_rows(list(one, two), .id = “id”)
按行合并数据框,生成id列指明数据来自的源数据框,id列的值为数据框名
bind_rows(list(a = one, b = two), .id = “id”)
按列合并数据框one和two
bind_cols(one, two)
bind_cols(list(one, two))
举例 2:
合并数据框,列名不匹配,因此使用NA替代,使用rbind直接报错
bind_rows(data.frame(x = 1:3), data.frame(y = 1:4))
举例 3:
合并因子
f1 <- factor(“a”)
f2 <- factor(“b”)
c(f1, f2)
unlist(list(f1, f2))
因子level不同,强制转换为字符型
combine(f1, f2)
combine(list(f1, f2))
ifelse条件语句
dplyr包也提供了更加严格的条件操作语句,if_else函数类似于base::ifelse(),不同的是true和false对应的值必须要有相同的类型,这样使得输出类型更容易预测,因此相对而言执行效率更高。
语法 :if_else(condition,true, false, missing = NULL)
missing值用于替代缺失值。
举例 1:
x <- c(-5:5, NA)
替换所有小于0的元素为NA,为了保持类型一致,因此使用NA_integer_
if_else(x < 0, NA_integer_, x)
使用字符串missing替换原数据中的NA元素
if_else(x < 0, “negative”, “positive”, “missing”)
if_else不支持类型不一致,但是ifelse可以
ifelse(x < 0, “negative”, 1)
举例 2:
x <- factor(sample(letters[1:5], 10, replace = TRUE))
if_else会保留原有数据类型
if_else(x %in% c(“a”, “b”, “c”), x, factor(NA))
ifelse(x %in% c(“a”, “b”, “c”), x, factor(NA))
case_when语句类似于if/else语句。表达式使用“~”连接,左值LHS为条件语句用于判断满足条件的元素,右值为具有相同类型的替换值,用于替换满足条件的元素。
语法 :case_when(…)
举例 3:
顺序执行各语句对原向量进行替换,因此越普遍的条件需放在最后
x <- 1:50
case_when(
x %% 35 == 0 ~ “fizz buzz”,
x %% 5 == 0 ~ “fizz”,
x %% 7 == 0 ~ “buzz”,
TRUE ~ as.character(x)
)
database数据库操作
dplyr也提供了对数据库的连接和操作函数,目前仅支持sqlite, mysql,postgresql以及google bigquery。dplyr可把R代码自动转换为SQL语句,然后在数据库上执行以获取数据。实际的处理过程中,所有的R代码并不是立即执行,而是在实际获取数据的时候,一次性在数据库中执行。下面以sqlite数据库为例。
创建和连接数据库: src_sqlite(path, create = FALSE)
当create为FALSE(默认),path必须为已存在的数据库路径和全名,为TRUE,会根据设置的path创建sqlite数据库。
举例 1:
在默认工作路劲下创建sqlite数据库
my_db <- src_sqlite(“dplyrdb.db”, create = TRUE)
列出数据源x中所有的表:src_tbls(x)
举例 2:
目前数据库中还没有表
src_tbls(my_db)
导入数据到创建的数据库中并创建相应的表,如果未给出表名则使用传入的data frame名称,导入时可以通过indexes参数给创建的表添加索引, copy_to同时会执行ANALYZE命令以保证表具有最新的统计信息并且执行相应的查询优化。
导入数据到远程数据源:copy_to(dest, df, name =deparse(substitute(df)), temporary, indexes,…)
举例 3:
library(nycflights13)
导入flights数据到数据库中,并创建相应的索引
flights_sqlite <- copy_to(my_db, flights, temporary = FALSE, indexes = list(c(“year”, “month”, “day”), “carrier”, “tailnum”))
已存在表flights
src_tbls(my_db)
tbl可用于与源数据源(src)中的数据(from)建立连接,from可以是表名或者是SQL语句返回的数据。
与数据库建立连接: tbl(src, from, …)
举例 4:
查询数据库中表数据,直接给出表名
tb.flight <- tbl(my_db, ‘flights’)
查询数据库中表数据,使用SQL语句返回数据
tb.flight2 <- tbl(my_db, sql(“SELECT * FROM flights”))
举例 5:
操作数据库中数据,语句并没有被实际执行,只有显式获取数据时才会执行
c1 <- filter(tb.flight, year == 2013, month == 1, day == 1)
c2 <- select(c1, year, month, day, carrier, dep_delay, air_time, distance)
c3 <- mutate(c2, speed = distance / air_time * 60)
c4 <- arrange(c3, year, month, day, carrier)
在未显式获取数据时,所有的操作只是生成tbl_sql对象,可以通过以下操作获取返回相应的SQL语句以及执行计划。
语法: show_query(x)
explain(x, …)
举例 6:
返回对象c4对应的SQL语句
show_query(c4)
返回对象c4对应的SQL语句以及执行计划
explain(c4)
对于lazy操作的这种机制,数据操作实际并没有真正的执行查询,如果需要返回数据结果,可以用以下的函数强制执行查询并返回结果。
强制执行查询,并返回tbl_df对象到R
collect(x, …)
强制执行查询,并在源数据库中创建临时表存储结果
compute(x, name = random_table_name(),temporary = TRUE,
unique_indexes = list(), indexes = list(),…)
不强制执行查询,拆分复杂的tbl对象,以便添加额外的约束
collapse(x, …)
举例 7:
执行c4查询,返回对象到R
tbl_dfight <- collect(c4)
执行查询并在数据库中创建临时表,通过src_tbls可查询到新建的temp表
compute(c4, name = ‘temp_flights’)
src_tbls(my_db)
实际并没有执行查询,仍可用show_query返回对应的SQL语句
remote <- collapse(c4)
show_query(remote)
ggplot2:
一、数据
在ggplot2中,接受的数据集必须是以data.frame格式的。这种格式易于保存数据,而且能在保留原有的绘图参数下, 用%+%方便地变更已有数据集。
library(“ggplot2”)#调用包
UG=read.table(“clipboard”,header=T);
head(UG)
p=ggplot(UG,aes(score,income),color=sex)+geom_point()
UG.c=transform(UG,income=income*1.5)#将收入放大1.5倍,其他不变
p %+%UG.c
二、映射
1.映射的概念
aes()函数是ggplot2中的映射函数, 映射是数据集中的数据关联到相应的图形属性过程中一种对应关系

p=ggplot(UG,aes(score,income,color=sex))+geom_point()
summary§
data: id, name, sex, region, birth, income, height, weight, score
mapping: x = score, y = income, colour = sex
p1=ggplot(data=UG)
summary(p1)
data: id, name, sex, region, birth, income, height, weight, score
可以发现,在p中指定了x轴为score,y轴为income,颜色为sex,这与p1中的不同
2.设定与映射
映射将一个变量中离散或连续的数据与一个图形属性中以不同的参数来相互关联, 而设定能够将这个变量中所有的数据统一为一个图形属性。
p2=ggplot(UG,aes(score,income))
p2+geom_point(color=“blue”)#设定散点的颜色为蓝色
p2+geom_point(aes(color=“blue”))
最后一句出现了错误,是因为在aes中, color = “blue”的实际意思是把”blue”当为一个变量, 用这个变量里的数据去关联图形属性中的参数, 而”blue”只含有一个字符变量, 默认情况下为离散变量, 按默认的颜色标度标记为桃红色
比较以下三种方法
ggplot(UG,aes(score,income),colour=sex)+geom_point()
ggplot(UG,aes(score,income,colour=sex))+geom_point()
ggplot(UG,aes(score,income))+geom_point(aes(colour=sex))
第一种的点是黑色点,第二种和第三种都是按照性别这个变量分颜色,第三种比较好记忆,相当于先画好图,再加上带颜色的散点。
3.分组
是ggplot2种映射关系的一种, 默认情况下ggplot2把所有观测点分为了一组, 如果需要把观测点按额外的离散变量进行分组处理, 必须修改默认的分组设置。
三、图层
1.在几何对象中设定映射
我们可以在在ggplot()中设定了映射了关系, 这种映射关系是默认的, 也可以在后面的几何对象中沿用已设定的默认映射关系, 也可以随时在几何对象中进行更改。
下面用到一个diamonds数据集,这个数据集的样本数非常大,所以要先抽样,这样画出的图才比较好看。
data(diamonds)
head(diamonds)
set.seed(74)#设定随机种子
small.diamonds=diamonds[sample(nrow(diamonds),500),]
#提取数据
head(small.diamonds)
dp =ggplot(small.diamonds, aes(x = carat, y = price, color = factor(color)))#设定默认的映射关系
dp + geom_point()#沿用默认的映射关系来绘制散点图
dp + geom_point(aes(shape = factor(cut))) #添加图层中的shape的映射关系
dp + geom_point(aes(y = cut)) #修改默认的y的映射关系, 注意图中y轴名称仍然以默认的price表示
dp + geom_point(aes(color = NULL))#删除默认的color映射关系
四、几何对象
dp =ggplot(small.diamonds, mapping=aes(x =carat, y = price,shape=cut,color = factor(color)))#设定默认的映射关系
dp + geom_point()
前面的钻石数据集的第二幅图也可以用这两个语句搞定,这里有点区别在于前面的是先画好了ggplot,再加上不同映射的散点;而这里是先画好了带有不同映射的ggplot,再加上点就好。
1.直方图
ggplot(small.diamonds)+geom_histogram(aes(x=price))
还可以按照不同的变量填充不同色,比如切工、钻石颜色
ggplot(small.diamonds)+geom_histogram(aes(x=price,fill=cut))
ggplot(small.diamonds)+geom_histogram(aes(x=price,fill=color))
2.柱形图
按照不同的变量
ggplot(small.diamonds)+geom_bar(aes(x=clarity))
ggplot(small.diamonds)+geom_bar(aes(x=color))
注意直方图和柱形图的区别:直方图把连续型的数据按照一个个等长的分区(bin)来切分,然后计数,画柱状图。而柱状图是分类数据,按类别计数
3.密度函数图
ggplot(small.diamonds)+geom_density(aes(x=price,color=clarity))#color指定颜色
ggplot(small.diamonds)+geom_density(aes(x=price,fill=cut))#fill在下方填充
4.箱线图
ggplot(small.diamonds)+geom_boxplot(aes(x=cut,y=price,fill=clarity))
在ggplot中还有许多geom_xxx的函数,
geom_abline geom_area
geom_bar geom_bin2d
geom_blank geom_boxplot
geom_contour geom_crossbar
geom_density geom_density2d
geom_dotplot geom_errorbar
geom_errorbarh geom_freqpoly
geom_hex geom_histogram
geom_hline geom_jitter
geom_line geom_linerange
geom_map geom_path
geom_point geom_pointrange
geom_polygon geom_quantile
geom_raster geom_rect
geom_ribbon geom_rug
geom_segment geom_smooth
geom_step geom_text
geom_tile geom_violin
geom_vline
五、标度
ggplot(small.diamonds)+geom_point(aes(x=carat,y=price,shape=cut,color=color))
ggplot(small.diamonds)+geom_point(aes(x=carat,y=price,shape=cut,color=color))+scale_y_log10()+scale_color_manual(values=rainbow(7))#对y变量做了对数变换
六、统计变换
统计变换对原始数据进行某种计算,然后在图上表示出来。
例如对散点图上加一条回归线
#统计变换
ggplot(small.diamonds,aes(x=carat,y=price))+geom_point()+scale_y_log10()+stat_smooth()
还有一些统计变换可选的,如下表
stat_abline stat_identity
stat_bin stat_qq
stat_bin2d stat_quantile
stat_bindot stat_smooth
stat_binhex stat_spoke
stat_boxplot stat_sum
stat_contour stat_summary
stat_density stat_summary2d
stat_density2d stat_summary_hex
stat_ecdf stat_unique
stat_function stat_vline
stat_hline stat_ydensity
七、坐标系统 coord_flip()
1.用coord_flip()实现坐标轴翻转
#坐标系统
ggplot(small.diamonds,aes(x=clarity,fill=clarity))+geom_bar()
ggplot(small.diamonds,aes(x=clarity,fill=clarity))+geom_bar()+coord_flip()
2.用coord_polar()实现转换极坐标
#极坐标coord_polar(theta=“y”)
ggplot(small.diamonds)+geom_bar(aes(x=factor(1),fill=cut))+coord_polar(theta=“y”)
#x其实是上面的clarity,是一个因子变量
其实,可以看出,极坐标下的条形图就是饼图。
#靶心图 coord_polar()
ggplot(small.diamonds)+geom_bar(aes(x=factor(1),fill=cut))+coord_polar()
#风玫瑰图coord_pola
ggplot(small.diamonds)+geom_bar(aes(x=clarity,fill=cut))+coord_pola
八、分面(facet)
按照不同的透明度,分别回归(克拉和价格作回归),用分面
#分面,这是一行代码,这里特别注意,x和y的指定要放在ggplot中
ggplot(small.diamonds,aes(x=carat,y=price,color=clarity))+geom_point()+scale_y_log10()+facet_wrap(~clarity)+stat_smooth()
九、主题 theme()
对图进行定制,如title, xlab, ylab显示出图标题,x轴,y轴,ggplot2提供了ggtitle(), xlab()和ylab()来实现。除此之外,我们可能还需要改变字体,字体大小,坐标轴,背景等各种元素,这需要通过theme()函数来完成。
ggplot2还提供一些已经写好的主题,如theme_grey()为默认主题,theme_bw()为白色背景的主题,还有theme_classic()主题
theme_economist theme_economist_white
theme_wsj theme_excel
theme_few theme_foundation
theme_igray theme_solarized
theme_stata theme_tufte
#主题颜色
install.packages(“ggthemes”)
library(“ggthemes”)
ggplot(small.diamonds)+geom_boxplot(aes(x=cut,y=price,fill=clarity))+theme_wsj()

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值