2016-09-26 1 views
3

Das mag eine dumme Frage sein, aber weiß jemand, wie man ein Treemap-Objekt anzeigt, nachdem es in R generiert wurde? Betrachten Sie den folgenden Code:Wie zeige ich ein gespeichertes Treemap-Objekt an? MWE enthalten?

loadpackages <-function(package.list = c("ggplot2", "Rcpp")) {new.packages <-package.list[!(package.list %in% installed.packages()[, "Package"])] 
    if (length(new.packages)) 
     install.packages(new.packages, repos = 'http://cran.us.r-project.org') 
    lapply(eval(package.list), require, character.only = TRUE)} 
loadpackages(c("treemap")) 

data(GNI2014) 
tm = treemap(
    GNI2014, 
    index = c("continent", "iso3"), 
    vSize = "population", 
    vColor = "GNI", 
    draw = FALSE, # comment this line out to see the treemap 
    type = "value" 
) 

Dies erzeugt keine Grafik, aber es speichert eine "Treemap-Liste". Weiß jemand wie ich dieses Objekt anzeigen kann?

PS: Mein Motiv ist es, einige kategorische Beschriftungen (fügen Sie Prozente) nach dem Erstellen einer bestimmten Baumkarte zu ändern, aber ich kann nicht eine Darstellung in der Anzeige aus dem Treetop-Objekt erstellen.

Antwort

1

Mit Blick auf den Quellcode scheint es nicht genug Informationen zu speichern, um das erneute Zeichnen zu ermöglichen. Die treemap() soll aufgerufen werden, da sie Nebenwirkungen aufträgt. Angesichts dieser Tatsache habe ich keine Ahnung, warum sie eine Option draw=FALSE haben, wenn es später keine Möglichkeit gibt, sie zu plotten.

Obwohl die offizielle Funktion es nicht erlaubt, könnten Sie die Funktion hacken. Wir können die Funktion modifizieren, um alle Parameter, die übergeben wurden, zurückzugeben. Hier ist eine Version getestet mit treemap_2.4-1

treemap2 <- treemap 
drawcall <- body(treemap)[[c(85,3,2)]] 
drawcall[[1]] <- quote(list) 
savelist <- as.list(body(t2)[[c(90,3)]]) 
savelist[["drawparam"]] <- drawcall 
body(treemap)[[c(90,3)]] <- as.call(savelist) 

Dann können Sie die Funktion wie aufrufen, bevor

tm <- treemap2(
    GNI2014, 
    index = c("continent", "iso3"), 
    vSize = "population", 
    vColor = "GNI", 
    draw = FALSE, 
    type = "value" 
) 

Und jetzt alle Parameter verwendet, um die Funktion zu zeichnen sind in tm$drawparam gespeichert. Es verwendet eine versteckte Funktion tmDrawRect alle die Zeichnung zu tun, aber Sie können anrufen, dass mit

do.call(treemap:::tmDrawRect, tm$drawparam) 

die Daten in dem Objekt gespeichert werden. Wenn Sie Daten in tm$drawparam ändern, die sich direkt auf das Diagramm auswirken sollten.

+0

Vielen Dank für Ihre hervorragende Arbeit daran. Du hast nicht nur mein Dilemma gelöst, deine Lösung hat mir auch beigebracht, wie man auf interne Funktionen Bezug nimmt. Wenn Sie jemals DC besuchen, lassen Sie es mich bitte wissen, Sie haben ein * kostenloses Mittagessen * verdient. – RTS

Verwandte Themen