2014-04-04 10 views
6

Ich habe gerade begonnen, die geom_map Funktion in ggplot2 zu verwenden. Nachdem ich die 29 Posts gelesen habe, die ich hier auf geom_map finden konnte, stoße ich immer noch auf das gleiche Problem.Wie bekommst du geom_map, um alle Teile einer Karte anzuzeigen?

Mein Datenrahmen ist lächerlich groß und enthält über 2000 Zeilen. Es handelt sich im Grunde genommen um Daten zu einem bestimmten Gen (TP53), die von der WHO zusammengestellt wurden.

Bitte laden Sie es von here.

Der Header sieht wie folgt aus:

> head(ARCTP53_SOExample) 
    Mutation_ID MUT_ID hg18_Chr17_coordinates hg19_Chr17_coordinates ExonIntron Genomic_nt Codon_number 
1   16 1789    7519192    7578467  5-exon  12451   155 
2   13 1741    7519200    7578475  5-exon  12443   152 
3   17 2143    7519131    7578406  5-exon  12512   175 
4   14 2143    7519131    7578406  5-exon  12512   175 
5   15 2168    7519128    7578403  5-exon  12515   176 
6   12 3737    7517845    7577120  8-exon  13798   273 
    Description c_description g_description  g_description_hg18 WT_nucleotide Mutant_nucleotide 
1   A>G  c.463A>G g.7578467T>C NC_000017.9:g.7519192T>C   A     G 
2   C>T  c.455C>T g.7578475G>A NC_000017.9:g.7519200G>A   C     T 
3   G>A  c.524G>A g.7578406C>T NC_000017.9:g.7519131C>T   G     A 
4   G>A  c.524G>A g.7578406C>T NC_000017.9:g.7519131C>T   G     A 
5   G>T  c.527G>T g.7578403C>A NC_000017.9:g.7519128C>A   G     T 
6   G>A  c.818G>A g.7577120C>T NC_000017.9:g.7517845C>T   G     A 
    Splice_site CpG_site   Type Mut_rate WT_codon Mutant_codon WT_AA Mutant_AA ProtDescription 
1   no  no  A:T>G:C 0.170  ACC   GCC Thr  Ala   p.T155A 
2   no  yes G:C>A:T at CpG 1.243  CCG   CTG Pro  Leu   p.P152L 
3   no  yes G:C>A:T at CpG 1.280  CGC   CAC Arg  His   p.R175H 
4   no  yes G:C>A:T at CpG 1.280  CGC   CAC Arg  His   p.R175H 
5   no  no  G:C>T:A 0.054  TGC   TTC Cys  Phe   p.C176F 
6   no  yes G:C>A:T at CpG 1.335  CGT   CAT Arg  His   p.R273H 
    Mut_rateAA Effect Structural_motif Putative_stop Sample_Name Sample_ID Sample_source Tumor_origin Grade 
1  0.170 missense NDBL/beta-sheets    0 CAS91-19  17  surgery  primary  
2  1.243 missense NDBL/beta-sheets    0  CAS91-4  14  surgery  primary  
3  1.280 missense   L2/L3    0 CAS91-13  12  surgery  primary  
4  1.280 missense   L2/L3    0  CAS91-5  15  surgery  primary  
5  0.054 missense   L2/L3    0  CAS91-1  16  surgery  primary  
6  1.335 missense   L1/S/H2    0  CAS91-3  13  surgery  primary  
    Stage TNM p53_IHC KRAS_status Other_mutations Other_associations 
1    <NA>  <NA>   <NA>     
2    <NA>  <NA>   <NA>     
3    <NA>  <NA>   <NA>     
4    <NA>  <NA>   <NA>     
5    <NA>  <NA>   <NA>     
6    <NA>  <NA>   <NA>     
                   Add_Info Individual_ID Sex Age Ethnicity 
