web-dev-qa-db-de.com

Wie kann ich Punkte in diesem Streudiagramm kennzeichnen?

Können Sie mir helfen, die folgende Grafik mit Etiketten zu versehen?

http://img849.imageshack.us/img849/7594/snap1034.png

Der Code, den ich verwende, ist: 

valbanks<-scan("banks.txt", what=list(0,0,""), sep="", skip=1, comment.char="#")
valbanks

valj2007<-valbanks[[1]]
valj2009<-valbanks[[2]]
namebank<-valbanks[[3]]

percent_losses<-(valj2009-valj2007)/valj2007
percent_losses

abs_losses<-(valj2007-valj2009)
abs_losses

plot(abs_losses, percent_losses,main="Absolute Losses vs. Relative Losses(in%)",xlab="Losses (absolute, in miles of millions)",ylab="Losses relative (in % of January´2007 value",col="blue", pch = 19, cex = 1, lty = "solid", lwd = 2,text(percet_losses, abs_losses,namebank))

text(percet_losses, abs_losses,labels=namebank, cex= 0.7, offset = 10)

und die Daten sind:

Value_Jan_2007  Value_Jan_2009  Bank    #
49  16  Morgan_Stanley
120 4.6 RBS
76  10.3    Deutsche_Bank
67  17  Credit_Agricole
80  26  Societé_Generale
91  7.4 Barclays
108 32.5    BNP-Paribas
93  26  Unicredit
116 35  UBS
75 27   Credit_Suise
100 35  Goldman_Sachs
116 64  Santander
255 19  Citigroup
165 85  JP_Morgan
215 97  HSBC

Vielen Dank

Was ist die Option, das Etikett unten, rechts, oben, links, ... zu platzieren?

Zusammenfassend: Ich möchte eine Grafik, die der in der zweiten Nachricht von this post Ähnelt, aber es gibt keinen Code dort.

Welchen Code muss ich eingeben?


wenn ich text(percet_losses, abs_losses,namebank) stelle, erhalte ich nichts: Der Graph geht ohne Änderungen weiter.

Könnten Sie mir den Code zeigen, den ich setzen muss?

Vielen Dank

50
Mika Ike

Ihr Aufruf an text() gibt nichts aus, weil Sie Ihr x und Ihr y invertiert haben:

plot(abs_losses, percent_losses, 
     main= "Absolute Losses vs. Relative Losses(in%)",
     xlab= "Losses (absolute, in miles of millions)",
     ylab= "Losses relative (in % of January´2007 value)",
     col= "blue", pch = 19, cex = 1, lty = "solid", lwd = 2)

text(abs_losses, percent_losses, labels=namebank, cex= 0.7)

Wenn Sie nun Ihre Beschriftungen nach unten, links, oben oder rechts verschieben möchten, können Sie das Argument pos= mit den entsprechenden Werten 1, 2, 3 oder 4 hinzufügen.

 text(abs_losses, percent_losses, labels=namebank, cex= 0.7, pos=3)

enter image description here

Sie können natürlich pos einen Wertvektor geben, wenn Sie einige der Labels in andere Richtungen haben möchten (z. B. für Goldman_Sachs, UBS und Société_Generale, da sich diese mit anderen Labels überschneiden):

 pos_vector <- rep(3, length(namebank))
 pos_vector[namebank %in% c("Goldman_Sachs", "Societé_Generale", "UBS")] <- 4
 text(abs_losses, percent_losses, labels=namebank, cex= 0.7, pos=pos_vector)

enter image description here

74
plannapus

Ich habe das directlabels-Paket zum Platzieren von Textetiketten ausprobiert. Im Falle von Streudiagrammen ist es nicht immer noch perfekt, aber viel besser als das manuelle Anpassen der Positionen, insbesondere in den Fällen, in denen Sie die Entwurfszeichnungen vorbereiten, und nicht die endgültigen. Daher müssen Sie die Diagramme immer wieder ändern.

1
Ali

Um nur einen Vektor zu zeichnen, sollten Sie den folgenden Befehl verwenden:

text(your.vector, labels=your.labels, cex= labels.size, pos=labels.position)
1
Mohammad

Sie sollten das label-Attribut in der Plot-Funktion verwenden. Der Wert dieses Attributs sollte der Vektor sein, der die Werte enthält, die Sie für jeden Punkt haben möchten.

0
Lucia Pasarin