2017-09-05 3 views
2

Ich brauche alle Zahlen in einer Annotation in ggplot, um 3 Ziffern nach dem Dezimaltrennzeichen anzuzeigen. aber ich bin mit diesem Problem konfrontiert:feste Dezimalstellen in ggplots Annotate anzeigen

require(ggplot2) 
data(iris) 
a <- 1.8 
b <- 0.9 

ggplot(iris, aes(Sepal.Length, Petal.Length))+ 
    geom_point()+ 
    annotate("text", 7, 3, 
      label = paste0("y == ", format(a, digits = 3, nsmall = 3), " %*%z^", 
          format(b, digits = 3, nsmall = 3)), parse = TRUE) 
ggplot(iris, aes(Sepal.Length, Petal.Length))+ 
geom_point()+ 
annotate("text", 7, 3, 
      label = sprintf("y == %0.3f %%*%%z^ %0.3f", a,b), parse = TRUE) 

beide produzieren Plots mit nur einer Dezimalstelle. Es ist klar, dass, wenn ich zu parse = FALSE ändere, dann kommt die Handlung mit der korrekten Anzahl von Dezimalzahlen, aber sein Format ist (ziemlich offensichtlich) weit von dem erwarteten.

Abgesehen von der Einführung des Textes, welche anderen Möglichkeiten gibt es, um dies zu erreichen?

+0

Dies scheint durch die 'plotmath' Regeln verursacht werden:' Grundstück (1, 1, main = parse (text = sprintf ("y ==% 0.3f %% * %% z ^% 0.3f ", a, b)))" entfernt auch die nachgestellten Ziffern. –

Antwort

5

Es funktioniert, wenn Sie den Zahlen Anführungszeichen hinzufügen.

ggplot(iris, aes(Sepal.Length, Petal.Length))+ 
    geom_point()+ 
    annotate("text", 7, 3, label = sprintf("y == '%0.3f' %%*%%z^ '%0.3f'", a,b), parse = TRUE) 

Hier habe ich geändert %0.3f zu '%0.3f' im String resultierende

[1] "y == '1.800' %*%z^ '0.900'" 

Aus diesem Grund sind die Zahlen nicht mehr als numercial Werte interpretiert. Während 1.800 die Nummer 1.8 darstellt, repräsentiert '1.800' die Zeichenfolge 1.800.

enter image description here