1 Mutation only present in adjacent dysplastic area (Barrett's esophagus)   17 <NA> NA   
2 Mutation only present in adjacent dysplastic area (Barrett's esophagus)   14 <NA> NA   
3 Mutation only present in adjacent dysplastic area (Barrett's esophagus)   12 <NA> NA   
4 Mutation only present in adjacent dysplastic area (Barrett's esophagus)   15 <NA> NA   
5                     16 <NA> NA   
6  Mutation absent from adjacent dysplasia area (Barrett's esophagus)   13 <NA> NA   
    Geo_area Country   Development  Population Region TP53polymorphism Germline_mutation 
1    USA More developed regions Northern America Americas         NA 
2    USA More developed regions Northern America Americas         NA 
3    USA More developed regions Northern America Americas         NA 
4    USA More developed regions Northern America Americas         NA 
5    USA More developed regions Northern America Americas         NA 
6    USA More developed regions Northern America Americas         NA 
    Family_history Tobacco Alcohol Exposure Infectious_agent Ref_ID Cross_Ref_ID PubMed Exclude_analysis 
1     <NA> <NA>  <NA>    <NA>  4   NA 1868473   False 
2     <NA> <NA>  <NA>    <NA>  4   NA 1868473   False 
3     <NA> <NA>  <NA>    <NA>  4   NA 1868473   False 
4     <NA> <NA>  <NA>    <NA>  4   NA 1868473   False 
5     <NA> <NA>  <NA>    <NA>  4   NA 1868473   False 
6     <NA> <NA>  <NA>    <NA>  4   NA 1868473   False 
    WGS_WXS 
1  No 
2  No 
3  No 
4  No 
5  No 
6  No 

Auf jeden Fall, ich möchte eine einfache Weltkarte schaffen, die die Länder Farbe wird, wo diese Mutation untersucht wurde, und wenn mehr oder weniger "Mutationssignaturen" kommen aus diesen Ländern.

Sie vielleicht besser verstehen, was ich versuche, wenn Sie dies sehen zu tun:

summary(ARCTP53_SOExample$Country) 
Australia     Brazil     Canada     China 
         1      127      76      519 
     China, Hong-Kong Chinese Taipei (Taiwan)   Czech Republic     Egypt 
        52      36      9      9 
       France     Germany     India     Iran 
        195      10      63      112 
       Ireland     Italy     Japan     Kenya 
        25      30      414      11 
      South Africa     Spain    Switzerland    Thailand 
        13      2      24      35 
     The Netherlands      UK     Uruguay      USA 
         6      17      6      189 
        NA's 
        30 

So einige Länder kommen mehrmals in meinem data.frame.

So ist das, was ich in der Hoffnung, habe meine gewünschte Karte bekommen:

library(ggplot2) 
library(maps) 
world_map<-map_data("world") 
ggplot(ARCTP53_SOExample)+geom_map(map = world_map, aes(map_id = Country,fill = Country), 
+ colour = "black") + 
+ expand_limits(x = world_map$long, y = world_map$lat) 

Und das ist, was ich bekommen: This map only contains the countries in my list...

Hat jemand eine Eingabe auf, was ich m falsch machen?

Weitere, was ich dann gerne tun würde, ist die geom_bar() der ExonIntron Spalte auf die verschiedenen Länder hinzufügen. Aber ich möchte zuerst versuchen, die richtige Karte zu erstellen?

Dank einer Mühle.

Antwort

9

die fehlenden Länder der ARC… Datenrahmen == fehlende Regionen auf der Karte, die aus dem world_map Datenrahmen mit der Basisschicht werden kann gemacht kompensiert:

library(maps) 

world_map<-map_data("world") 

gg <- ggplot(ARCTP53_SOExample) 

# need one layer with ALL THE THINGS (well, all the regions) 
gg <- gg + geom_map(dat=world_map, map = world_map, 
        aes(map_id=region), fill="white", color="black") 

# now we can put the layer we really want 
gg <- gg + geom_map(map = world_map, 
        aes(map_id = Country, fill = Country), colour = "black") 

gg <- gg + expand_limits(x = world_map$long, y = world_map$lat) 
gg <- gg + theme(legend.position="none") 
gg 

map1

ich die Legende entfernt da die Verwendung einer Choroplethe irgendwie annimmt, dass Leute Geografie kennen.

HINWEIS: Die Verwendung einer bestimmten Farbe pro Region (Land) ist wirklich keine gute Idee. Da Sie wirklich nur Highlight versuchen, wo die Mutation untersucht wurde, sollte eine einzige Farbe genügen:

gg <- ggplot(ARCTP53_SOExample) 
gg <- gg + geom_map(dat=world_map, map = world_map, aes(map_id=region), 
        fill="white", color="black") 
gg <- gg + geom_map(map = world_map, aes(map_id = Country), 
        fill = "steelblue", colour = "black") 
gg <- gg + expand_limits(x = world_map$long, y = world_map$lat) 
gg <- gg + theme(legend.position="none") 
gg 

map2

Da Sie schließlich die Geschichte von ExonIntron erzählen möchten, sollten Sie prüfen, Verwenden Sie das als die Farbe der Choropleth. Ich weiß nichts von Genen, also weiß ich nicht, ob ein Farbverlauf sinnvoll ist oder ob bestimmte Farben die richtige Wahl sind.I wird postulieren, dass die Fülle der verschiedenen Farben, die durch den folgenden Code erstellt werden, mich denken lassen, dass Sie eine Gradientskala für intron und eine für extron tun möchten. Auch hier bin ich kein Gen-Mensch.

gg <- ggplot(ARCTP53_SOExample) 
gg <- gg + geom_map(dat=world_map, map = world_map, aes(map_id=region), 
        fill="white", color="black") 
gg <- gg + geom_map(map = world_map, aes(map_id = Country, fill = ExonIntron), 
        colour = "black") 
gg <- gg + expand_limits(x = world_map$long, y = world_map$lat) 
gg 

map3

die Namen Einige der Farben sind entweder in wirklich kleinen Regionen, oder sie sind in Regionen, deren Namen in world_map$region nicht übereinstimmen. Sie werden sich das wahrscheinlich ansehen wollen. Dies ist:

wm.reg <- unique(as.character(world_map$region)) 
arc.reg <- unique(as.character(ARCTP53_SOExample$Country)) 

arc.reg %in% wm.reg 
## [1] TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE 
## [14] TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE FALSE FALSE TRUE TRUE 

ein bisschen zeigt einige fehlen.

Sie könnten auch überlegen, die Legende anders zu machen (d. H., Setzen Sie es auf der Unterseite), wenn Sie mit einer Legende gehen, um Ihre eigene Ergebnistabelle zu erstellen.

UPDATE

ich fast vergessen. Da Sie (wahrscheinlich) keine Notwendigkeit, in die Antarktis haben, sollten Sie es loswerden, da es ziemlich viel wertvollen Platz auffressen:

world_map <- subset(world_map, region!="Antarctica") 

gg <- ggplot(ARCTP53_SOExample) 
gg <- gg + geom_map(dat=world_map, map = world_map, aes(map_id=region), 
        fill="white", color="black") 
gg <- gg + geom_map(map = world_map, aes(map_id = Country, fill = ExonIntron), 
        colour = "black") 
gg <- gg + expand_limits(x = world_map$long, y = world_map$lat) 
gg <- gg + theme(legend.position="none") 
gg 

map4

(HINWEIS: habe ich von der Legende los da ich wirklich denke, Sie sollten überdenken, wie Sie die Farben auf der Karte wollen, und verwenden Sie dann eine zusätzliche Tabelle oder Handlung wie die Legende zu handeln)


FINAL UPDATE (pro OP Anfrage in den Kommentaren unten)

library(ggplot2) 
library(maps) 
library(plyr) 
library(gridExtra) 

ARCTP53_SOExample <- read.csv("dat.csv") 

# reduce all the distinct exon/introns to just exon or intron 

ARCTP53_SOExample$EorI <- factor(ifelse(grepl("exon", 
               ARCTP53_SOExample$ExonIntron, 
               ignore.case = TRUE), 
             "exon", "intron")) 

# extract summary data for the two variables we care about for the map 

arc.combined <- count(ARCTP53_SOExample, .(Country, EorI)) 
colnames(arc.combined) <- c("region", "EorI", "ei.ct") 

# get total for country (region) and add to the summary info 

arc.combined <- merge(arc.combined, count(arc.combined, .(region), wt_var=.(ei.ct))) 
colnames(arc.combined) <- c("region", "EorI", "ei.ct", "region.total") 

# it wasn't specified if the "EorI" is going to be used on the map so 
# we won't use it below (but we could, now) 

# get map and intercourse Antarctica 

world_map <- map_data("world") 
world_map <- subset(world_map, region!="Antarctica") 

# this will show the counts by country with all of the "chart junk" removed 
# and the "counts" scaled as a gradient, and with the legend at the top 

gg <- ggplot(arc.combined) 
gg <- gg + geom_map(dat=world_map, map = world_map, aes(map_id=region), 
        fill="white", color="#7f7f7f", size=0.25) 
gg <- gg + geom_map(map = world_map, aes(map_id = region, fill = region.total), size=0.25) 
gg <- gg + scale_fill_gradient(low="#fff7bc", high="#cc4c02", name="Tumor counts") 
gg <- gg + expand_limits(x = world_map$long, y = world_map$lat) 
gg <- gg + labs(x="", y="", title="Tumor contribution by country") 
gg <- gg + theme(panel.grid=element_blank(), panel.border=element_blank()) 
gg <- gg + theme(axis.ticks=element_blank(), axis.text=element_blank()) 
gg <- gg + theme(legend.position="top") 
gg 

mapb

# BUT you might want to show the counts by intron/exon by country 
# SO we do a separate map for each factor and combine them 
# with some grid magic. This provides more granular control over 
# each choropleth (in the event one wanted to tweak one or the other) 

# exon 

gg <- ggplot(arc.combined[arc.combined$EorI=="exon",]) 
gg <- gg + geom_map(dat=world_map, map = world_map, aes(map_id=region), 
        fill="white", color="#7f7f7f", size=0.25) 
gg <- gg + geom_map(map = world_map, aes(map_id = region, fill = ei.ct), size=0.25) 
gg <- gg + scale_fill_gradient(low="#f7fcb9", high="#238443", name="Tumor counts") 
gg <- gg + expand_limits(x = world_map$long, y = world_map$lat) 
gg <- gg + labs(x="", y="", title="Tumor contribution by 'exon' & country") 
gg <- gg + theme(panel.grid=element_blank(), panel.border=element_blank()) 
gg <- gg + theme(axis.ticks=element_blank(), axis.text=element_blank()) 
gg <- gg + theme(legend.position="top") 
gg.exon <- gg 

# intron 

gg <- ggplot(arc.combined[arc.combined$EorI=="intron",]) 
gg <- gg + geom_map(dat=world_map, map = world_map, aes(map_id=region), 
        fill="white", color="#7f7f7f", size=0.25) 
gg <- gg + geom_map(map = world_map, aes(map_id = region, fill = ei.ct), 
        colour = "#7f7f7f", size=0.25) 
gg <- gg + scale_fill_gradient(low="#ece7f2", high="#0570b0", name="Tumor counts") 
gg <- gg + expand_limits(x = world_map$long, y = world_map$lat) 
gg <- gg + labs(x="", y="", title="Tumor contribution by 'intron' & country") 
gg <- gg + theme(panel.grid=element_blank(), panel.border=element_blank()) 
gg <- gg + theme(axis.ticks=element_blank(), axis.text=element_blank()) 
gg <- gg + theme(legend.position="top") 
gg.intron <- gg 

# use some grid magic to combine them into one plot 

grid.arrange(gg.exon, gg.intron, ncol=1) 

mapb

+0

Sie meinen Sehr geehrter Herr ist ein absolutes Genie! Ich danke dir sehr. Nun, da ich gelernt habe, wie man die Karte erstellt, habe ich natürlich noch weitere Fragen. Erstens, wie Sie in der Zusammenfassung (Land) sehen können, haben einige Länder mehr Tumore, die untersucht wurden, als andere beigetragen (das ist, was die Zusammenfassung Ihnen sagt). Wie könnte man den "count" der Country-Variable als Farbe für den jeweiligen Bereich verwenden? Außerdem - und das ist ein Syntaxproblem - wie würde ich das ExonIntron so definieren, dass es entweder nur als "Exon" oder als "Intron" gezählt wird? Vielen Dank! Wirklich erstaunlich! – OFish

+1

fertig. Sie sollten auf dem besten Weg zu einem sein choropleth master :-) – hrbrmstr

+1

Ich habe vergessen hinzuzufügen, dass ich nicht dein "Problem" gelöst habe, also musst du das wirklich tun, bevor du die Choropleth fertig hast. – hrbrmstr

Verwandte Themen