微课|R基础绘图:直方图

2017 年 7 月 12 日 数萃大数据 周世荣

今日问题

  • 直方图整体外观美化.

  • 为直方图添加密度曲线.

  • 绘制多峰直方图.


数据准备

这次微课使用模拟数据集,其中数据A服从标准正态分布,B服从均值为2方差为0.8的正态分布. 设置随机种子set.seed(1)

set.seed(1)
A <- rnorm(50,0,1)
set.seed(1) 
#注意随机种子只对当前命令起作用
B <- rnorm(50,2,0.8)
基本命令

hist(x, breaks,freq, ....),  其中x表示一个向量,breaks表示直方图竖条的个数,freq是一个逻辑变量,默认绘制频率直方图,逻辑假绘制概率直方图.

hist(A, breaks=10, freq=FALSE)

整体美化

直方图的横坐标通常表示向量x的分位数,例如breaks=10,向量X被均分成10份. 用break1~break2的形式表示X轴的坐标, 使用如下命令取出分位数.

hi_data=hist(A,plot = F)
bra_hidata=hi_data$breaks
#-2.5 -2.0 -1.5 -1.0 -0.5  0.0  0.5  1.0  1.5  2.0

制作坐标标签.

nlab=paste(bra_hidata[-10],bra_hidata[-1],sep = '~')
nlab
#"-2.5~-2" "-2~-1.5" "-1.5~-1" "-1~-0.5" "-0.5~0" "0~0.5"  
#"0.5~1" "1~1.5" "1.5~2

最后对图像原色的字体,颜色,大小,位置进行调整,详解请参照前几节课的内容.

library(RColorBrewer)
cols=brewer.pal(9, 'Paired')
hist(A,breaks =10,col = cols,border = 'white',
   cex.axis=0.75,cex.lab=0.75,font.lab=2, xaxt='n',
   xlab = '模拟数据A',ylab = '频率',main = NULL)
box(bty='l')
hi_data=hist(A,plot = F)
bra_hidata=hi_data$breaks
nlab=paste(bra_hidata[-10],bra_hidata[-1],sep = '~')
#设置坐标标签
axis(1,at=bra_hidata[-10]/2+bra_hidata[-1]/2,
   labels = nlab,cex.axis=0.65) mtext("直方图",3,line = 1.8,adj=0,font=2) mtext('2017-7-10',3,line = 0.5,adj = 0, cex = 0.85,font = 2) mtext("数据来源:模拟数据A",1,line=3.5,adj=1,cex=0.65,font=2)

上图使用离散色进行填充,下面使用渐进色填充直方图.

col1=brewer.pal(8, 'Dark2')
YlOrBr <- col1[2:4]
cols=brewer.pal(9, 'Paired')
hist(A,breaks =10,col =  colorRampPalette(YlOrBr)(10),
   border = 'white',cex.axis=0.75,cex.lab=0.75,
   font.lab=2, xaxt='n', xlab = '模拟数据A',
   ylab = '频率',main = NULL)
#................
#下面代码和离散填充一致


添加密度曲线
#上面代码和离散填充一致
#..................
lines(density(A), lwd = 2,lty=3)

多峰直方图
hist(A,breaks =10,col = cols[1],border = 'white',freq = FALSE,
   cex.axis=0.75,cex.lab=0.75,font.lab=2, xaxt='n',
   xlab = NULL,ylab = NULL,main = NULL,
   xlim = c(-2.5,4)
)
hist(B,breaks =10,col = scales::alpha('red',0.5),border = 'white',
  cex.axis=0.75,cex.lab=0.75,font.lab=2, xaxt='n',freq = FALSE,
  xlab = NULL,ylab = NULL,main = NULL,
  xlim = c(-2.5,4),add=T)
