首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Geom=的“盒图”,.)不必要的因素排序(R 3.1.2)

Geom=的“盒图”,.)不必要的因素排序(R 3.1.2)
EN

Stack Overflow用户
提问于 2015-02-10 11:32:27
回答 3查看 195关注 0票数 1

我有一个由2列组成的dataframe,一个是因数列(“C7”:“C20”),另一个是数字列。当我试图绘制数据时,各因素的顺序按字母顺序进行,即从C10...C20、C7、C8、C9开始。我试图按顺序排序,即C7 -> C20。

我试着用因子函数排序这些因素:

代码语言:javascript
复制
X2 <- factor(X1$column1, levels:c("C7", "C8", "C9", ... , "C20"))

编辑:{我已经意识到上面的代码是错误的。关于精化},见下面的评论。

但这会将整个数据框架转换为因子类,绘图函数无法识别盒形图的因素。错误: ggplot2不知道如何处理类因子数据

有什么想法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-02-10 14:15:31

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

代码语言:javascript
复制
df$col1 <- factor(df$col1, levels= c("C7", "C8", "C9", "C10", ..., "C20"))
票数 1
EN

Stack Overflow用户

发布于 2015-02-10 14:26:01

好的,为了做到这一点,您需要使用来自mixedsort包的gtools

mixedsort根据数字部分对α-数字字符串进行排序,也就是说,在这种情况下,这正是您所需要的。

示例数据

代码语言:javascript
复制
x <- factor(  rep(c('c1','c2','c10','c11'),each=10))
y <- runif(40)
df <- data.frame(y,x)

boxplot(y ~ x, data=df)

如果绘制此数据,您将看到我遇到了与您相同的问题:

溶液

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

代码语言:javascript
复制
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)

票数 3
EN

Stack Overflow用户

发布于 2015-02-10 12:08:52

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

代码语言:javascript
复制
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,以更改绘图类型(点、行、步骤等)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28430607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档