How to fill a single 'pch' point on the plot with two-colours?
Asked Answered
C

2

7

If you take the code below, how can you change the filling of the third diamond, so it will be half-black, half-white? The solution should apply with any colors.

data <- c(1,2,3)
plot(data, pch=c(23,18,23), cex=c(2.5,3,2.5))
Chloroplast answered 19/11, 2011 at 18:35 Comment(1)
Interesting question, newer thought about that...Abecedarium
O
11

The pch characters are actual font symbols, so you will be limited to what is available in your fonts. Another alternative is to use the primitive plotting commands to make your own "symbols". This is very flexible, although there can be issues with resizing, etc., when mixing the two methods. This method is implemented in the nice my.symbols() example:

require(TeachingDemos)

bwDiamond <- function() {
    plot.new()
    polygon(c(0, 0.5, 1, 0.5, 0), c(0.5, 0, 0.5, 1, 0.5), lty=1)
    polygon(c(0.25, 0.5, 1, 0.75, 0.25), c(0.25, 0, 0.5, 0.75, 0.25), col=1)
}

data <- c(1,2,3)

dev.new(width=4, height=4)
plot(data, type='n')
points(data[1:2], pch=c(23,18), cex=c(2.5,3))
my.symbols(data[3], data[3], symb=bwDiamond, symb.plots=TRUE, inches=0.22)

enter image description here

See also this Q/A: Point symbols in R

Osteoclast answered 19/11, 2011 at 19:11 Comment(2)
Perfect, thank you @John . However, I can see how it works very well with polygons, but how would you deal with half-color filled circle points?Chloroplast
@GeekOnAcid Heh...good point. I guess you could fake it as a polygon, but it'd be nice if there was a way to do it with only 3 anchors. I don't know of one though.Osteoclast
C
1

@JohnColby : Ok, here is a way to draw a half-coloured circle point, using grid.semicircle from lodplot package. It's not such tidy solution as yours with polygons, but it does the job:

 require(lodplot)
 dev.new(width=4,height=4)
 plot(1:3,type="n")
 grid.semicircle(100,150,10,5)#left circle on plot below
 grid.semicircle(100,150,10,5,side=3,col=1)
 grid.semicircle(200,150,10,5,side=2)#right circle on plot below
 grid.semicircle(200,150,10,5,side=4,col=1)

Half-circles plot example

Chloroplast answered 21/11, 2011 at 13:16 Comment(1)
Nice find! That semicircle function will come in handy.Osteoclast

© 2022 - 2024 — McMap. All rights reserved.