rank()返回的是对向量中每个数值对应的秩
order()返回的值表示位置,依次对应的是向量的最小值、次小值、第三小值......最大值
rank() sort() order() 和 reorder()
data<=c(2,3,6,1)
reorder()函数在ggplot2中见过:
x = reorder(Var1, -Freq) Var1是分类变量,Freq是数值型变量
help(recorder) 的结果:
Reorder Levels of a Factor
Description
reorder is a generic function. The "default" method treats its first argument as a categorical variable, and reorders its levels based on the values of a second variable, usually numeric.
Usage
reorder(x, ...)
Default S3 method:
reorder(x, X, FUN = mean, ...,
order = is.ordered(x))
喜大普奔,终于解决了reorder()降序排序的问题;举例说明一下:
首先我有两列数据:第一列是样品名,第二列是对应数值。
先画个简单的barplot:
如下图:
我想将x轴排序,可以提前将数据排好序之后再画图,但是这里用reorder()函数直接根据y值的大小排序:
如图:
但是reorder如何从大到小排呢?
研究了好久,比如加了reverse=F/T,加了decrease=F/T,等等,都不行,终于发现原来只要加个“-”就可以:
图:
图不怎么好看,只是为了演示reorder从大到小排序。
今天在用R绘制多组boxplot时碰到一个问题:如何自定义boxplot各组的输出次序?问题描述:
ups<-read.delim("e:\\test.txt")
ups.melt<-melt(ups,id.var="exp")
p<-ggplot(data=ups.melt, aes(x=exp,y=value,fill=variable))+geom_boxplot(alpha=0.8)
p绘制的结果如下:
ups的表头如下:
输入str(ups)查看其数据类型:
可以发现ups$exp的因子水平是按照默认的ASCII码排序的,boxplot输出的次序是:UPS2mouse, UPS2only, UPS2yeast
但是我想要的次序是UPS2only, UPS2yeast, UPS2mouse,因此需要重新定义exp的因子水平
这里只需调整melt之后的因子水平即可:
ups.melt$exp=factor(ups.melt$exp, levels=c("UPS2only","UPS2yeast","UPS2mouse"))#修改exp的因子水平顺序,从而确定X轴输出的顺序
调整后再运行ggplot2的绘图命令:
p<-ggplot(data=ups.melt, aes(x=exp,y=value,fill=variable))+geom_boxplot(alpha=0.8)