r - ggplot2,对 y 轴进行排序

标签 r plot ggplot2

我有以下名为 df 的 data.frame .我的问题与 y 轴上的顺序有关。我希望 y 轴上的名称根据变量 depth 排序.

如果我这样做:

ggplot(df,aes(x=factor(name),y=depth)) + geom_bar(stat='identity') + coord_flip() + labs(y='depth',x='species')

我收到了 graph1下面没有订购。因此我按照指示找到 here , 我订购了我的因子的水平 name按深度:
df2=df[order(df$depth),]
df2$name=factor(df2$name,levels=df2$name)
ggplot(df2,aes(x=factor(name),y=depth)) + geom_bar(stat='identity') + coord_flip() + labs(y='depth',x='species')

我收到了 Graph2以下。但对我来说,下一步是根据 Mut 为条形着色不同的颜色。多变的。
ggplot(df2,aes(x=factor(name),y=depth)) + geom_bar(stat='identity',data=subset(df2,df2$Mut==2),fill='red') + geom_bar(stat='identity',data=subset(df2,df2$Mut==1),fill='blue') + coord_flip() + labs(y='depth',x='species')

我得到了 Graph3不再订购了!!

如何按照图 2 中显示的顺序生成图 3
                    name depth Mut            x
25  A_rubrocinctus_GA070     8   2 -0.033318659
9      A_omanensis_GA051    10   2 -0.020387101
4  A_latifasciatus_GA083    12   1 -0.005645811
27      A_frenatus_GA068    12   1 -0.024190876
13       A_percula_GA017    15   1  0.034591721
14       A_percula_GA039    15   2  0.034591721
15       A_percula_GA053    15   2  0.034591721
16     A_ocellaris_GA009    15   1  0.052042539
17     A_ocellaris_GA021    15   1  0.052042539
24     A_ephippium_GA057    15   2 -0.016859412
20   P_biaculeatus_GA008    16   1 -0.014466403
21   P_biaculeatus_GA025    16   1 -0.014466403
22   P_biaculeatus_GA065    16   1 -0.014466403
23     A_melanopus_GA034    18   2 -0.026915545
26     A_melanopus_GA012    18   2 -0.026915545
12  A_sandaracinos_GA018    20   1  0.055839755
6       A_nigripes_GA055    25   1  0.023420045
8          A_sebae_GA029    25   1  0.021767793
11   A_akallopisos_GA067    25   1  0.043272525
28   A_akallopisos_GA072    25   1  0.043272525
34     A_akindynos_GA032    25   1 -0.020707141
1       A_polymnus_GA004    30   1  0.030902254
3        A_allardi_GA033    30   1 -0.020277664
5      A_bicinctus_GA036    30   1 -0.025354572
7       A_polymnus_GA019    30   1  0.030902254
32  A_chrysopterus_GA040    30   1 -0.022402365
33  A_chrysopterus_GA031    30   1 -0.022402365
35   A_perideraion_GA020    38   1  0.052830132
36   A_perideraion_GA015    38   1  0.052830132
2     A_tricinctus_GA058    40   1 -0.016230301
18  A_chrysogaster_GA080    40   1  0.012608835
19  A_chrysogaster_GA077    40   1  0.012608835
10   A_latezonatus_GA023    45   1 -0.010718845
31    A_mccullochi_GA056    45   1 -0.031664307
29       A_clarkii_GA044    60   1 -0.014474658
30       A_clarkii_GA010    60   1 -0.014474658

图1
enter image description here
图2
enter image description here
图3
enter image description here
谢谢!

最佳答案

因为你有变量 Mut在确定每个观察属于哪个级别的数据中,您不需要使用 geom_bar()子集两次。只需添加 fill=factor(Mut)aes()并将 df2 与有序数据一起使用。酒吧将按正确的顺序和颜色自动制作。

ggplot(df2,aes(x=factor(name),y=depth,fill=factor(Mut))) + 
     geom_bar(stat='identity') + 
     coord_flip() + labs(y='depth',x='species')

使用原始数据帧 df 可以获得相同的结果和功能 reorder()aes()对于 x 值。
ggplot(df,aes(x=reorder(name,depth),y=depth,fill=factor(Mut))) + 
     geom_bar(stat='identity') + 
     coord_flip() + labs(y='depth',x='species')

enter image description here

关于r - ggplot2,对 y 轴进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18401931/

相关文章:

r - 供傻瓜使用的黑白马赛克图/网格图

r - 按天和小时获取数据总和

regex - 如何获取R中两个字符第一次出现之间的模式?

r - 使用plot_model根据随机效应更改数据点的颜色

linux - 看不到 pylab 的情节

R 绘制积分

r - 使用季度日期格式缩放 x 轴

r - 如何使用ggplot2和R更改x轴上的因子名称?

r - 将函数绑定(bind)到列表

r - 如何根据数据框名称中的单个字符在数据框中添加新列?