ggplot2:更改轴上因子变量的显示顺序

Seb*_*Seb 21 r ggplot2

当我使用geom_tile()ggplot2和离散缩放标签在x轴按升序排列,在y轴降序排列:

#some sample data
a <- runif(400)
a <- matrix(a, ncol=20)
colnames(a) <- letters[seq( from = 1, to = 20 )]
rownames(a) <- letters[seq( from = 1, to = 20 )]
a <- melt(a)
Run Code Online (Sandbox Code Playgroud)

当我绘制数据帧时,a这就出现了:

ggplot(a, aes(X1, X2, fill = value)) + geom_tile() + 
scale_fill_gradient(low = "white",  high = "black", breaks=seq(from=0, to=1, by=.1), name="value") + 
opts(axis.text.x=theme_text(angle=-90, hjust=0)) +
scale_x_discrete(name="") + scale_y_discrete(name="") 
Run Code Online (Sandbox Code Playgroud)

并且对于x和y标记的coords不同:

在此输入图像描述

我想让标签从上到下,从左到右排序.有一个快速的方法来做到这一点?

Pau*_*tra 34

这里重要的是因子水平的顺序.级别中的顺序也是图中的顺序.您可以使用rev这样反转级别的顺序(请注意,我只是重新排序data.frame中的一列):

df$X1 = with(df, factor(X1, levels = rev(levels(X1))))
Run Code Online (Sandbox Code Playgroud)

使用此语法可根据需要重新排序因子.


And*_*ndy 6

对于您不希望修改基础数据中因子顺序的情况,您可以使用以下limits参数获得相同的结果scale_y_discrete

ggplot(a, aes(X1, X2, fill = value)) +
  geom_tile() + 
  scale_y_discrete(name="", limits = rev(levels(a$X2)))
Run Code Online (Sandbox Code Playgroud)

给出这个输出:

在此处输入图片说明