使用ggplot在同一图中对两个直方图进行排序

use*_*579 5 sorting r ggplot2

我有一个问题,我无法找到解决方案.我有一个数据框,有不同的形容词和分词,有两种不同的模式.

head(THAT_EXT_COMBINED)
          ID  PATTERN         NODE
1  HRE_721_03 THAT_EXT     accepted
2 G08_1321_01 THAT_EXT acknowledged
3   AAW_47_03 THAT_EXT acknowledged
4 G20_1490_01 THAT_EXT     alarming
5  FY8_732_02 THAT_EXT      amazing
6  HEM_128_03 THAT_EXT      amazing

str(THAT_EXT_COMBINED)
'data.frame':   1450 obs. of  3 variables:
$ ID     : Factor w/ 1450 levels "A05_253_01","A05_277_07",..: 1109 827 265 853 812 1046 369 810 214 41 ...
$ PATTERN: Factor w/ 2 levels "THAT_EXT","THAT_POST": 1 1 1 1 1 1 1 1 1 1 ...
$ NODE   : Factor w/ 201 levels "accepted","acknowledged",..: 1 2 2 6 8 8 8 10 12 15 ...
Run Code Online (Sandbox Code Playgroud)

我想在相同的图中使用两个直方图以降低的频率绘制这两种模式的形容词.问题在于两者之间存在一些重叠(即在两种模式中都存在一些形容词)但我只想让每个直方图从最常见的形容词开始.

以下是我在生成单个直方图时用于排序的代码:

THAT_EXT_COMBINED <- within(THAT_EXT_COMBINED,
                            NODE <- factor(NODE,
                                           levels=names(sort(table(NODE),
                                                             decreasing=TRUE))))
Run Code Online (Sandbox Code Playgroud)

我理解为什么这不起作用,因为它结合了两种模式的频率,但我仍然不知道如何解决它.我一直在尝试重新订购()而没有任何运气.有任何想法吗?

这是我用于剧情的代码:

graph<-ggplot(THAT_EXT_COMBINED, aes(x=NODE, fill=PATTERN)) + 
geom_histogram(binwidth=.5,  position="dodge")
graph + opts(axis.text.x = theme_blank()) + #removes text labels on x-axis
scale_y_continuous("Frequency") + 
scale_x_discrete("Adjectives",breaks=NULL)+ 
opts(title = expression("Distribution of Adjectives"))
Run Code Online (Sandbox Code Playgroud)

所得到的绘图的问题在于,形容词在两种模式中不是由它们各自的频率严格排序.有人能帮忙吗?


所以,这是我用上面的代码创建的图表.我想要的是每个模式的形容词以递减顺序绘制,即两个直方图按频率递减顺序绘制.我想这可以归结为一个排序问题,我试图以不同的方式排序这些因素,但我首先没有能够通过PATTERN和NODE的频率进行排序:

Bra*_*sen 0

library(reshape)
df <- cast(THAT_EXT_COMBINED, PATTERN ~.) 
colnames(df)[2] <- "Counts"

ggplot(df, aes(reorder(PATTERN, Counts), Counts, fill=PATTERN))
    + geom_bar(position="dodge") # + ...
Run Code Online (Sandbox Code Playgroud)