R 使用ggplot在x轴上显示其他类别

R 使用ggplot在x轴上显示其他类别,r,ggplot2,categories,R,Ggplot2,Categories,嗨 我正在写我的硕士论文,我正在与情节作斗争。 我想代表每个采样点的幼鱼丰度。 这就是它现在的样子: # Pepraration steps setwd("~/Desktop/TFM/Datos") library(tidyverse) library(vegan) # Import data mydata <- read.csv("~/Desktop/TFM/Datos/Alevins_2020_SUBSET.csv") # Colours c

我正在写我的硕士论文,我正在与情节作斗争。 我想代表每个采样点的幼鱼丰度。 这就是它现在的样子:

# 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
#清洗步骤
setwd(“~/Desktop/TFM/Datos”)
图书馆(tidyverse)
图书馆(素食主义者)
#导入数据

mydata我想我知道你在说什么:你在寻找类似于Excel数据透视图在以多种方式分割数据时在x轴上显示的多行的东西,对吗?我不知道有什么方法可以在R中做到这一点,而不需要大量的黑客解决方法。相反,您是否考虑过使用小倍数来表示数据?下面是一个数据的小倍数示例,仍然使用
ggplot2
。我还使用
scale\u y\u continuous
调用中的
expand=
删除了0和水平轴之间的额外空间

我使用的数据:

alevines <- data.frame(Order_NS = 1:6, 
                   Site = c("Leucate", "Barcares", "Barcares", "Barcares", 
                            "Canet", "Portells"),
                   Zone = c(rep("N_FRA", 5), "S_FRA"),
                   Transect..m. = c(500, 160, 160, 160, 430, 400),
                   Dsar_TOT = c(167, 92, 39, 80, 53, 144), 
                   Dsar_ST = c(33, 57, 24, 50, 12, 36))

一个值得关注的提示:您的意思是在同一地点(如Barcares)进行多次观测时添加数据吗?如果没有,您可以尝试这样做,用
ObservationID
替换数据中的其他唯一标识符

alevines$ObservationID <- 1:nrow(alevines)
ggplot(alevines, aes(x = reorder(Site, Order_NS), group = ObservationID,
                 y = Dsar_ST, fill = "red")) +
  geom_col(show.legend = FALSE, position = "dodge",
           fill = col_Dsar, 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)) +
  scale_y_continuous(limits = c(0, 60), expand = c(0, 0)) +
  facet_wrap(~ Zone, scales = "free")

alevines$ObservationID最简单的方法是简单地用对应于分区的填充物绘制条形图:

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


最后,通过
annotation\u custom()
grid
游戏,您可能会得到更好的效果,但我找不到如何轻松实现。

你好,vandalaiza。你能分享你的数据吗,或者它的一个样本?我能显示标题,够了吗?我刚刚编辑了评论。嘿,亚历克斯洛克,首先,谢谢你抽出时间!我不能改变酒吧填充,我需要他们的颜色,因为我有更多的物种来绘图。第二个选择是工作得更好一点,但我不喜欢我得到一个传奇。有没有办法把图例文字放在瓷砖上?如何更改R分配给瓷砖的颜色?您可以将
show.legend=FALSE
添加到
geom\u瓷砖()
,就像使用
geom\u col()
一样。要更改颜色比例,请使用
scale\u fill_*()
和*手动、brewer或您喜欢的其他工具。要添加文本,您可以使用
geom_text()
,例如
geom_text(aes(y=-2,color=Zone,label=Zone),show.legend=FALSE)
(在这种情况下,您可以使用
scale_color*()
)控制颜色。酷!我快到了,但还有两件事要做:(1)我似乎无法控制哪个区域采用哪种颜色。我尝试了
limits=alevines$Zone
,但我得到一个错误,我需要42种颜色(这是站点的数量),但我只指定了4种。(2) 我试着这样做是为了文本:
geom_文本(aes(y=-1.5,color=“black”,label=Zone),show.legend=FALSE)
但首先它不是黑色的(我说我想要和Zone相同的颜色,但我改变了主意:D),它出现了42次,每个站点一次。我想把它放在瓦片中间,黑色。对于颜色,取<代码>颜色=“黑色”<代码> > <代码> AES()>代码>:它不是映射。只在一组栏中只有一次,我不知道如何简单地用<代码> GeOMGTeX()/代码>,您可以用“代码”来定义“手动”,用“代码>注释No.* /代码>(只在指定的地方绘制矩形和文本,而不是如何指定数据,这对于每个<代码>站点<代码>都是一次)。我现在觉得自己很愚蠢。好的,我设法将其更改为黑色,但我将尝试使用注释*(),尽管对我来说这似乎是一个相当困难的函数。否则我会在以后添加它,最后只有四个文本框,不值得为此疯狂。我不知道如何解决我之前评论中的问题(1)?嘿,Shirewoman 2,我真的很感谢你花时间帮助我:)我也不是Excel专家,所以你说的话很混乱,我无法确认。要是我能放张照片就好了!但我首先需要一个更好的声誉显然啊哈第一个情节不,我希望3个Barcares网站分开。无论如何,第二个情节这是个好主意,但我已经尝试过了。。问题是,我只是用一个y轴绘制一个图,而不是每个区域一个。。此外,我想为轴心文字或任何东西添加颜色,但每个区域只添加一种颜色。
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
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)