r - 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))
提前致谢。
解决方案
假设您仍然感兴趣并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))
并从那里拿走。
推荐阅读
- google-cloud-platform - 如何在谷歌云上托管“多页”的静态网站
- powerbi - 对功率 BI 矩阵进行排序以保持年份升序
- python - 脚本中断,因为列表中不存在索引
- docker - Jenkins构建如何获取docker镜像
- php - 在 Laravel 7/8 中获取当前 URL 的一部分
- lua - 如何调用复制存储中的函数
- html - 调整窗口大小时文本对齐过渡
- graph - 在 CPLEX 中有向图中依赖于集合/子集的弧的初始化
- python - 将程序转换为 Python 可执行文件后,不会创建文件夹
- facebook - 如何从 Facebook 生成 JWT 类型的访问令牌