首页 > 解决方案 > ggplot2 - 用一列绘制 Y 轴,但从另一列标记

问题描述

我正在创建跨越多个区域/时间的物种丰度气泡图。我需要 Y 轴从顶部按物种分类顺序排列,因此有一个单独的整数列“数字”,我用它来创建绘图以保留正确的顺序。但是我必须用“物种”列替换 Y 轴标签。

我可能忽略了一些简单的事情,但我已经尝试了几件事,但无法让任何事情发挥作用。

我无法使用物种列绘制图的原因是总共有 100 多个物种,而 R 将顺序变为字母数字,这更糟。我也尝试过这样修复它。

我尝试在导入时保留顺序、scale_y_discrete功能(见下文)和其他地方提出的其他几个解决方案。Str_order 以及我遇到的一两个其他推荐命令不再可用。

任何建议都会非常受欢迎。

  ggplot(data, aes(x=Sample, y=Number)) +
geom_point(aes(size=ifelse(Value==0, NA, Value), alpha = 0.75)) +
scale_size(range = c(0, 5)) +
scale_y_discrete(limits=c(data$Species)
structure(list(Year = c("1984 - 1989", "2017 - 2020", "1984 - 1989", 
"2017 - 2020", "1984 - 1989", "2017 - 2020", "1984 - 1989", "2017 - 2020", 
"1984 - 1989", "2017 - 2020", "1984 - 1989", "2017 - 2020", "1984 - 1989", 
"2017 - 2020", "1984 - 1989", "2017 - 2020", "1984 - 1989", "2017 - 2020", 
"1984 - 1989", "2017 - 2020", "1984 - 1989", "2017 - 2020", "1984 - 1989", 
"2017 - 2020", "1984 - 1989", "2017 - 2020", "1984 - 1989", "2017 - 2020", 
"1984 - 1989", "2017 - 2020"), Sample = c("Developed_zone_1992", 
"Developed_zone_2020", "Paddock_zone_1992", "Paddock_zone_2020", 
"Sanctuary_zone_1992", "Sanctuary_zone_2020", "Developed_zone_1992", 
"Developed_zone_2020", "Paddock_zone_1992", "Paddock_zone_2020", 
"Sanctuary_zone_1992", "Sanctuary_zone_2020", "Developed_zone_1992", 
"Developed_zone_2020", "Paddock_zone_1992", "Paddock_zone_2020", 
"Sanctuary_zone_1992", "Sanctuary_zone_2020", "Developed_zone_1992", 
"Developed_zone_2020", "Paddock_zone_1992", "Paddock_zone_2020", 
"Sanctuary_zone_1992", "Sanctuary_zone_2020", "Developed_zone_1992", 
"Developed_zone_2020", "Paddock_zone_1992", "Paddock_zone_2020", 
"Sanctuary_zone_1992", "Sanctuary_zone_2020"), Colour = c(1L, 
1L, 2L, 2L, 3L, 3L, 1L, 1L, 2L, 2L, 3L, 3L, 1L, 1L, 2L, 2L, 3L, 
3L, 1L, 1L, 2L, 2L, 3L, 3L, 1L, 1L, 2L, 2L, 3L, 3L), Value = c(2L, 
5L, 10L, 10L, 0L, 10L, 2L, 0L, 0L, 5L, 0L, 10L, 0L, 0L, 5L, 10L, 
0L, 5L, 0L, 0L, 0L, 2L, 0L, 2L, 2L, 1L, 0L, 10L, 0L, 10L), Family = c("Phasianidae", 
"Phasianidae", "Phasianidae", "Phasianidae", "Phasianidae", "Phasianidae", 
"Anatidae", "Anatidae", "Anatidae", "Anatidae", "Anatidae", "Anatidae", 
"Anatidae", "Anatidae", "Anatidae", "Anatidae", "Anatidae", "Anatidae", 
"Anatidae", "Anatidae", "Anatidae", "Anatidae", "Anatidae", "Anatidae", 
"Anatidae", "Anatidae", "Anatidae", "Anatidae", "Anatidae", "Anatidae"
), Species = c("1. Grey francolin (60)", "1. Grey francolin (60)", 
"1. Grey francolin (60)", "1. Grey francolin (60)", "1. Grey francolin (60)", 
"1. Grey francolin (60)", "2. Egyptian goose (55)", "2. Egyptian goose (55)", 
"2. Egyptian goose (55)", "2. Egyptian goose (55)", "2. Egyptian goose (55)", 
"2. Egyptian goose (55)", "3. Garganey (60)", "3. Garganey (60)", 
"3. Garganey (60)", "3. Garganey (60)", "3. Garganey (60)", "3. Garganey (60)", 
"4. Northern shoveler (62)", "4. Northern shoveler (62)", "4. Northern shoveler (62)", 
"4. Northern shoveler (62)", "4. Northern shoveler (62)", "4. Northern shoveler (62)", 
"5. Mallard (67)", "5. Mallard (67)", "5. Mallard (67)", "5. Mallard (67)", 
"5. Mallard (67)", "5. Mallard (67)"), Number = c(142L, 142L, 
142L, 142L, 142L, 142L, 141L, 141L, 141L, 141L, 141L, 141L, 140L, 
140L, 140L, 140L, 140L, 140L, 139L, 139L, 139L, 139L, 139L, 139L, 
138L, 138L, 138L, 138L, 138L, 138L)), class = "data.frame", row.names = c(NA, 
-30L))

提前致谢。

在此处输入图像描述

标签: rggplot2

解决方案


假设您仍然感兴趣并df用作您的数据框,您可以使用:

sSpeciesLevels <- c("5. Mallard (67)", 
                    "4. Northern shoveler (62)", 
                    "3. Garganey (60)",
                    "2. Egyptian goose (55)",
                    "1. Grey francolin (60)")
            
 ggplot(df, aes(x = Sample, 
                y = factor(Species, 
                           levels = sSpeciesLevels))) +
     geom_point(aes(size = ifelse(Value == 0, NA, Value)), alpha = 0.75) +
     scale_size(range = c(0, 5))

并从那里拿走。


推荐阅读