2009-09-19 37 views

Respuesta

25
b0 = 2.5; b1 = 2 
n = 100 
x = rnorm(n, 20, 15) 
y = b0 + b1*x + rnorm(n, 0, 15) 
plot(x, y) 
plot(x, y, type='n') 
text(x, y, round(y, 2), cex=0.45) 
text(x, y, round(y, 2), cex=0.8) 
text(x, y, paste(round(x, 2), round(y, 2), sep=", "), cex=0.8) # for (x, y), but this gets cluttered. 

alt text

Uso cex de tamaño de los caracteres (ver ayuda para el texto). Y use plot(x, y, type='n') para configurar su ventana correctamente sin realmente trazar nada.

+1

Puntos menores: Tiene un error tipográfico en la línea 5 (estrategia en lugar de trama); y estaría tentado de usar formato o formato C en lugar de redondos, ya que desea que una cadena no devuelva un número. Intente, por ejemplo, formatear (y, trim = TRUE, digits = 2) –

+0

Gracias Richie. Pensé en el formato, pero pensé que la función de round() sería más evidente para un principiante. Y pegar() se convertirá en cadenas. – Vince

5

Uso text():

plot(1:10, 1:10) 
text(5, 5, "Foo") 

y ver help(text) por opciones sobre la colocación del texto. La función se vectorizada para que pueda también hacer algo similar a

text(1:10, 1:10, LETTERS[1:10]) 

si tiene vectores de texto y posiciones.

1

similar a la respuesta de Vince, excepto usando ggplot2:

b0 = 2.5; b1 = 2 
n = 20 
x = rnorm(n, 20, 15) 
y = b0 + b1*x + rnorm(n, 0, 15) 
dat<-data.frame(x,y) 
library(ggplot2) 
ggplot(data=dat)+geom_text(aes(x=x,y=y),size=4,label=paste(round(x, 2), round(y, 2), sep=", ")) 

tamaño de la fuente se puede cambiar modificando el parámetro de tamaño.

+0

Debería mirar ggplot más. Parece estar creciendo en popularidad. He estado usando celosía para las cosas difíciles. – Vince

0
x <- 1/3 
plot(1,type="none",ann=FALSE) 
## text and values only 
text(mean(par("usr")[1:2]),mean(par("usr")[3:4])-par("cxy")[2]*2, 
    paste("z = ",round(x,2))) 
## text, values, and mathematical expressions 
text(mean(par("usr")[1:2]),mean(par("usr")[3:4]), 
    bquote(x^2==.(round(x,2)))) 
text(mean(par("usr")[1:2]),mean(par("usr")[3:4])-par("cxy")[2], 
    substitute(gamma==value,list(value=round(x,2)))) 
2

Con ggplot2 puede agregar los puntos y las etiquetas. Poner las aes() en ggplot() tiene la ventaja de que este aes() será el predeterminado para todos los geoms. Por lo tanto, en este caso sólo es necesario especificar los valores x e una vez, sino que se utilizan por tanto geom_point() y geom_text()

El código modificado de Ian Fellows se vería así:

b0 <- 2.5 
b1 <- 2 
n <- 20 
dat <- data.frame(x = rnorm(n, 20, 15)) 
dat$y <- b0 + b1*dat$x + rnorm(n, 0, 15) 
dat$text <- with(dat, paste(round(x, 2), round(y, 2), sep=", ")) 
library(ggplot2) 
ggplot(data=dat, aes(x = x, y = y, label = text)) + geom_point() + geom_text(size=4, hjust = 1, vjust = 1) 
0

Tal vez esto puede ayudar también

# example data 
dat <- data.frame(name = sample(letters[1:4],20, replace=T), x1 = rnorm(20,2), x2 = 42+x1*rnorm(20,0,2)) 
# plot the data 
plot(dat$x1,dat$x2) 
# use identify to print name for each 'dot' that you click with left mouse 
identify(dat$x1,dat$x2,labels=name) 
# When done identifying point, click with right mousebutton. 

me gusta esta funcionalidad para los propósitos interactivos. No sé cómo lograr esto en ggplot aunque

-1

me encontré con este método y es muy útil:

for i=1:6 
text(x(i),y(i),num2str(y(i))); 
end 

Repita esta línea para todos los miembros de la trama.

+3

Este no es un código R válido. – joran

Cuestiones relacionadas