首先,我知道这个答案:Mapping different states in R using facet wrap
但我使用图书馆sf
的对象
似乎facet_wrap(scales = "free")
不适用于ggplot2中使用geom_sf
绘制的对象。我收到这条消息:
Erreur:只有
coord_cartesian()
和coord_flip()
支持自由缩放cowplot
我有没有错过的选项?
任何人都可以在不被迫使用FRA <- raster::getData(name = "GADM", country = "FRA", level = 1)
FRA_sf <- st_as_sf(FRA)
g <- ggplot(FRA_sf) +
geom_sf() +
facet_wrap(~NAME_1)
(或任何其他网格范围)的情况下解决问题吗?
确实,这是一个例子。我想分别以不同的x / y限制显示不同的法国区域。
使用整个地图的范围计算尺度。
g <- purrr::map(FRA_sf$NAME_1,
function(x) {
ggplot() +
geom_sf(data = filter(FRA_sf, NAME_1 == x)) +
guides(fill = FALSE) +
ggtitle(x)
})
g2 <- cowplot::plot_grid(plotlist = g)
我需要使用ggplots列表然后将它们组合起来。 这是目标输出。它更清洁。但我也想要一个干净的方式来添加一个传奇。 (我知道可能有一个像这个其他SO问题的共同传说: facet wrap distorts state maps in R)
import glob, sys, os, shutil
from Bio import SeqIO, SearchIO
from Bio.SeqRecord import SeqRecord
import argparse
def help_function():
print 'Hi'
parser = argparse.ArgumentParser()
parser.add_argument('-input_file', '-i',type=str,help='path_to_data')
opts = parser.parse_args()
def check_file_exists(filepath, file_description):
if not os.path.exists(filepath):
print("The " + file_description + " (" + filepath + ") does not exist")
sys.exit(1)
else:
print file_description + " detected"
def remove_empty_files(alleles_files,destination):
input_handle=open(alleles_files, 'r')
gene_records=list(SeqIO.parse(input_handle, 'fasta'))
geneID_list=[]
for gene_record in gene_records:
filename=gene_record.id.split('_')
geneID=filename[0]+'_'+filename[1]
if len(gene_record.seq)<5 or 'N'in gene_record.seq:
geneID_list.append(geneID)
shutil.move(alleles_files, destination)
print geneID_list
#break
if '-' in gene_record.seq:
geneID_list.append(geneID)
shutil.move(alleles_files, destination)
print geneID_list
#break
if len(geneID_list) >0:
break
def main():
if len(sys.argv) <=1:
parser.print_help()
sys.exit()
else:
check_file_exists(opts.input_file, 'input_file')
destination=opts.input_file + '/rejected_database_genes'
if os.path.exists(destination):
print 'Folder already exits'
else:
os.makedirs(destination)
print 'Folder has been created'
files=glob.glob(opts.input_file+'/*.fa')
#print files
#sys.exit()
for f in files:
#print f
#sys.exit()
alleles_files=glob.glob(f)[0]
#print alleles_files
#sys.exit()
remove_empty_files(alleles_files,destination)
print 'Files have been removed'
main()
答案 0 :(得分:4)
我知道您正在寻找使用ggplot2
的解决方案,但我发现tmap
包可以根据您的需要进行选择。 tmap
的语法类似于ggplot2
,它也可以使用sf
个对象。以你的FRA_sf
为例,我们可以做这样的事情。
library(tmap)
tm_shape(FRA_sf) +
tm_borders() +
tm_facets(by = "NAME_1")
或者我们可以使用geom_spatial
包中的ggspatial
,但geom_spatial
只会使用Spatial*
个对象。
library(ggplot2)
library(ggspatial)
ggplot() +
geom_spatial(FRA) + # FRA is a SpatialPolygonsDataFrame object
facet_wrap(~NAME_1, scales = "free")