希望这是一个非常简单的解决方案。我对R Studio完全陌生,甚至不完全理解我目前所拥有的代码。请让我知道如果我需要给予更多的信息。
我在绘制不同植物种类的位置数据,按年代给它们上色。我还需要把三角形的植物标本馆和圆圈的植物观察在野外。这就是我目前所拥有的,沿着它所产生的图像。
在我的数据中,我有一个名为“basisOfRecord”的列,其中有两个类别,即人类观察或保存的标本。如何更改代码来分配Map图标?我有点被这个项目扔给了我,并且在没有R基础的情况下一直在混乱地搜索,甚至没有一般的编码,所以如果我的脚本真的很混乱,我很抱歉。
这里是Map数据的链接-https://www.dropbox.com/scl/fo/v2v8x3zy4uhlw3mtan28l/h?rlkey=60g8s28z1mix9co2podjkb16p&dl=0
这里是一个链接到CSV -https://www.dropbox.com/scl/fi/9t7qpxo1113uban1qpsib/americanus.csv?rlkey=nguai55lmlsc23i48h1j2zeee&dl=0
library(tidyverse)
library(lubridate)
library(viridis)
library(sf)
americanus <- read.csv("C:/Users/MayeJ/Documents/Map Data/GBIF/Americanus/americanus.csv")
month <- 1
day <- 1
americanus$TrueDate <- as.Date(paste(americanus$TrueDate, month, day, sep = "-"))
print(americanus$TrueDate)
americanus <- americanus[complete.cases(americanus$decimalLatitude, americanus$decimalLongitude), ]
obs.year = lubridate::year(americanus$TrueDate)
decade.cha = as.character(floor(obs.year / 10) * 10)
decade = (floor(obs.year / 10) * 10)
americanus <- st_as_sf(americanus, coords = c("decimalLongitude", "decimalLatitude"), crs = 4326)
crs = "WGS84"
agr = "constant"
remove = F
class(americanus)
north.america.bound <- st_read("/Users/MayeJ/Documents/Map Data/NA_PoliticalDivisions/NA_PoliticalDivisions/data/bound_l/boundary_l_v2.shp")
americanus.map <- ggplot(data = north.america.bound) +
theme_bw() +
geom_sf(fill = "gray90", color = "black") +
geom_sf(data = americanus,
size = 3,
shape = 21,
alpha = 0.7,
aes(fill = decade.cha)) +
scale_fill_viridis(option = "B", discrete = T, direction = 1) +
coord_sf(xlim = c(-3235000, 3062000),
ylim = c(-900000, 4007000))
americanus.map
ggsave(plot = americanus.map,
"C:/Users/MayeJ/Documents/Map Data/GBIF/Americanus/americanusmap.jpg",
device = "jpg", dpi = 300, units = "in",
width = 10, height = 7.5)
字符串
Here is the map
我试着寻找使用ggplots和sf的Map示例,看看它们是否同时使用多个符号,但还没有找到任何东西。我只是没有任何形式的编码格式的直觉,所以我甚至不知道从哪里开始实验。
1条答案
按热度按时间hi3rlvi21#
问题是
basisOfRecord
列有六个类别。四个只是PreservedSpecimen
的不同版本(例如:也有"preservedspecimen"
),然后有"HumanObservation"
,最后一个叫做"voucher"
。因此,当只为shape提供两个值时(正如我在评论中所建议的那样),你会得到一个错误,而当不包括scale_shape_manual
时,你会得到前六个默认形状,它们只支持color
aes,而不支持fill
。在下面的代码中,我将
"PreservedSpecimen"
的四个变体重新编码为一个类别"PreservedSpecimen"
,并为"voucher"
添加了另一个形状值。然而,仍然有一个填充颜色没有显示在图例中的问题,我使用guides(fill = guide_legend(override.aes = list(shape = 21)))
修复了这个问题。此外,我简化了你的代码,特别是十年的计算,最后我把图例放在底部。字符串
的数据