Commit 032ea88e authored by Kosmas Hench's avatar Kosmas Hench

correct error in S10 and S11

parent cbc7183d
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
---
title: "Script repository"
subtitle: "Supplement to 'Association between vision and pigmentation genes during genomic divergence'"
subtitle: "(Hench *et al.* 2018 supplement)"
author: "Kosmas Hench"
date: "`r Sys.Date()`"
documentclass: book
......@@ -13,7 +13,7 @@ description: "Scripts used to produce Figures and Supplementary Figures of 'Asso
# Intro
This repository contains a *cleaned up* version of the scripts used in the Hench *et al.* 2018 paper.
This repository contains a *cleaned up* version of the scripts used in the paper "*Association between vision and pigmentation genes during genomic divergence*".
It documents the entire progression from raw data to the final manuscript figures.
A visual overview of the process is given in [Workflow](workflow.html).
......
---
output: html_document
editor_options:
editor_options:
chunk_output_type: console
---
# Supplementary Figure 10
......
---
output: html_document
editor_options:
editor_options:
chunk_output_type: console
---
# Supplementary Figure 11
......
......@@ -25,7 +25,7 @@
<meta name="author" content="Kosmas Hench">
<meta name="date" content="2018-07-30">
<meta name="date" content="2018-08-03">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="apple-mobile-web-app-capable" content="yes">
......
......@@ -25,7 +25,7 @@
<meta name="author" content="Kosmas Hench">
<meta name="date" content="2018-07-30">
<meta name="date" content="2018-08-03">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="apple-mobile-web-app-capable" content="yes">
......
......@@ -25,7 +25,7 @@
<meta name="author" content="Kosmas Hench">
<meta name="date" content="2018-07-30">
<meta name="date" content="2018-08-03">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="apple-mobile-web-app-capable" content="yes">
......
......@@ -25,7 +25,7 @@
<meta name="author" content="Kosmas Hench">
<meta name="date" content="2018-07-30">
<meta name="date" content="2018-08-03">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="apple-mobile-web-app-capable" content="yes">
......
......@@ -25,7 +25,7 @@
<meta name="author" content="Kosmas Hench">
<meta name="date" content="2018-07-30">
<meta name="date" content="2018-08-03">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="apple-mobile-web-app-capable" content="yes">
......@@ -234,13 +234,13 @@ code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Inf
<section class="normal" id="section-">
<div id="header">
<h1 class="title">Script repository</h1>
<h3 class="subtitle"><em>Supplement to ‘Association between vision and pigmentation genes during genomic divergence’</em></h3>
<h3 class="subtitle"><em>(Hench <em>et al.</em> 2018 supplement)</em></h3>
<h4 class="author"><em>Kosmas Hench</em></h4>
<h4 class="date"><em>2018-07-30</em></h4>
<h4 class="date"><em>2018-08-03</em></h4>
</div>
<div id="intro" class="section level1">
<h1><span class="header-section-number">1</span> Intro</h1>
<p>This repository contains a <em>cleaned up</em> version of the scripts used in the Hench <em>et al.</em> 2018 paper. It documents the entire progression from raw data to the final manuscript figures.</p>
<p>This repository contains a <em>cleaned up</em> version of the scripts used in the paper “<em>Association between vision and pigmentation genes during genomic divergence</em>. It documents the entire progression from raw data to the final manuscript figures.</p>
<p>A visual overview of the process is given in <a href="workflow.html">Workflow</a>.</p>
<div id="data" class="section level2">
<h2><span class="header-section-number">1.1</span> Data</h2>
......
---
title: "Script repository"
subtitle: "Supplement to 'Association between vision and pigmentation genes during genomic divergence'"
subtitle: "(Hench *et al.* 2018 supplement)"
author: "Kosmas Hench"
date: "2018-07-30"
date: "2018-08-03"
documentclass: book
bibliography: [book.bib]
biblio-style: apalike
......@@ -13,7 +13,7 @@ description: "Scripts used to produce Figures and Supplementary Figures of 'Asso
# Intro
This repository contains a *cleaned up* version of the scripts used in the Hench *et al.* 2018 paper.
This repository contains a *cleaned up* version of the scripts used in the paper "*Association between vision and pigmentation genes during genomic divergence*".
It documents the entire progression from raw data to the final manuscript figures.
A visual overview of the process is given in [Workflow](workflow.html).
......
[
["index.html", "Script repository 1 Intro 1.1 Data 1.2 Figures 1.3 Background", " Script repository Supplement to ‘Association between vision and pigmentation genes during genomic divergence’ Kosmas Hench 2018-07-30 1 Intro This repository contains a cleaned up version of the scripts used in the Hench et al. 2018 paper. It documents the entire progression from raw data to the final manuscript figures. A visual overview of the process is given in Workflow. 1.1 Data The raw data used within the study is stored at the European Nucleotide Archive (ENA). It can be retrieved using the project accesion number PRJEB27858. This includes the raw data used for the genome assembly, the resequencing data used for the population genetic analysis as well as the RNA sequencing data. External data that is used within the scripts can not be provided (eg. the stickleback reference genome) and needs to be accessed independently. 1.2 Figures A more detailed documentation exists for all the figures of the manuscript: F1, F2 &amp; F3 for the extended data figure: E1 as well as for all the supplementary figures: S01, S02, S03, S05, S06, S07, S08, S09, S10, S11, S12, S13, S14 &amp; S15 The only exception to this is the supplementary figure S04. This figure is a byproduct of the anchoring step during the assembly and was produced by the Allmaps software. Afterwards, Inkscape was used to adjust the coloration and labels of the linkage maps. 1.3 Background All scripts assume two variables to be set within the bash environment: $WORK is assumed to point to the base folder of this repository $SFTWR is a folder that contains all the software dependencies that are used within the scripts The dependencies need to be downloaded and installed separately. The scripts are organized/ numbered in chronological order. Multiple scripts with equal numbers (eg. 2.2.4.pca_bel.sh, 2.2.4.pca_hon.sh &amp; 2.2.4.pca_pan.sh) usually work on parallel branches of the process and can be executed in parallel. In contrast to this, scripts with higher numbers usually depend on the output of scripts with lower numbers and should therefore be executed afterwards. Most of the scripts start with a comment block that defines the requested resources for the used computer cluster: #PBS -l elapstim_req=&lt;runtime&gt; #PBS -l memsz_job=&lt;memory&gt; #PBS -b &lt;threads&gt; #PBS -l cpunum_job=&lt;cores&gt; #PBS -N &lt;job-name&gt; #PBS -q &lt;job-que&gt; #PBS -o &lt;stdout-log&gt;.stdout #PBS -e &lt;stderr-log&gt;.stderr "],
["index.html", "Script repository 1 Intro 1.1 Data 1.2 Figures 1.3 Background", " Script repository (Hench et al. 2018 supplement) Kosmas Hench 2018-08-03 1 Intro This repository contains a cleaned up version of the scripts used in the paper “Association between vision and pigmentation genes during genomic divergence”. It documents the entire progression from raw data to the final manuscript figures. A visual overview of the process is given in Workflow. 1.1 Data The raw data used within the study is stored at the European Nucleotide Archive (ENA). It can be retrieved using the project accesion number PRJEB27858. This includes the raw data used for the genome assembly, the resequencing data used for the population genetic analysis as well as the RNA sequencing data. External data that is used within the scripts can not be provided (eg. the stickleback reference genome) and needs to be accessed independently. 1.2 Figures A more detailed documentation exists for all the figures of the manuscript: F1, F2 &amp; F3 for the extended data figure: E1 as well as for all the supplementary figures: S01, S02, S03, S05, S06, S07, S08, S09, S10, S11, S12, S13, S14 &amp; S15 The only exception to this is the supplementary figure S04. This figure is a byproduct of the anchoring step during the assembly and was produced by the Allmaps software. Afterwards, Inkscape was used to adjust the coloration and labels of the linkage maps. 1.3 Background All scripts assume two variables to be set within the bash environment: $WORK is assumed to point to the base folder of this repository $SFTWR is a folder that contains all the software dependencies that are used within the scripts The dependencies need to be downloaded and installed separately. The scripts are organized/ numbered in chronological order. Multiple scripts with equal numbers (eg. 2.2.4.pca_bel.sh, 2.2.4.pca_hon.sh &amp; 2.2.4.pca_pan.sh) usually work on parallel branches of the process and can be executed in parallel. In contrast to this, scripts with higher numbers usually depend on the output of scripts with lower numbers and should therefore be executed afterwards. Most of the scripts start with a comment block that defines the requested resources for the used computer cluster: #PBS -l elapstim_req=&lt;runtime&gt; #PBS -l memsz_job=&lt;memory&gt; #PBS -b &lt;threads&gt; #PBS -l cpunum_job=&lt;cores&gt; #PBS -N &lt;job-name&gt; #PBS -q &lt;job-que&gt; #PBS -o &lt;stdout-log&gt;.stdout #PBS -e &lt;stderr-log&gt;.stderr "],
["workflow.html", "2 Workflow 2.1 Info", " 2 Workflow 2.1 Info In the following, I give an overview over the individual steps done in during de novo assembly of the barred hamlet (Hypoplectrus puella) genome. Within the scheme, each arrow represents a script (or class of scripts) connecting individual steps of the assembly/ analysis. The respective scripts are store in the folders $WORK/1_assembly_scripts &amp; $WORK/2_reSeq-scripts. For the final visualization (the green squares in panel 2.2.Popgen), additional documentation is provided in the following pages. "],
["figure-1.html", "3 Figure 1 3.1 Summary 3.2 Details of F1.R", " 3 Figure 1 3.1 Summary This is the accessory documentation of Figure 1. The Figure can be recreated by running the R script F1.R: cd $WORK/3_figures/F_scripts Rscript --vanilla F1.R rm Rplots.pdf 3.2 Details of F1.R In the following, the individual steps of the R script are documented. Is an executable R script that depends on a variety of image manipulation and geodata packages. Additionally, the supporting R script (F1.functions.R) in needed: library(sp) library(maptools) library(scales) library(PBSmapping) library(RColorBrewer) library(tidyverse) library(ggforce) library(cowplot) library(scatterpie) library(hrbrthemes) library(cowplot) library(grid) library(gridSVG) library(grImport2) library(grConvert) library(ggmap) library(marmap) source(&quot;../../0_data/0_scripts/F1.functions.R&quot;) 3.2.1 Fig. 1 a) First, we load the data sheet containing the sampling location as well as the population specifics for each sample and sub sample it to include only the samples included in the re-sequencing study. The Coordinates need to be transformed from (deg min sec) to decimal degrees. The sample inventory is summarized over populations and merged with the coordinates later used for the sample pointers. dataAll &lt;- read.csv(&#39;../../0_data/0_resources/F1.sample.txt&#39;,sep=&#39;\\t&#39;) %&gt;% mutate(loc=substrRight(as.character(id),3)) data &lt;- dataAll %&gt;% filter(sample==&quot;sample&quot;) dataSum &lt;- data%&gt;% rowwise()%&gt;% mutate(nn = sum(as.numeric(strsplit(as.character(`Latittude.N`),&#39; &#39;)[[1]])*c(1,1/60,1/3600)), ww = sum(as.numeric(strsplit(as.character(`Longitude.W`),&#39; &#39;)[[1]])*c(1,1/60,1/3600))) %&gt;% group_by(loc) %&gt;% summarise(n=mean(nn,na.rm = T),w=-mean(ww,na.rm = T)) %&gt;% as.data.frame() %&gt;% cbind(.,read.csv(&#39;../../0_data/0_resources/F1.pointer.csv&#39;)) Then, we read in the coordinates of helper points that will be used to draw the bezier curves of the sample pointers. We also set the spacial range of the map. crvs &lt;- read.csv(&#39;../../0_data/0_resources/F1.curve.csv&#39;) xlimW = c(-100,-53); ylimW = c(7,30.8) The base map relies on the world data from the maps package. This data is loaded and clipped to the extend of the plotting area. worldmap = map_data(&quot;world&quot;) names(worldmap) &lt;- c(&quot;X&quot;,&quot;Y&quot;,&quot;PID&quot;,&quot;POS&quot;,&quot;region&quot;,&quot;subregion&quot;) worldmap = clipPolys(worldmap, xlim=xlimW,ylim=ylimW, keepExtra=TRUE) External images are loaded for annotation. This includes the hamlet images, the country flags and legend. # compas and legend compGrob &lt;- gTree(children=gList(pictureGrob(readPicture(&quot;../../0_data/0_img/north-cairo.svg&quot;)))) legGrob &lt;- gTree(children=gList(pictureGrob(readPicture(&quot;../../0_data/0_img/legend-map-cairo.svg&quot;)))) # hamlets nigGrob &lt;- gTree(children=gList(pictureGrob(readPicture(&quot;../../0_data/0_img/nigricans-cairo.svg&quot;)))) pueGrob &lt;- gTree(children=gList(pictureGrob(readPicture(&quot;../../0_data/0_img/puella-cairo.svg&quot;)))) uniGrob &lt;- gTree(children=gList(pictureGrob(readPicture(&quot;../../0_data/0_img/unicolor-cairo.svg&quot;)))) # flags belGrob &lt;- gTree(children=gList(pictureGrob(readPicture(&quot;../../0_data/0_img/belize-cairo.svg&quot;)))) honGrob &lt;- gTree(children=gList(pictureGrob(readPicture(&quot;../../0_data/0_img/honduras-cairo.svg&quot;)))) panGrob &lt;- gTree(children=gList(pictureGrob(readPicture(&quot;../../0_data/0_img/panama-cairo.svg&quot;)))) # globe and pairwise legend globGrob &lt;- gTree(children=gList(pictureGrob(readPicture(&quot;../../0_data/0_img/caribbean-cairo.svg&quot;)))) legPGrob &lt;- gTree(children=gList(pictureGrob(readPicture(&quot;../../0_data/0_img/legend_pairs-cairo.svg&quot;)))) We create a summary data table, containing the sample size of each population and the position for the annotation within the map. ypos = c(2,1,0)*1.6; xpos=c(1,0,1)*4.57 sampSize &lt;- data %&gt;% group_by(spec,loc) %&gt;% summarise(n=length(id)) %&gt;% filter(spec!=&#39;gum&#39;) %&gt;% arrange(loc) %&gt;% cbind(y=c(rep(24.4,3)+ypos, # belize rep(13.6,3)+ypos, # panama rep(9.2,3)+ypos), # honduras x=c(rep(-94.7,3)+xpos, # belize rep(-78,3)+xpos, # panama rep(-98.75,3)+xpos)) # honduras Next, we read in the shape files containing the distribution of the hamlet species. One file contains the overlap of the distribution ranges of H. nigricans, H. puella and H. unicolor, while the other contains the distribution range of the whole genus (Hypoplectrus). These distributions rely on the data provided by the Smithsonian Tropical Research Institute that were processed using gimp and qgis (including the Georeferencer Plugin) uS &lt;- readShapeSpatial(&#39;../../0_data/0_resources/F1_shps/F1.npu_distribution.shp&#39;); uS_f &lt;- fortify(uS,region=&quot;DN&quot;); names(uS_f) &lt;- c(&quot;X&quot;,&quot;Y&quot;,&quot;POS&quot;,&quot;hole&quot;,&quot;piece&quot;,&quot;id&quot;,&quot;PID&quot;); uS_f$PID &lt;- as.numeric(uS_f$PID) uS_f &lt;- clipPolys(uS_f, xlim=xlimW,ylim=ylimW, keepExtra=TRUE) hS &lt;- readShapeSpatial(&#39;../../0_data/0_resources/F1_shps/F1.hypoplectrus_distribution.shp&#39;); hS_f &lt;- fortify(hS,region=&quot;DN&quot;); names(hS_f) &lt;- c(&quot;X&quot;,&quot;Y&quot;,&quot;POS&quot;,&quot;hole&quot;,&quot;piece&quot;,&quot;id&quot;,&quot;PID&quot;); hS_f$PID &lt;- as.numeric(hS_f$PID) hS_f &lt;- clipPolys(hS_f, xlim=xlimW,ylim=ylimW, keepExtra=TRUE) We set some colors used for plotting: clrShps &lt;- c(&quot;#ffc097&quot;,&quot;#b1d4f8&quot;) # hamlet distributions cFILL &lt;- rgb(.7,.7,.7) # landmass ccc&lt;-rgb(0,.4,.8) # sample pointers Now, we got everything needed for the base map (Fig. 1 a): p1 &lt;- ggplot()+ # set coordinates coord_map(projection = &#39;mercator&#39;,xlim=xlimW,ylim=ylimW)+ # axes labels labs(y=&quot;Latitude&quot;,x=&quot;Longitude&quot;) + # preset theme theme_mapK + # landmass layer geom_polygon(data=worldmap,aes(X,Y,group=PID),fill = cFILL, col=rgb(0,0,0),lwd=.2)+ # genus distribution layer geom_polygon(data=hS_f,aes(X,Y,group=PID),fill=clrShps[2],col=rgb(.3,.3,.3),lwd=.2)+ # species distribution layer geom_polygon(data=uS_f,aes(X,Y,group=PID),fill=clrShps[1],col=clrShps[1],lwd=.2)+ # point background geom_point(data=sampSize,aes(x=x,y=y),col=&#39;white&#39;,size=7)+ # sample size annotation geom_text(data=sampSize,aes(x=x,y=y,label=n),size=3)+ # sample pointer curves geom_bezier(data = crvs,aes(x= x, y = y, group = loc),col=ccc,lwd=.4) + # sample pointer points geom_point(data = crvs[c(3,6,9),],aes(x= x, y = y, group = loc),size=5,col=ccc,shape=21,fill=&#39;white&#39;)+ # sample pointer labels geom_text(data = crvs[c(3,6,9),],aes(x= x, y = y, label=c(&#39;B&#39;,&#39;P&#39;,&#39;H&#39;)),size=3)+ # sample point anchors geom_point(data=dataSum,aes(x=w,y=n),size=1.5,shape=21,fill=&#39;white&#39;) 3.2.2 Fig. 1 b) Next we create the sub figure containing the FST information (Fig. 1 b). We first read in the data and define the color palette. fstdata &lt;- read.csv(&#39;../../2_output/08_popGen/05_fst/genome_wide_weighted_mean_fst.txt&#39;, sep=&#39;\\t&#39;,skip = 1,head=F,col.names = c(&#39;pair&#39;,&#39;fst&#39;)) %&gt;% filter(!pair %in% c(&#39;NU&#39;,&#39;PN&#39;,&#39;PU&#39;)) %&gt;% arrange(fst) %&gt;% mutate(x=row_number()) %&gt;% rowwise() %&gt;% mutate(loc = substr(as.character(pair),2,2), pop1 = substr(as.character(pair),1,1), pop2 = substr(as.character(pair),3,3), pairclass=paste(pop1,pop2,sep=&#39;-&#39;)) # defining the pairwise color palette clrP &lt;- c(&#39;#fb8620&#39;,&#39;#1b519c&#39;,&#39;#d93327&#39;) And than generate the bar plot: p5 &lt;- ggplot(fstdata,aes(x=x,y=fst,fill=pairclass))+ # bar layer geom_bar(stat=&#39;identity&#39;)+ # adding annotations annotation_custom(legPGrob,xmin =0.15,xmax =5,ymin =.008,ymax = .035)+ # set color palette scale_fill_manual(values = clrP)+ # y label and axis scale_y_continuous(name=expression(italic(&quot;F&quot;[&#39;ST&#39;])), expand = c(0,0))+ # x labels and axis scale_x_continuous(expand = c(.01,0),breaks = 1:9, labels = c(&#39;H&#39;,&#39;H&#39;,&#39;B&#39;,&#39;H&#39;,&#39;P&#39;,&#39;B&#39;,&#39;B&#39;,&#39;P&#39;,&#39;P&#39;))+ # preset theme theme_mapK+ # theme adjustments theme(legend.position = &#39;none&#39;, panel.grid.major.y = element_line(color=rgb(.9,.9,.9)), axis.title.x = element_blank(), axis.text.x = element_text(size = 8)); 3.2.3 Fig. 1 c) The last sub figure contains the PCA output for each location. For those, we define the color palette for hamlet species and read in the PCA data generated by pcadapt. clr&lt;-c(&#39;#000000&#39;,&#39;#d45500&#39;,&#39;#000000&#39;) fll&lt;-c(&#39;#000000&#39;,&#39;#d45500&#39;,&#39;#ffffff&#39;) eVclr &lt;- c(rep(&#39;darkred&#39;,2),rep(cFILL,8)) # Belize data belPCA &lt;- readRDS(&#39;../../2_output/08_popGen/04_pca/bel/belpca.Rds&#39;) # Honduras data honPCA &lt;- readRDS(&#39;../../2_output/08_popGen/04_pca/hon/honpca.Rds&#39;) # Panama data panPCA &lt;- readRDS(&#39;../../2_output/08_popGen/04_pca/pan/panpca.Rds&#39;) The data for each PCA is merged with metadata about the samples and than plotted. Further, the explained variance of each PC is extracted for the axis labels. # Honduras PCA (data) dataHON &lt;- cbind(dataAll %&gt;% filter(sample==&#39;sample&#39;,loc==&#39;hon&#39;)%&gt;% select(id,spec), honPCA$scores); names(dataHON)[3:12]&lt;- paste(&#39;PC&#39;,1:10,sep=&#39;&#39;) exp_varHON &lt;- (honPCA$singular.values[1:10])^2/length(honPCA$maf) xlabHON &lt;- paste(&#39;PC1 (&#39;,sprintf(&quot;%.1f&quot;,exp_varHON[1]*100),&#39;%)&#39;)# explained varinace)&#39;) ylabHON &lt;- paste(&#39;PC2 (&#39;,sprintf(&quot;%.1f&quot;,exp_varHON[2]*100),&#39;%)&#39;)# explained varinace)&#39;) # Honduras PCA (plot) p2 &lt;- ggplot(dataHON,aes(x=PC1,y=PC2,col=spec,fill=spec))+geom_point(size=1.1,shape=21)+ scale_color_manual(values=clr,guide=F)+ scale_fill_manual(values=fll,guide=F)+theme_mapK+ theme(legend.position=&#39;bottom&#39;, panel.border = element_rect(color=rgb(.9,.9,.9),fill=rgb(1,1,1,0)), axis.title.y = element_text(vjust = -7), axis.title.x = element_text(vjust = 6), plot.margin = unit(rep(-10,4),&#39;pt&#39;))+#coord_equal()+ scale_x_continuous(name=xlabHON,breaks = c(-.2,.5))+ scale_y_continuous(name=ylabHON,breaks = c(-.4,.2)) # Belize PCA (data) dataBEL &lt;- cbind(dataAll %&gt;% filter(sample==&#39;sample&#39;,loc==&#39;bel&#39;) %&gt;% select(id,spec), belPCA$scores); names(dataBEL)[3:12]&lt;- paste(&#39;PC&#39;,1:10,sep=&#39;&#39;) exp_varBEL &lt;- (belPCA$singular.values[1:10])^2/length(belPCA$maf) xlabBEL &lt;- paste(&#39;PC1 (&#39;,sprintf(&quot;%.1f&quot;,exp_varBEL[1]*100),&#39;%)&#39;) ylabBEL &lt;- paste(&#39;PC2 (&#39;,sprintf(&quot;%.1f&quot;,exp_varBEL[2]*100),&#39;%)&#39;) # Belize PCA (plot) p3 &lt;- ggplot(dataBEL,aes(x=PC1,y=PC2,col=spec,fill=spec))+geom_point(size=1.1,shape=21)+ scale_color_manual(values=clr,guide=F)+ scale_fill_manual(values=fll,guide=F)+theme_mapK+ theme(legend.position=&#39;bottom&#39;, panel.border = element_rect(color=rgb(.9,.9,.9),fill=rgb(1,1,1,0)), axis.title.y = element_text(vjust = -7), axis.title.x = element_text(vjust = 6), plot.margin = unit(rep(-10,4),&#39;pt&#39;))+ scale_x_continuous(name=xlabBEL,breaks = c(-.15,.25))+ scale_y_continuous(name=ylabBEL,breaks = c(-.3,.2)) # Panama PCA (data) dataPAN &lt;- cbind(dataAll %&gt;% filter(sample==&#39;sample&#39;,loc==&#39;boc&#39;,spec!=&#39;gum&#39;)%&gt;% select(id,spec), panPCA$scores); names(dataPAN)[3:12]&lt;- paste(&#39;PC&#39;,1:10,sep=&#39;&#39;) exp_varPAN &lt;- (panPCA$singular.values[1:10])^2/length(panPCA$maf) xlabPAN &lt;- paste(&#39;PC1 (&#39;,sprintf(&quot;%.1f&quot;,exp_varPAN[1]*100),&#39;%)&#39;) ylabPAN &lt;- paste(&#39;PC2 (&#39;,sprintf(&quot;%.1f&quot;,exp_varPAN[2]*100),&#39;%)&#39;) # Panama PCA (plot) p4 &lt;- ggplot(dataPAN,aes(x=PC1,y=PC2,col=spec,fill=spec))+geom_point(size=1.1,shape=21)+ scale_color_manual(values=clr,guide=F)+ scale_fill_manual(values=fll,guide=F)+theme_mapK+ theme(legend.position=&#39;bottom&#39;, panel.border = element_rect(color=rgb(.9,.9,.9),fill=rgb(1,1,1,0)), axis.title.y = element_text(vjust = -7), axis.title.x = element_text(vjust = 6), plot.margin = unit(rep(-10,4),&#39;pt&#39;))+ scale_x_continuous(name=xlabPAN,breaks = c(-.15,.2))+ scale_y_continuous(name=ylabPAN,breaks = c(-.2,.2)) 3.2.4 Fig 1 (complete) Finally, we have all the pieces and can put together Fig. 1. We need a few helper variables for the placing and scaling of the annotations: # scaling (x,y) hSC &lt;- c(.07,.07) # hamlet placing (within group) yf &lt;- c(0.07,0.035,0.00);xf&lt;-c(0.07,0,0.07) # hamlet group placing yS &lt;- c(.485,.577,.805);xS&lt;-c(.09,.417,.156) Using ggdraw() form the cowplot package, the figure is put together. F1 &lt;- ggdraw()+ # include subplots draw_plot(plot = p1,0,.38,.81,.64)+ draw_plot(plot = p5,0,.01,.24,.35)+ draw_plot(plot = p2,.25,.01,.23,.33)+ draw_plot(plot = p3,.5,.01,.23,.33)+ draw_plot(plot = p4,.75,.01,.23,.33)+ # annotations (legend) draw_grob(legGrob, .375,.395,.65,.65)+ # annotations (compas) draw_grob(compGrob, 0.605, 0.482, 0.06, 0.06)+ # annotations (hamlets) draw_grob(nigGrob, xf[1]+xS[1], yf[1]+yS[1], hSC[1], hSC[2])+ # Honduras draw_grob(pueGrob, xf[2]+xS[1], yf[2]+yS[1], hSC[1], hSC[2])+ # Honduras draw_grob(uniGrob, xf[3]+xS[1], yf[3]+yS[1], hSC[1], hSC[2])+ # Honduras draw_grob(nigGrob, xf[1]+xS[2], yf[1]+yS[2], hSC[1], hSC[2])+ # Panama draw_grob(pueGrob, xf[2]+xS[2], yf[2]+yS[2], hSC[1], hSC[2])+ # Panama draw_grob(uniGrob, xf[3]+xS[2], yf[3]+yS[2], hSC[1], hSC[2])+ # Panama draw_grob(nigGrob, xf[1]+xS[3], yf[1]+yS[3], hSC[1], hSC[2])+ # Belize draw_grob(pueGrob, xf[2]+xS[3], yf[2]+yS[3], hSC[1], hSC[2])+ # Belize draw_grob(uniGrob, xf[3]+xS[3], yf[3]+yS[3], hSC[1], hSC[2])+ # Belize # annotations (flags) draw_grob(panGrob, 0.3, 0.485, 0.042, 0.042)+ draw_grob(belGrob, 0.2, 0.67, 0.042, 0.042)+ draw_grob(honGrob, 0.28, 0.61, 0.042, 0.042)+ draw_grob(honGrob, 0.285+.09, 0.37, 0.042, 0.042)+ draw_grob(belGrob, 0.535+.09, 0.37, 0.042, 0.042)+ draw_grob(panGrob, 0.785+.09, 0.37, 0.042, 0.042)+ # annotations (subfigure labels) draw_plot_label(x = c(.005,.005,.25), y = c(.995,.42,.42), label =letters[1:3]) It is then exported using ggsave(). ggsave(plot = F1,filename = &#39;../output/F1.pdf&#39;,width = 183,height = 145,units = &#39;mm&#39;,device = cairo_pdf) "],
["figure-2.html", "4 Figure 2 4.1 Summary 4.2 Details of F2.R", " 4 Figure 2 4.1 Summary This is the accessory documentation of Figure 2. The Figure can be recreated by running the R script F2.R: cd $WORK/3_figures/F_scripts Rscript --vanilla F2.R rm Rplots.pdf 4.2 Details of F2.R In the following, the individual steps of the R script are documented. Is an executable R script that depends on a variety of image manipulation and data managing packages. library(grid) library(gridSVG) library(grImport2) library(grConvert) library(tidyverse) library(cowplot) library(hrbrthemes) 4.2.1 Reading in Data Figure 2 depends on the results of the FST computation by VCFtools in broad resolution (50 kb windows, 5 kb increments). The results of the individual species pairs are loaded individually, the genomic positions added to the loci and details about the species comparisons added. Further more, the extent of the individual LGs in loaded. karyo &lt;- read.csv(&#39;../../0_data/0_resources/F2.karyo.txt&#39;,sep=&#39;\\t&#39;) %&gt;% mutate(GSTART=lag(cumsum(END),n = 1,default = 0), GEND=GSTART+END,GROUP=rep(letters[1:2],12)) %&gt;% select(CHROM,GSTART,GEND,GROUP) # Global ------------- pn &lt;- read.csv(&#39;../../2_output/08_popGen/05_fst/pue-nig.50kb.5kb.windowed.weir.fst&#39;,sep=&#39;\\t&#39;) %&gt;% merge(.,(karyo %&gt;% select(-GEND,-GROUP)),by=&#39;CHROM&#39;,allx=T) %&gt;% mutate(POS=(BIN_START+BIN_END)/2,GPOS=POS+GSTART,COL=&#39;PN&#39;,RUN=&#39;PN&#39;); pu &lt;- read.csv(&#39;../../2_output/08_popGen/05_fst/pue-uni.50kb.5kb.windowed.weir.fst&#39;,sep=&#39;\\t&#39;) %&gt;% merge(.,(karyo %&gt;% select(-GEND,-GROUP)),by=&#39;CHROM&#39;,allx=T) %&gt;% mutate(POS=(BIN_START+BIN_END)/2,GPOS=POS+GSTART,COL=&#39;PU&#39;,RUN=&#39;PU&#39;); nu &lt;- read.csv(&#39;../../2_output/08_popGen/05_fst/nig-uni.50kb.5kb.windowed.weir.fst&#39;,sep=&#39;\\t&#39;) %&gt;% merge(.,(karyo %&gt;% select(-GEND,-GROUP)),by=&#39;CHROM&#39;,allx=T) %&gt;% mutate(POS=(BIN_START+BIN_END)/2,GPOS=POS+GSTART,COL=&#39;NU&#39;,RUN=&#39;NU&#39;); # Panama ------------- ppnp &lt;- read.csv(&#39;../../2_output/08_popGen/05_fst/pueboc-nigboc.50kb.5kb.windowed.weir.fst&#39;,sep=&#39;\\t&#39;) %&gt;% merge(.,(karyo %&gt;% select(-GEND,-GROUP)),by=&#39;CHROM&#39;,allx=T) %&gt;% mutate(POS=(BIN_START+BIN_END)/2,GPOS=POS+GSTART,COL=&#39;PN&#39;,RUN=&#39;PPNP&#39;); ppup &lt;- read.csv(&#39;../../2_output/08_popGen/05_fst/pueboc-uniboc.50kb.5kb.windowed.weir.fst&#39;,sep=&#39;\\t&#39;) %&gt;% merge(.,(karyo %&gt;% select(-GEND,-GROUP)),by=&#39;CHROM&#39;,allx=T) %&gt;% mutate(POS=(BIN_START+BIN_END)/2,GPOS=POS+GSTART,COL=&#39;PU&#39;,RUN=&#39;PPUP&#39;); npup &lt;- read.csv(&#39;../../2_output/08_popGen/05_fst/nigboc-uniboc.50kb.5kb.windowed.weir.fst&#39;,sep=&#39;\\t&#39;) %&gt;% merge(.,(karyo %&gt;% select(-GEND,-GROUP)),by=&#39;CHROM&#39;,allx=T) %&gt;% mutate(POS=(BIN_START+BIN_END)/2,GPOS=POS+GSTART,COL=&#39;NU&#39;,RUN=&#39;NPUP&#39;); # Belize ------------- pbnb &lt;- read.csv(&#39;../../2_output/08_popGen/05_fst/puebel-nigbel.50kb.5kb.windowed.weir.fst&#39;,sep=&#39;\\t&#39;) %&gt;% merge(.,(karyo %&gt;% select(-GEND,-GROUP)),by=&#39;CHROM&#39;,allx=T) %&gt;% mutate(POS=(BIN_START+BIN_END)/2,GPOS=POS+GSTART,COL=&#39;PN&#39;,RUN=&#39;PBNB&#39;); pbub &lt;- read.csv(&#39;../../2_output/08_popGen/05_fst/puebel-unibel.50kb.5kb.windowed.weir.fst&#39;,sep=&#39;\\t&#39;) %&gt;% merge(.,(karyo %&gt;% select(-GEND,-GROUP)),by=&#39;CHROM&#39;,allx=T) %&gt;% mutate(POS=(BIN_START+BIN_END)/2,GPOS=POS+GSTART,COL=&#39;PU&#39;,RUN=&#39;PBUB&#39;); nbub &lt;- read.csv(&#39;../../2_output/08_popGen/05_fst/nigbel-unibel.50kb.5kb.windowed.weir.fst&#39;,sep=&#39;\\t&#39;) %&gt;% merge(.,(karyo %&gt;% select(-GEND,-GROUP)),by=&#39;CHROM&#39;,allx=T) %&gt;% mutate(POS=(BIN_START+BIN_END)/2,GPOS=POS+GSTART,COL=&#39;NU&#39;,RUN=&#39;NBUB&#39;); # Honduras ------------- phnh &lt;- read.csv(&#39;../../2_output/08_popGen/05_fst/puehon-nighon.50kb.5kb.windowed.weir.fst&#39;,sep=&#39;\\t&#39;) %&gt;% merge(.,(karyo %&gt;% select(-GEND,-GROUP)),by=&#39;CHROM&#39;,allx=T) %&gt;% mutate(POS=(BIN_START+BIN_END)/2,GPOS=POS+GSTART,COL=&#39;PN&#39;,RUN=&#39;PHNH&#39;); phuh &lt;- read.csv(&#39;../../2_output/08_popGen/05_fst/puehon-unihon.50kb.5kb.windowed.weir.fst&#39;,sep=&#39;\\t&#39;) %&gt;% merge(.,(karyo %&gt;% select(-GEND,-GROUP)),by=&#39;CHROM&#39;,allx=T) %&gt;% mutate(POS=(BIN_START+BIN_END)/2,GPOS=POS+GSTART,COL=&#39;PU&#39;,RUN=&#39;PHUH&#39;); nhuh &lt;- read.csv(&#39;../../2_output/08_popGen/05_fst/nighon-unihon.50kb.5kb.windowed.weir.fst&#39;,sep=&#39;\\t&#39;) %&gt;% merge(.,(karyo %&gt;% select(-GEND,-GROUP)),by=&#39;CHROM&#39;,allx=T) %&gt;% mutate(POS=(BIN_START+BIN_END)/2,GPOS=POS+GSTART,COL=&#39;NU&#39;,RUN=&#39;NHUH&#39;); The individual species comparisons are combined into a single data set. Then the order of the species comparisons and of the comparison types are set. data &lt;- rbind(pn,pu,nu,ppnp,ppup,npup,pbnb,pbub,nbub,phnh,phuh,nhuh) data$RUN &lt;- factor(as.character(data$RUN), levels=c(&#39;PN&#39;,&#39;NU&#39;,&#39;PU&#39;,&#39;PPNP&#39;,&#39;NPUP&#39;,&#39;PPUP&#39;,&#39;PBNB&#39;,&#39;NBUB&#39;,&#39;PBUB&#39;,&#39;PHNH&#39;,&#39;NHUH&#39;,&#39;PHUH&#39;)) data$COL &lt;- factor(as.character(data$COL),levels=c(&#39;PN&#39;,&#39;PU&#39;,&#39;NU&#39;)) Then, the genome wide weighted mean of FST is loaded. gwFST &lt;- read.csv(&#39;../../2_output/08_popGen/05_fst/genome_wide_weighted_mean_fst.txt&#39;,sep=&#39;\\t&#39;) gwFST$RUN &lt;- factor(gwFST$run,levels=levels(data$RUN)) 4.2.2 Computing 99.98 FST percentiles The upper 99.98 FST percentile is computed per run. Then windows above this threshold are identified for each global run. threshs &lt;- data %&gt;% group_by(RUN) %&gt;% summarise(thresh=quantile(WEIGHTED_FST,.9998)) data2 &lt;- data %&gt;% filter(RUN %in% levels(data$RUN)[1:3]) %&gt;% merge(.,threshs,by=&#39;RUN&#39;,all.x=T) %&gt;% mutate(OUTL = (WEIGHTED_FST&gt;thresh)) %&gt;% filter(OUTL) %&gt;% group_by(RUN) %&gt;% mutate(CHECK=cumsum(1-(BIN_START-lag(BIN_START,default = 0)==5000)),ID=paste(RUN,&#39;-&#39;,CHECK,sep=&#39;&#39;)) %&gt;% ungroup() %&gt;% group_by(ID) %&gt;% summarise(CHROM=CHROM[1], xmin = min(BIN_START+GSTART), xmax=max(BIN_END+GSTART), xmean=mean(GPOS), LGmin=min(BIN_START), LGmax=min(BIN_END), LGmean=min(POS), RUN=RUN[1],COL=COL[1]) %&gt;% ungroup() %&gt;% mutate(muskS = letters[as.numeric(as.factor(xmin))], musk=LETTERS[c(1,3,4,4,1,2,2,3)]) musks &lt;- data2 %&gt;% group_by(musk) %&gt;% summarise(MUSKmin=min(xmin), MUSKmax=max(xmax), MUSKminLG=min(LGmin), MUSKmaxLG=max(LGmax)) %&gt;% merge(data2,.,by=&#39;musk&#39;) %&gt;% mutate(muskX = ifelse(musk %in% c(&quot;A&quot;,&quot;B&quot;), MUSKmin-1e+07,MUSKmax+1e+07)) 4.2.3 Plotting For plotting, colors,labels and the scaling of the secondary axis are pre-defined. clr &lt;- c(&#39;#fb8620&#39;,&#39;#d93327&#39;,&#39;#1b519c&#39;) annoclr &lt;- rgb(.4,.4,.4) lgclr &lt;- rgb(.9,.9,.9) yl &lt;- expression(italic(&#39;F&#39;[ST])) secScale &lt;- 20 The base plot is done with ggplot(). p1 &lt;- ggplot()+ # background shading for LGs geom_rect(inherit.aes = F,data=karyo,aes(xmin=GSTART,xmax=GEND, ymin=-Inf,ymax=Inf,fill=GROUP))+ # vertical lines for outlier windows geom_vline(data=data2,aes(xintercept=xmean),col=annoclr,lwd=.2)+ # Fst values geom_point(data=data,aes(x=GPOS,y=WEIGHTED_FST,col=COL),size=.01)+ # labels for the outlier windows geom_text(data=musks,aes(x=muskX,y=.65,label=musk))+ # vertical line separating sliding Fst from genome wide Fst geom_vline(data = data.frame(x=567000000),aes(xintercept=x),col=annoclr,lwd=.2)+ # genome wide Fst geom_rect(data=gwFST,aes(xmin=570*10^6,xmax=573*10^6,ymin=0,ymax=gwFST*secScale))+ # layout of y axis and secondary y axis scale_y_continuous(name = yl,limits=c(-.03,.83), breaks=0:4*0.2,labels = c(0,&#39;&#39;,0.4,&#39;&#39;,0.8), sec.axis = sec_axis(~./secScale,labels = c(0,&#39;&#39;,.02,&#39;&#39;,.04)))+ # layout of x axis scale_x_continuous(expand = c(0,0),limits = c(0,577*10^6), breaks = c((karyo$GSTART+karyo$GEND)/2,571*10^6), labels = c(1:24,&quot;g.w.&quot;),position = &quot;top&quot;)+ # set color map scale_color_manual(name=&#39;comparison&#39;,values=clr)+ # set fill of LG backgrounds scale_fill_manual(values = c(NA,lgclr),guide=F)+ # pre-defined plot theme theme_ipsum(grid = F, axis_title_just = &#39;c&#39;, axis_title_family = &#39;bold&#39;, strip_text_size = 9)+ # tweaks of the plot theme theme(plot.margin = unit(c(2,25,40,0),&#39;pt&#39;), panel.spacing.y = unit(3,&#39;pt&#39;), legend.position = &#39;none&#39;, axis.title.x = element_blank(), axis.ticks.y = element_line(color = annoclr), axis.line.y = element_line(color = annoclr), axis.text.y = element_text(margin = unit(c(0,3,0,0),&#39;pt&#39;)), axis.title.y = element_text(vjust = -1), strip.background = element_blank(), strip.text = element_blank())+ # separate the plots of the individual species pairs facet_grid(RUN~.) ## Warning: Removed 421 rows containing missing values (geom_point). External images are loaded for annotation. legGrob &lt;- gTree(children=gList(pictureGrob(readPicture(&quot;../../0_data/0_img/legend-pw-cairo.svg&quot;)))) carGrob &lt;- gTree(children=gList(pictureGrob(readPicture(&quot;../../0_data/0_img/caribbean-cairo.svg&quot;)))) panGrob &lt;- gTree(children=gList(pictureGrob(readPicture(&quot;../../0_data/0_img/panama-cairo.svg&quot;)))) belGrob &lt;- gTree(children=gList(pictureGrob(readPicture(&quot;../../0_data/0_img/belize-cairo.svg&quot;)))) honGrob &lt;- gTree(children=gList(pictureGrob(readPicture(&quot;../../0_data/0_img/honduras-cairo.svg&quot;)))) # variables for annotation placement ys &lt;- .0765 ysc &lt;- .0057 yd &lt;- .2195 boxes = data.frame(x=rep(.9675,4),y=c(ys,ys+yd+ysc,ys+(yd+ysc)*2,ys+(yd+ysc)*3)) 4.2.4 Composing the final figure And finally the base plot is combined with the external annotations. F2 &lt;- ggdraw(p1)+ geom_rect(data = boxes, aes(xmin = x, xmax = x + .02, ymin = y, ymax = y + yd), colour = NA, fill = c(rep(lgclr,3),annoclr))+ draw_label(&#39;Global&#39;, x = .9775, y = boxes$y[4]+.08, size = 9, angle=-90,col=&#39;white&#39;)+ draw_label(&#39;Belize&#39;, x = .9775, y = boxes$y[2]+.08, size = 9, angle=-90)+ draw_label(&#39;Honduras&#39;, x = .9775, y = boxes$y[1]+.08, size = 9, angle=-90)+ draw_label(&#39;Panama&#39;, x = .9775, y = boxes$y[3]+.08, size = 9, angle=-90)+ draw_grob(legGrob, 0.01, 0, 1, 0.08)+ draw_grob(carGrob, 0.954, boxes$y[4]+.78*yd, .045, .045)+ draw_grob(belGrob, 0.954, boxes$y[2]+.78*yd, .045, .045)+ draw_grob(honGrob, 0.954, boxes$y[1]+.78*yd, .045, .045)+ draw_grob(panGrob, 0.954, boxes$y[3]+.78*yd, .045, .045) The FST outlier windows are then exported to be used as reference in other figures. write.table(x = data2, file = &#39;../../0_data/0_resources/fst_outlier_windows.txt&#39;,sep=&#39;\\t&#39;,quote = F,row.names = F) write.table(x = musks, file = &#39;../../0_data/0_resources/fst_outlier_ID.txt&#39;,sep=&#39;\\t&#39;,quote = F,row.names = F) The figure is then exported using ggsave(). ggsave(plot = F2,filename = &#39;../output/F2.png&#39;,width = 183,height = 183,dpi = 200,units = &#39;mm&#39;) #ggsave(&#39;fst_mac02_weight_99.98.eps&#39;,width = 183,height = 183,dpi = 200,units = &#39;mm&#39;) "],
......
......@@ -25,7 +25,7 @@
<meta name="author" content="Kosmas Hench">
<meta name="date" content="2018-07-30">
<meta name="date" content="2018-08-03">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="apple-mobile-web-app-capable" content="yes">
......
......@@ -25,7 +25,7 @@
<meta name="author" content="Kosmas Hench">
<meta name="date" content="2018-07-30">
<meta name="date" content="2018-08-03">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="apple-mobile-web-app-capable" content="yes">
......
......@@ -25,7 +25,7 @@
<meta name="author" content="Kosmas Hench">
<meta name="date" content="2018-07-30">
<meta name="date" content="2018-08-03">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="apple-mobile-web-app-capable" content="yes">
......
......@@ -25,7 +25,7 @@
<meta name="author" content="Kosmas Hench">
<meta name="date" content="2018-07-30">
<meta name="date" content="2018-08-03">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="apple-mobile-web-app-capable" content="yes">
......
......@@ -25,7 +25,7 @@
<meta name="author" content="Kosmas Hench">
<meta name="date" content="2018-07-30">
<meta name="date" content="2018-08-03">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="apple-mobile-web-app-capable" content="yes">
......
......@@ -25,7 +25,7 @@
<meta name="author" content="Kosmas Hench">
<meta name="date" content="2018-07-30">
<meta name="date" content="2018-08-03">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="apple-mobile-web-app-capable" content="yes">
......
......@@ -25,7 +25,7 @@
<meta name="author" content="Kosmas Hench">
<meta name="date" content="2018-07-30">
<meta name="date" content="2018-08-03">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="apple-mobile-web-app-capable" content="yes">
......
......@@ -25,7 +25,7 @@
<meta name="author" content="Kosmas Hench">
<meta name="date" content="2018-07-30">
<meta name="date" content="2018-08-03">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="apple-mobile-web-app-capable" content="yes">
......
......@@ -25,7 +25,7 @@
<meta name="author" content="Kosmas Hench">
<meta name="date" content="2018-07-30">
<meta name="date" content="2018-08-03">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="apple-mobile-web-app-capable" content="yes">
......
......@@ -25,7 +25,7 @@
<meta name="author" content="Kosmas Hench">
<meta name="date" content="2018-07-30">
<meta name="date" content="2018-08-03">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="apple-mobile-web-app-capable" content="yes">
......
......@@ -25,7 +25,7 @@
<meta name="author" content="Kosmas Hench">
<meta name="date" content="2018-07-30">
<meta name="date" content="2018-08-03">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="apple-mobile-web-app-capable" content="yes">
......
......@@ -25,7 +25,7 @@
<meta name="author" content="Kosmas Hench">
<meta name="date" content="2018-07-30">
<meta name="date" content="2018-08-03">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="apple-mobile-web-app-capable" content="yes">
......
......@@ -25,7 +25,7 @@
<meta name="author" content="Kosmas Hench">
<meta name="date" content="2018-07-30">
<meta name="date" content="2018-08-03">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="apple-mobile-web-app-capable" content="yes">
......
......@@ -25,7 +25,7 @@
<meta name="author" content="Kosmas Hench">
<meta name="date" content="2018-07-30">
<meta name="date" content="2018-08-03">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="apple-mobile-web-app-capable" content="yes">
......
......@@ -25,7 +25,7 @@
<meta name="author" content="Kosmas Hench">
<meta name="date" content="2018-07-30">
<meta name="date" content="2018-08-03">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="apple-mobile-web-app-capable" content="yes">
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment