如何利用ggplot2画柱状图

发布网友 发布时间:2022-04-22 07:23

我来回答

2个回答

热心网友 时间:2022-05-27 11:27

在这里提了一个自问自答的问题来推广一种十分优雅的数据可视化工具,R的ggplot2包。其实我自己现在主要在使用Python和Pandas和Numpy工作,ggplot2应该是我留守在R里面最大的理由之一~

在介绍ggplot2之前,我首先来介绍一下作者Hadley Wickham。Hadley (Rice University Department of Statistics : Faculty)
从统计学名校Iowa State University拿到了自己的Ph. D,其博士论文Practical tools for
exploring data and models 就是关于数据可视化和探索性数据分析的,现任Rice University的Adjunct
Assistant Professor 和R的著名IDE
RStudio的首席科学家。Hadley在R语言用户中具有极高的声望。R的基础版本其实是不太好用的,但是Hadley的一系列优秀作品极大地改进了
R语言。今年五月在北京召开的R语言会议,好多人都争相和Hadley合影,可见Hadley的魅力与声望非同一般。Hadley开发一个package
的时候会先开发一个版本,如果他觉得不够好又升级了,就会发一个新版本,名字变成旧名字后面加上数字2。所以我们就有了reshape2和
ggplot2。

ggplot2基于Leland Wilkinson在Grammar of Graphics(图形的语法)中提出的理论,取首字母缩写再加上plot,于是得名ggplot。按照《图形的语法》一书中的观点,一张统计图形就是从数据到点、线或方块等几何对象的颜色、形状或大小等图形属性的一个映射,其中还可能包含对数据进行统计变换(如求均值或方差),最后将这个映射绘制在一定的坐标系中就得到了我们需要的图形。图中可能还有分面,
就是生成关于数据的不同子集的图形。使用ggplot2绘图的过程就是选择合适的几何对象、图形属性和统计变换来充分暴露数据中所含有的信息的过程。
ggplot2需要一定的时间去入门学习,但是当你掌握了ggplot2中图形的语法的时候,我相信你会感受到这套语法的优雅。

在接下来的部分,我假定读者已经对R语言有了基本的了解,我将不会介绍DataFrame等基本概念。

安装ggplot2和安装其他的R包没有差别,在R的console里面运行install.packages("ggplot2") 一句就可以了,如果你使用RStudio,也可以在Package列表那里用鼠标去安装。

先来介绍一些ggplot2中的基本概念,括号里面对应的是ggplot2中为这种属性赋值的时候需要使用的参数名
图形属性(aes) 横纵坐标、点的大小、颜色,填充色等
几何对象(geom_) 上面指定的图形属性需要呈现在一定的几何对象上才能被我们看到,这些承载图形属性的对象可能是点,可能是线,可能是bar
统计变换 (stat_) 比如求均值,求方差等,当我们需要展示出某个变量的某种统计特征的时候,需要用到统计变换

热心网友 时间:2022-05-27 11:27

ggplot2使用geom_bar()几何函数来画柱状图(也叫条形图)
#例:用一个分组的条形图按学术等级和性别来可视化教授的人数
> ggplot(Salaries, aes(x=rank, fill=sex)) +
+ geom_bar(position="stack") + labs(title='position="stack"')
> ggplot(Salaries, aes(x=rank, fill=sex)) +
+ geom_bar(position="dodge") + labs(title='position="dodge"')
> ggplot(Salaries, aes(x=rank, fill=sex)) +
+ geom_bar(position="fill") + labs(title='position="fill", y="proportion")
geom_bar() 条形图
geom_boxplot() 箱线图
geom_density() 密度图
geom_histogram() 直方图
geom_hline() 水平线
geom_jitter() 抖动点
geom_line() 线图
geom_point() 散点图
geom_rug() 地毯图
geom_smooth() 拟合曲线
geom_text() 文字注解
geom_violin() 小提琴图
geom_vline() 垂线

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com