Ditch ggplot
for base graphics. Although with only three groups I would have thought black, white and mid-grey would work okay.
require(sp)
require(rgdal)
bosnia = readOGR(".","bosnia_analysis")
proj4string(bosnia)=CRS("+init=epsg:4326")
Instead of splitting into 3 data sets, make a single new categorical variable from three TRUE/FALSES:
serbs = bosnia$SEPRIORITY > bosnia$CRPRIORITY & bosnia$SEPRIORITY > bosnia$MOPRIORITY
croats = bosnia$CRPRIORITY > bosnia$SEPRIORITY & bosnia$CRPRIORITY > bosnia$MOPRIORITY
moslems = bosnia$MOPRIORITY > bosnia$CRPRIORITY & bosnia$MOPRIORITY > bosnia$SEPRIORITY
bosnia$group=NA
bosnia$group[serbs]="Serb"
bosnia$group[croats]="Croat"
bosnia$group[moslems]="Moslem"
bosnia$group=factor(bosnia$group)
Check nobody is in more than one category:
sum(serbs&&croats&&moslems) # should be zero
Now you can get a pretty coloured plot thus:
spplot(bosnia, "group")
But I can't see how to do that in different mono styles, so its back to base graphics:
plot(bosnia,density=c(5,10,15)[bosnia$group], angle=c(0,45,90)[bosnia$group])
Adjust parameters to taste. You can use legend
to do a nice legend with the same parameters.