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

5

我有一个问题一直没有找到解决方法。我有一个数据框,其中包含两种不同模式中的不同形容词和动词分词。

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 ...

我希望能够绘制两种模式中形容词的频率,并在同一图表中使用两个直方图进行比较。问题是两种模式之间存在一些重叠(即某些形容词在两个模式中都出现),但我只想让每个直方图以最常见的形容词开始。
这是我在生成单个直方图时使用的排序代码:
THAT_EXT_COMBINED <- within(THAT_EXT_COMBINED,
                            NODE <- factor(NODE,
                                           levels=names(sort(table(NODE),
                                                             decreasing=TRUE))))

我明白为什么这样做不起作用,因为它将两个模式的频率结合在一起,但我仍然不知道如何解决它。我一直在尝试使用reorder()但没有成功。有什么想法吗?
以下是我用于图表的代码:
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"))

生成的图表存在的问题是两个模式中形容词的频率没有被严格排序。有人能帮忙解决吗?
以下是我使用以上代码生成的图表。相比之下,我想要的结果是每个模式的形容词都按照出现频率从高到低排列,即根据频率以递减顺序呈现两个直方图。我认为这可以简化成一个排序问题,我尝试了不同的因素排序方式,但没有成功地先按PATTERN排序,然后再按NODE频率排序。

我认为您可能需要事先总结数据才能使用reorder()函数。 - Brandon Bertelsen
1个回答

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") # + ...

这似乎不起作用,因为每个模式只有一个条形图(即使在重新排序()中更正了拼写错误并更改为geom_histogram())。我已编辑帖子以显示我想创建的图表类型。 - user1504579
添加了position="dodge"。不过,你的数据“长什么样子”并不是很清楚。也许像head(THAT_EXT_COMBINED)这样的东西会有帮助。 - Brandon Bertelsen
我已经编辑了帖子,包括数据结构的信息。在我看来,这是一个关于如何按照PATTERN首先排序因素,然后再按照两个PATTERN中NODE的频率排序的问题。 - user1504579
哪种模式优先?(如果使用position="dodge",其中一种模式将始终在另一种模式前面) - Brandon Bertelsen
这对我来说并不重要,尽管我更喜欢现在首先使用THAT_EXT的顺序。关键是每个模式的节点以严格递减的顺序(按频率)绘制,而目前情况并非如此,正如您从图表中所看到的那样。 - user1504579

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接