注意:代码可运行却画不出图——因为画板被占用,解决方法:多次运行dev.off(),到null device为止
画图的思维:1.我的数据适合什么样的图?2.搜画图代码 3.仿制示例数据 4.套代码,调细节
plot() 多种图形
hist()频率直方图
boxplot()箱式图
stripchart()点图
barplot()柱状图
dotplot()点图
piechart()饼图
matplot()数学图形
lines()添加线
curve()添加曲线
abline()添加给定斜率的线
points()添加点
segments()折线
arrows()箭头
axis()坐标轴
box()外框
title()标题
text()文字
代码语言:javascript复制#1.基础包
plot(iris[,1],iris[,3],col = iris[,5]) #iris为数据框,以iris第一列为横坐标,第三列为纵坐标,第五列有多少个不同的取值则有多少种颜色
text(6.5,4, labels = 'hello')#在(6.5,4)坐标处添加“hello”
dev.off() #关闭画板
#2.ggplot2 中坚力量,语法有个性
library(ggplot2)
ggplot(data = iris)
geom_point(mapping = aes(x = Sepal.Length,
y = Petal.Length,
color = Species))#以iris数据框作点图,x=和y=分别表示行名和列名,Sepal.Length为数据框中的列名
属性 | 参数 |
---|---|
颜色 | color |
大小(单位mm) | size |
透明度 | alpha |
填充颜色(1-20均用不到fill函数)) | fill |
形状(数字编号见下图) | shape |
一.以点图为例解释各参数:
1.
代码语言:javascript复制ggplot(data=iris)
geom_point(mapping=aes(x=Sepal.Length,y=Sepal.Length),size=2,alpha=0.5,shape=21)
2.x、y、color均为aes的参数
代码语言:javascript复制ggplot(data=iris)
geom_point(mapping=aes(x=Sepal.Length,y=Sepal.Length,color=Species))
3.x和y为aes的参数,color为geom_point的参数
代码语言:javascript复制ggplot(data=iris)
geom_point(mapping=aes(x=Sepal.Length,y=Sepal.Length),color="red")
4.scale_color_manual手动设置显示的颜色,此函数必须与color=Species一起使用,更多颜色查询十六进制颜色代码
代码语言:javascript复制ggplot(data=iris)
geom_point(mapping=aes(x=Sepal.Length,y=Sepal.Length,color=Species))
scale_color_manual(values=c("blue","red","yellow"))
5.单分面:将大图按Species分为三个子图
代码语言:javascript复制ggplot(data=iris)
geom_point(mapping=aes(x=Sepal.Length,y=Sepal.Length,color=Species))
facet_wrap(~Species)
6.双分面
代码语言:javascript复制dat = iris
dat$Group = sample(letters[1:5],150,replace = T)#sample表示取样,从abcde中取150个样(可重复取样)
ggplot(data = dat)
geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length))
facet_grid(Group ~ Species)
7.几何对象的叠加(多种图形叠加)
代码语言:javascript复制ggplot(data = iris,mapping = aes(x = Sepal.Length, y = Petal.Length))
geom_smooth()
geom_violin(aes(fill=species)) #小提琴图有颜色填充
geom_jitter(aes(shape=1))#点的形状
二.柱状图
代码语言:javascript复制ggplot(data = diamonds)
geom_bar(mapping = aes(x = cut))#自动统计x出现的次数作为纵坐标
ggplot(data = diamonds)
stat_count(mapping = aes(x = cut))#两种代码所作的图相同
2.1不统计数量,统计比例
代码语言:javascript复制ggplot(data = diamonds)
geom_bar(mapping = aes(x = cut, y = ..prop.., group = 1))#group=1表示cut中的所有组作为一个整体,百分比相加等于1
三.箱式图
pdat.data.frame
rownames | group | gene | count |
---|---|---|---|
test1 | control | gene1 | 0.1 |
test2 | treat | gene2 | 0.2 |
library(ggplot2)
p = ggplot(pdat,aes(gene,count))
geom_boxplot(aes(fill = group))
theme_bw()
p
p facet_wrap(~gene,scales = "free")