首页 > 解决方案 > 使用 ggplot 在 x 轴上显示其他类别

问题描述

嗨!

我正在写我的硕士论文,我正在为情节而苦苦挣扎。我想代表每个采样地点的幼鱼丰度。这就是它现在的样子:

# Pepraration steps
setwd("~/Desktop/TFM/Datos")
library(tidyverse)
library(vegan)

# Import data
mydata <- read.csv("~/Desktop/TFM/Datos/Alevins_2020_SUBSET.csv")

# Colours
col_Dsar <- "aquamarine"

col_NFRA <- "brown"
col_SFRA <- "chocolate1"
col_NESP <- "brown1"
col_SESP <- "darkgoldenrod1"

# Display data
mydata
  Order_NS            Site  Zone Dsar_ST
1         1         Leucate N_FRA   33.40
2         2      Barcarès 3 N_FRA   57.50
3         3      Barcarès 2 N_FRA   24.38
4         4      Barcarès 1 N_FRA   50.00
5         5           Canet N_FRA   12.33
6         6        Portells S_FRA   36.00
7         7   Roches Bleues S_FRA   38.29
8         8    Port-Vendres S_FRA   11.82
9         9     Banyuls_PN1 S_FRA    2.11
10       10     Banyuls_PN2 S_FRA    4.31
11       11     Banyuls_PN3 S_FRA    0.25
12       12     Banyuls_PN4 S_FRA   11.04
13       13     Banyuls_PN5 S_FRA    1.38
14       14     Banyuls_ZP1 S_FRA    1.75
15       15     Banyuls_ZP2 S_FRA    6.59
16       16     Banyuls_ZPR S_FRA    7.35
17       17     Banyuls_ZP3 S_FRA    4.75
18       18     Banyuls_ZP4 S_FRA    6.75
19       19     Banyuls_PN6 S_FRA    1.92
20       20     Banyuls_PN7 S_FRA    4.08
21       21  Port-Bou Rocks S_FRA   23.33
22       22  Port-Bou Beach S_FRA   11.06
23       23          Garbet N_ESP   19.38
24       24           Selva N_ESP   19.14
25       25         Portixó N_ESP    4.71
26       26         Portaló N_ESP    9.71
27       27           Culip N_ESP    4.72
28       28 Racó ses Ielles N_ESP    0.75
29       29       Cala Bona N_ESP    1.50
30       30      Guillola 2 N_ESP    1.67
31       31      Guillola 1 N_ESP    0.00
32       32      Portlligat N_ESP    3.22
33       33          Caials N_ESP   12.76
34       34         Joncols N_ESP   15.56
35       35         Montjoi N_ESP   20.33
36       36           Roses N_ESP   21.11
37       37  Empuriabrava 2 N_ESP   18.86
38       38  Empuriabrava 1 N_ESP   44.41
39       39    Baix de Cols S_ESP    2.63
40       40         Ferriol S_ESP    4.75
41       41         Pedrosa S_ESP    3.25
42       42        Falaguer S_ESP    4.50

# Plot
myplot <- ggplot(data = alevines, mapping = aes(x = reorder(Site, Order_NS), y = mydata$Dsar_ST)) +
  geom_col(show.legend = FALSE,
           fill = col_Dsar, colour = "black", size = 0.1) +
  geom_hline(yintercept = mean(mydata$Dsar_ST),
             linetype = "dashed", color = "grey") +
  labs(x = "Site", y = "Settlers density \n (individuals / 100 m of transect)") +
  theme(axis.text.x = element_text(angle = 90, hjus = 1, vjust = 0.5),
        axis.title.x = element_text(face = "bold"),
        axis.title.y = element_text(face = "bold")) +
  scale_y_continuous(limits = c(0, 60), expand = c(0, 0))
myplot

我现在要做的是将 x 轴的标签分为四类,这是我的数据框中的另一个变量(称为区域)。

我在想,就像添加一个矩形,其中包含每个区域的站点标签,并将 x 轴标签移动一点,这样我就有空间来做这件事。然后还使用相同的颜色添加文本(区域名称)。我想为这些区域使用不同的颜色,我之前定义的颜色。可悲的是,我无法添加图片来更好地解释问题。

我该如何解决这个问题?

希望我提供了足够的信息,但这是我第一次在这里发帖。

谢谢!!

标签: rggplot2categories

解决方案


最简单的方法是简单地绘制与区域相对应的填充条:

library(tidyverse)

alevines <- tribble(~Order_NS, ~Site, ~Zone, ~Transect..m., ~Dsar_TOT, ~Dsar_ST,
 1, "Leucate", "N_FRA", 500, 167, 33.40,
 2, "Barcarès 3", "N_FRA", 160, 92, 57.50,
 3, "Barcarès 2", "N_FRA", 160, 39, 24.38,
 4, "Barcarès 1", "N_FRA", 160, 80, 50.00,
 5, "Canet", "N_FRA", 430, 53, 12.33,
 6, "Portells", "S_FRA", 400, 144, 36.00)

col_Dsar <- "aquamarine"

pDsar <- ggplot(data = alevines, mapping = aes(x = reorder(Site, Order_NS), 
                                               y = Dsar_ST,
                                               fill = Zone)) +
  geom_col(show.legend = FALSE, colour = "black", size = 0.1) +
  geom_hline(yintercept = mean(alevines$Dsar_ST),
             linetype = "dashed", color = "grey") +
  labs(x = "Site", y = "Settlers density \n (individuals / 100 m of transect)") +
  theme(axis.text.x = element_text(angle = 90, size = 16, hjus = 1, vjust = 0.5),
        axis.title.x = element_text(face = "bold", size = 16),
        axis.title.y = element_text(face = "bold", size = 16)) +
  ylim(0, 60)

pDsar

带彩色条的条形图

如果要在轴下添加彩色框,可以使用额外的 geom 执行此操作(不要忘记更改 ylim 以使其显示:

ggplot(data = alevines, mapping = aes(x = reorder(Site, Order_NS), y = Dsar_ST, fill = "red")) +
  geom_col(show.legend = FALSE,
           fill = col_Dsar, colour = "black", size = 0.1) +
  geom_hline(yintercept = mean(alevines$Dsar_ST),
             linetype = "dashed", color = "grey") +
  geom_tile(aes(y=-1, fill=Zone),height=2) +
  labs(x = "Site", y = "Settlers density \n (individuals / 100 m of transect)") +
  theme(axis.text.x = element_text(angle = 90, size = 16, hjus = 1, vjust = 0.5),
        axis.title.x = element_text(face = "bold", size = 16),
        axis.title.y = element_text(face = "bold", size = 16)) +
  ylim(-2, 60)

x 轴下的框

最后,你可能会得到更好的东西annotation_custom()和玩,grid但我找不到如何轻松地做到这一点。


推荐阅读