[R] Specifying data point locations on x-axis using boxplot() and points()

David Winsemius dwinsemius at comcast.net
Thu Aug 18 07:07:22 CEST 2011


On Aug 18, 2011, at 12:03 AM, Kota Hattori wrote:

> Hi all,
>
> I would like to ask a question with regard to R graphics. I am  
> currently
> trying to add data points in boxplots using points(). In my script,  
> I add
> up boxplots three times using add=TRUE. I use points() every time I  
> add
> boxplots, and I see data points. However, I see all data points are  
> clustered
> at three specific points on x-axis; the locations of the data points
> are not overlapping with intended boxplots. This is because I use
> "at" in boxplot(). Is there any way that I can specify the locations  
> of the
> data points on x-axis? It would be great if there is something like
> "at" in points(). Thank you for your help.
>

`boxplot` should return the values at which the midpoints of bars are  
being plotted. Take a look at str(<your-boxplot-call>). It's probably  
the $x component that you want to extract. `boxplot.stats` can also be  
used. You should either use plot=FALSE with boxplot or use  
boxplot.stats to gather the locations that can be used as x values  
(perhaps with jitter) in calls to points.

The scripts are not much use without data.)


> Cheers,
> Kota
>
> The following is my script.
>
>
> boxplot(F2.E$D.value ~ F2.E$consonant,
> 	main = "F2",
> 	ylim = c(-4,10),
> 	ylab = "Sensitivity (d')",
> 	xlab = "Discrimination Type",
> 	names = (c("E","E","E")),
> 	col = "light grey",
> 	border = "grey",
> 	boxwex = 0.2,
> 	at = 1:3 - 0.27
> 	)
>
> points(jitter(rep(1:3, each = 8),0.1),
> 		unlist(split(F2.E$D.value,F2.E$consonant)),		
> 		cex = 0.5,
> 		pch = 16)
>
>
> boxplot(F2.J.pre$D.value ~ F2.J.pre$consonant,
> 	add = TRUE,
> 	col = "light grey",
> 	border = "grey",
> 	names = (c("J Pre","J Pre","J pre")),
> 	boxwex = 0.2,
> 	at = 1:3 - 0)
>
> points(jitter(rep(1:3, each = 28), 0.1),
> 		unlist(split(F2.J.pre$D.value,F2.J.pre$consonant)),		
> 		cex = 0.5,
> 		col = "blue",
> 		pch = 16)
>
> boxplot(F2.J.post$D.value ~ F2.J.post$consonant,
> 	add = TRUE,
> 	col = "light grey",
> 	border = "grey",
> 	names = (c("J Post","J Post","J Post")),
> 	boxwex = 0.2,
> 	at = 1:3 + 0.27)
>
> points(jitter(rep(1:3, each = 28), 0.1),
> 		unlist(split(F2.J.post$D.value,F2.J.post$consonant)),		
> 		cex = 0.5,
> 		col = "green",
> 		pch = 16)
>



David Winsemius, MD
West Hartford, CT



More information about the R-help mailing list