plot()| qplot(...,geom =" boxplot",...)不需要的因子排序(R 3.1.2)

时间:2015-02-10 11:32:27

标签: r plot ggplot2

我有一个由2列组成的数据框,一列是因子列(" C7":" C20")另一列是数字。当我尝试绘制数据帧时,因子的排序按字母顺序排列,即从C10 ... C20,C7,C8,C9开始。我试图按顺序排序,即C7 - > C20。

我试图用因子函数来排序因子:

X2 <- factor(X1$column1, levels:c("C7", "C8", "C9", ... , "C20"))

编辑:{我已经意识到上面的代码不正确。请参阅下面的评论以进行详细说明}。

但这会将整个数据框架更改为因子类,而绘图函数无法识别箱形图的因子 - 例如&#34;错误:ggplot2不知道如何处理类因子数据&#34;

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

好的,所以你需要使用mixedsort包中的gtools才能做到这一点:

mixedsort根据数字部分对字母数字字符串进行排序,即在这种情况下,它正是您所需要的。

示例数据

x <- factor(  rep(c('c1','c2','c10','c11'),each=10))
y <- runif(40)
df <- data.frame(y,x)

boxplot(y ~ x, data=df)

如果你绘制这些数据,你会发现我遇到了和你一样的问题:

enter image description here

<强>解决方案

但是如果你使用mixedsort对关卡进行排序,那么问题就解决了:

library(gtools)


df <- data.frame(y,x)
#essentially this is the only line (below) that makes the difference. It just
#orders the factor's levels in the way you want
df$x <- factor(df$x, levels=mixedsort(levels(df$x)))

boxplot(y ~ x, data=df)

enter image description here

答案 1 :(得分:1)

我想出了如何在数据框中更改变量的类,这已经解决了我的问题。我需要引用数据框中的变量来改变它的类:

df$col1 <- factor(df$col1, levels= c("C7", "C8", "C9", "C10", ..., "C20"))

答案 2 :(得分:0)

这是一种可能的解决方案:首先绘制没有x轴的数据值,然后使用正确的标签添加

df = data.frame(fact = paste0("C",c(7:20)), num = runif(14))
plot(df$num, xaxt="n")
axis(1, at = 1:length(df$num), labels = df$fact)

然后您可以更改type =中的plot来更改图表的类型(点,线,步等)