title: "Day2_ggplot2_实战"
author: "Dr Shawn Wang"
date: "2019/3/31"
output:html_document
ggplot2
概念
<font color = green size = 3>映射</font>
aes(x,y,col)
##################🔥 映射🔥####################
# load
library(ggplot2)
# iris
str(iris)
用鸢尾花的数据尝试mapping数据,
p1 <- ggplot(data = iris,
mapping = aes(x = Sepal.Length,
y = Petal.Length,
col = c(1:150))) +
geom_line()+
geom_point()
p1
- 分组
p2 <- ggplot(data = iris,
mapping = aes(x = Sepal.Length,
y = Petal.Length,
group = factor(Species),
col = Species)) +
geom_line()+
geom_point()
p2
<font color = green size = 3>几何对象geom</font>
p <- ggplot(data = iris,
aes(x = Sepal.Length,
y = Petal.Length))+
geom_point()
p + geom_line()
# 直方图
library(ggplot2movies)
str(movies)
m<- ggplot(data = movies,
mapping = aes(x = rating))+
geom_histogram(binwidth = 0.2)
m
<font color = green size = 3>统计变换</font>
p <- ggplot(data = iris,
aes(x = Sepal.Length,
y = Petal.Length))+
geom_point()+
stat_smooth(method = 'loess')# 拟合方式
p
?stat_smooth
<font color = green size = 3>标度(scale)</font>
p <- ggplot(data = iris,
aes(x = Sepal.Length,
y = Petal.Length,
col = Species))+
geom_point()
p + scale_y_log10() +
stat_smooth(method = "lm")
m<- ggplot(data = movies,
mapping = aes(x = rating))+
geom_histogram(binwidth = 0.2)+
scale_x_continuous(limits = c(2.5,7.5))# 所有映射内容都可以通过scale标度来调整。
m
str(iris)
m2<- ggplot(data = movies,
mapping = aes(x = rating))+
geom_histogram(binwidth = 0.2)+
coord_flip()
m2
<font color = green size = 3>分面(facet)</font>
在一个页面上自动拜访多幅图形,先将数据划分多个子集, 然后将每个子集一次绘制到页面的不同面板中。
- 网络型(facet_grid)和封面型(facet_wrap)
- 网格型,面板的位置和数量是根据分组的结果决定的。
- 封面型,排列顺序与网格型不同
mtcars
str(mtcars)
p = ggplot(mtcars,
aes(mpg, wt))+
geom_point()
p + facet_grid(cyl ~ .)# x ~ y, ~左边表示x轴按照x分面,~右边y表示y轴按照y分面。
p + facet_grid(vs ~ am) +
stat_smooth(method = "lm",
se = F,# se置信区间。
aes(color = factor(cyl)))
<font color = green size = 3>图层(layer)</font>
图层之间相对独立,通过图层的叠加来完善 '+' 前后可以认为是独立的图层
# 不同图层也不是完全独立,互不影响的。
p3 <- ggplot(mtcars,
aes(mpg, wt,
color = factor(gear)))+
geom_point(aes(y = carb))+# 只是用carb覆盖了y = wt,这里只是改了之前继承的映射关系。
geom_line(aes(y = carb))
p3
<font color = green size = 3>主题(theme)</font>
m<- ggplot(data = movies,
mapping = aes(x = rating))+
geom_histogram(binwidth = 0.2)
m + theme_bw()
m + theme_grey()
m + theme(axis.ticks = element_blank(),# 对文本进行修改要用element
axis.text.y = element_text(face = "bold",
size = 10,
colour = "purple"))
<font color = green size = 3>保存(ggsave)</font>
ggsave(file = "plot.png", width = 5
, height = 6,
dpi = 600)
时间序列绘图
#################==数据清洗==#########################
# 读取数据
ori.data <- read.csv("lesson8.csv",header = F)
# 查看
head(ori.data)
# 将原始数据转换为3列的矩阵
data <- matrix(as.matrix(ori.data),
nrow(ori.data)/3, # 返回ori.data行数/3
3,
byrow = T)
head(data)
# 解释matrix中现在为字符串,需要转换时间,而且将将字符串转换为数字
# 分别转换
Sys.setlocale("LC_TIME", "C")## 设置R语言时区相关信息
date <- as.POSIXlt(data[,1], tz = "", "%a %b %d %H:%M:%S HKT %Y")# as.POSIXlt 操作字符串转换为时间的函数,tz = time zone 默认的所以不同重新设置 后面为约定俗成的表示时间的语法。告诉函数该位置代表表示什么时间。最后正确的识别时间
head(date)
# 将剩下的转换为数字
IP <- as.numeric(data[,2])
PV <- as.numeric(data[,3])
p.data <- data.frame(date = date,
IP = IP,
PV = PV)
head(p.data)
library(ggplot2)
ggplot(p.data,
aes(date, IP))+
geom_line()
# 进一步优化数据
library(reshape2) #专门做数据格式转换的包,
meltdata <- melt(p.data, id = (c("date")))# 以date列为依据将ip 和 pv 融合
head(meltdata)
graphic <- ggplot(meltdata,
aes(date, value, col = variable))+
geom_line()+
geom_point()
p2 <- graphic + facet_grid(variable ~ .,
scales = "free_y")# scales 表示自由的y轴刻度,不强制一样。
p2
p3 = p2 + labs(x = "date",
y = "Number of visitors",
title = "IP and PV information of Aut to Oct of BT")
p4 = p3 +
theme_bw()+
theme(panel.grid = element_blank())+
theme(plot.title = element_text(size = 20,
face = 'bold'))+
scale_color_discrete(name = "", labels = c("IP", "PV"))
p4 +theme(strip.text.y = element_text(angle = 0))
请从文件Exam.txt中读取数据,并基于Gene3进行分组绘制TGW和GT的散点图,颜色分别为(红,绿,蓝)(参考R语言基础操作和ggplot中数据、映射、几何对像等章节)
getwd()
data <- read.table("Exam.txt", header = T,
sep = "\t")
library(ggplot2)
p <- ggplot(data,
aes(x = data$TGW, y = data$GT, color = data$Gene3))+
geom_point()+
scale_color_manual(values = c("red", "green", "blue"))
p2 = p + labs(x = "TGW",
y = "GT",
title = "BMK_excise_1")+
scale_color_discrete(name = "Gene3",
label = c("A","B","C"))
p2
以下题目均以R内置数据集mtcars为绘图数据
- 请以hp为X轴,mpg为Y轴为映射关系绘制散点图(参考ggplot中数据.映射与几何对象章节)
p1 <- ggplot(mtcars,
aes(hp, mpg))+
geom_point()
p1
- 请在题1的基础上增加一个折线图的图层(参考图层与几何对象章节)
p2 = p1 + geom_line()
p2
- 请在题2的基顾上,将横轴的取值范围限制在100,200之间(参考标度章节)
p3 = p2 + scale_x_continuous(c(100,200))
p3
- 请在题2的基础上,以cyl为分组依据,将图中数据分组并填充不同的颜色(参考映射章节)
p4 = p2 + aes(color = cyl)
p4
- 请在题2的基础上,以gear和carb两列数据绘制分面图形(参考分面章节)
head(mtcars)
p5 = p2 + facet_grid(gear ~ carb)
p5
- 将题5的图形修改为黑白网格背景(参考主题章节)
p6 = p5 + theme_bw()
p6
网友评论