box(bty='l')
hi_data1=hist(A,plot = F)
hi_data2=hist(B,plot = F)
bra_hidata1=hi_data1$breaks
bra_hidata2=hi_data2$breaks
bra_hidata=unique(c(bra_hidata1,bra_hidata2))
nlab=paste(bra_hidata[-13],bra_hidata[-1],sep = '~')
#调整坐标以及主副标题和注解
axis(1,at=bra_hidata[-13]/2+bra_hidata[-1]/2,labels = nlab,
   cex.axis=0.55,las=2) mtext("双直方图",3,line = 1.8,adj=0,font=2) mtext('2017-7-10',3,line = 0.5,adj = 0, cex = 0.85,font = 2) mtext("数据来源:模拟数据A",1,line=3.5,adj=1,cex=0.65,font=2) title(xlab='模拟数据集{A,B}',ylab='概率密度',cex.lab=0.75,font.lab=2)
#绘制图例
legend('topleft',c('A','B'),fill = c(cols[1],scales::alpha('red',0.5)),   border = 'white',cex = 0.75,   bty = "n")

推荐阅读

微课|R基础绘图:点图

微课|R基础绘图:条形图

微课|R基础绘图:折线图

更多微课请关注【数萃大数据】公众号,点击学习园地—可视化


欢迎参加【杭州站】Python大数据分析培训

8月18日-22日


扫描右侧二维码了解更多

登录查看更多
1

相关内容

微课就是短于18分钟的教学视频,限定时间是为了适应学习者网上学习的注意力和认知规律。TED的演讲就是规定时间必须少于18分钟。
【干货书】用于概率、统计和机器学习的Python,288页pdf
专知会员服务
287+阅读 · 2020年6月3日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
【干货书】R语言书: 编程和统计的第一课程,
专知会员服务
111+阅读 · 2020年5月9日
【经典书】Python数据数据分析第二版,541页pdf
专知会员服务
192+阅读 · 2020年3月12日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
95+阅读 · 2019年12月4日
Keras François Chollet 《Deep Learning with Python 》, 386页pdf
专知会员服务
151+阅读 · 2019年10月12日
数学建模20:直方图均衡化与图片去霾
遇见数学
4+阅读 · 2019年10月18日
盘一盘 Python 系列特别篇 PyEcharts TreeMap
平均机器
17+阅读 · 2019年6月13日
Python文本预处理:步骤、使用工具及示例
Stata绘图:简单好用的37条外部命令
R语言中文社区
25+阅读 · 2018年9月22日
数据分析师应该知道的16种回归技术:分位数回归
数萃大数据
29+阅读 · 2018年8月8日
10行代码实现目标检测,请收下这份教程
极市平台
4+阅读 · 2018年6月27日
一份数据科学家必备的技能清单(附资源)
THU数据派
7+阅读 · 2018年5月29日
实战 | 用Python做图像处理(二)
七月在线实验室
17+阅读 · 2018年5月25日
使用 Python 绘制《星战》词云
Datartisan数据工匠
3+阅读 · 2017年8月31日
python pandas 数据处理
Python技术博文
4+阅读 · 2017年8月30日
Weight Poisoning Attacks on Pre-trained Models
Arxiv
5+阅读 · 2020年4月14日
Single-frame Regularization for Temporally Stable CNNs
Arxiv
3+阅读 · 2018年3月28日
VIP会员
相关资讯
数学建模20:直方图均衡化与图片去霾
遇见数学
4+阅读 · 2019年10月18日
盘一盘 Python 系列特别篇 PyEcharts TreeMap
平均机器
17+阅读 · 2019年6月13日
Python文本预处理:步骤、使用工具及示例
Stata绘图:简单好用的37条外部命令
R语言中文社区
25+阅读 · 2018年9月22日
数据分析师应该知道的16种回归技术:分位数回归
数萃大数据
29+阅读 · 2018年8月8日
10行代码实现目标检测,请收下这份教程
极市平台
4+阅读 · 2018年6月27日
一份数据科学家必备的技能清单(附资源)
THU数据派
7+阅读 · 2018年5月29日
实战 | 用Python做图像处理(二)
七月在线实验室
17+阅读 · 2018年5月25日
使用 Python 绘制《星战》词云
Datartisan数据工匠
3+阅读 · 2017年8月31日
python pandas 数据处理
Python技术博文
4+阅读 · 2017年8月30日
Top
微信扫码咨询专知VIP会员