使用ggplot / facet_grid制作有序的条形图

时间:2016-07-26 21:35:16

标签: r plot ggplot2 facet-grid

我正在尝试绘制我的数据,使其看起来像这样(取自this blog):

reordered by bar size

我的数据如下:

head(Diet)
   Group      Category studies_n studies_pc
1  algae         algae        61       38.4
2  algae       biofilm         4        2.5
3  algae       diatoms         8        5.0
4  algae       fil alg        18       11.3
5  algae phytoplankton         2        1.3
6 insect    Coleoptera        59       37.1

“类别”实际上是“组”的子类别,每个“组”包含不同的“类别”。例如,藻类组仅包含“类别”中列出的五种不同种类的藻类,并且昆虫组不包括任何藻类类别。

我希望按特定顺序绘制组,并按排名顺序绘制研究数(“studies_n”):

Diet$Group <- factor(Diet$Group, levels = c("algae", "detritus", "mollusc", "crustacean", "insect", "fish", "other"))
Diet$Category <- factor(Diet$Category, levels=Diet[order(Diet$studies_n), "Category"])

有了这个,我尝试了两种不同的方式来绘制数据:

方法A.

pDiet <- ggplot(Diet, aes(x=Category, weight=studies_n)) +
  geom_bar() +
  facet_grid(.~Group, scales="free_x", space="free") +
  ylab("number of studies") + 
  theme(axis.text.x=element_text(angle=90))  
plot(pDiet)

这没关系,但我希望条形图是水平的而不是垂直的(以便更容易阅读标签)。此外,x轴上的文本未对齐。

Plot A

方法B。

pDiet <- ggplot(Diet, aes(x=Category, y=studies_n)) +
  geom_bar(stat="identity") +
  coord_flip() +
  theme(axis.title.y=element_blank()) +
  facet_grid(Group~., scales="free", space="free") +
  theme(strip.text.y = element_text(angle=0)) +
  ylab("number of studies")
plot(pDiet)

这是一个更好的布局,但是为每个组绘制了所有类别,这简直太荒谬了。

enter image description here

帮助?

0 个答案:

没有答案