2016-06-21 4 views
0

Ich zeichne mehrere Regressionslinien, unterschieden durch Einstellung lty, in einen Graphen in R mit dem Befehl abline.Hinzufügen zu einer Legende nach jeder Iteration in R

Jetzt versuche ich jetzt, eine Legende zur Handlung hinzuzufügen, um Lesern zu helfen, sie zu interpretieren. Es soll eine sehr grundlegende Legende sein:

Linientyp X = Variable 1

Linienart Y = Variable 2 usw.

Nun ist die documentation auf legend() macht total Sinn für mich, aber Es ist mir nur gelungen, jeweils eine Legende zu schreiben.

  • Gibt es eine Möglichkeit, diese Legende iterativ zu erstellen? I.e. Hinzufügen von Linientyp und Variable zu einer leeren Legende beim Plotten?

  • Oder muss ich alle Informationen sammeln und schreiben, nachdem das Plotten fertig ist? Wenn ja, was wäre der eleganteste Weg, dies zu tun?

  • Es wäre toll, wenn ich mich auf Standardpakete verlassen könnte, um den Code portabler zu machen.

    Offenbar gibt es Möglichkeiten für diese in Matlab zu tun, aber ich konnte nichts für R.

    Hier ist mein Code finden:

    cols=c(0:length(v)) 
    count=1 
    for (v in variables) 
        { 
        ... 
    lmodel=lm(v~x); 
    abline(lmodel, lty=cols[count]); 
    count=count+1 
    ... 
        } 
    } 
    

    Jede Hilfe ist sehr zu schätzen!

    +0

    Möchten Sie die Informationen sammeln, die Sie in der Legende haben möchten (z. B. durch Anhängen an eine Liste oder einen Vektor in jeder Wiederholung Ihrer Schleife) und nach der letzten 'abline' einfach die Legende * einmal zeichnen * Ihr Problem lösen? Dies wäre wahrscheinlich eine viel sauberere Lösung. – geekoverdose

    +0

    @geekoverdose Ja, das hört sich vernünftig an, danke für den Vorschlag! Ich hatte einfach keine guten Erinnerungen an diese Art von Listen-/String-Operationen in R, die mir immer ziemlich Kopfschmerzen bereitet haben ... – patrick

    +0

    kein Problem, hier kommt das minimale Arbeitsbeispiel :) – geekoverdose

    Antwort

    1

    Diese minimale Arbeitsbeispiel für die Legende Text aus allen Wiederholungen der Schleife zu sammeln sollte einfach für Ihr Problem anpassen:

    # dummy plot 
    plot(iris[,1:2]) 
    # empty legend text 
    legend_text <- c() 
    for (v in 1:4) { 
        abline(v,0, col = v, lty = v)  
        # add next legend text 
        legend_text <- c(legend_text, v) 
    } 
    # plot legend once 
    legend('topright', legend = legend_text, lty=1:4, col=1:4) 
    

    Eine weitere Sache: Wenn Sie Probleme einen Vektor mit verwenden, sollten Sie Verwenden Sie stattdessen list().