考虑以下代码提供的条形图:
y<-rnorm(10)
x<-c('0~0.1','0.1~0.2','0.2~0.3','0.3~0.4','0.4~0.5','0.5~0.6','0.6~0.7','0.7~0.8','0.8~0.9','0.9~1')
data<-data.frame(x,y)
library('ggplot2')
ggplot(data=data,aes(x=x,y=y))+geom_bar(stat="identity",fill='light blue')
奇怪的是0~0.1
位于X轴的末端,即使0~0.1
位于data
的第一行。
然而,当我将'0~0.1'
更改为'0.0~0.1'
时,我得到了正确的情节。
为什么会这样?是否有任何其他方法来预测x轴的顺序对应于初始数据顺序?
答案 0 :(得分:2)
您将x
变量创建为factor
,并确保其中的级别正确排序。在此示例中,您创建了一个变量x
,其级别的顺序正确。如果没有,则必须将正确排序的向量分配给levels
中的x <- factor( x, levels = properly_ordered_vector )
参数。
此外,确保在为因子变量分配级别时,proper_ordered_vector中没有重复值。一旦你这样设置,ggplot将根据级别的顺序处理xaxis标签的顺序。
set.seed(1L)
y<-rnorm(10)
x<- c('0~0.1','0.1~0.2','0.2~0.3','0.3~0.4','0.4~0.5','0.5~0.6','0.6~0.7','0.7~0.8','0.8~0.9','0.9~1')
x <- factor( x, levels = x )
data<-data.frame(x,y)
library('ggplot2')
ggplot(data=data,aes(x=x,y=y))+geom_bar(stat="identity",fill='light blue')
答案 1 :(得分:0)
两者都不适合我。对我来说是最好的解决方案,类似Aaron所述。 x变量应该是“因子”(无论这意味着什么......),因此将其视为离散的,然后将x数据视为级别。不知道为什么要指定两次,但它有效。 例如:
mbar <- data.frame(klasse=c("<39", "40-60", "60-80", "80-100", ">100"), len=c(375, 57, 7, 0, 0))
p <- ggplot(data=mbar, aes(x=factor(klasse, levels=klasse), y=len)) + geom_bar(stat="identity")
p