Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Change line type of border

Tags:

r

I would like to change the line type of the panel border from solid line to dashed line in my graph. I tried to use panel.border and panel_border in theme, but R keep telling me it cannot find these two functions in theme.

like image 414
jli323 Avatar asked Oct 26 '18 17:10

jli323


People also ask

How do you change a border line style?

Add a border, border color, or border line style Click Home > the Borders arrow, and then pick the border option you want. Add a border line style - Click the Borders arrow > Border Style, and then pick a line style option.

How do you change the border line color?

On the Border tab, under Line Color, click the color that you want to apply, and then under Border, click the specific pieces of the cell border to apply the color to. Click OK. Tip: To apply your new cell style, select the cells that you want to change, and then on the Home tab, click Cell Styles, and click the style.


1 Answers

I think this will be very difficult to do with theme options. Even when the panel spacing is 0, I'm pretty sure it's using element_rect to draw the panel borders. Getting the plot you want with theme modifications would require modifying 1 or 2 lines of each panel border with awareness of whether the facet is a left, right, or central facet.

To get around this we can use hline and vline instead. Hacky, but it works:

hline_df = expand.grid(visit = unique(df$visit), yint = c(-Inf, Inf))
vline_df = expand.grid(visit = unique(df$visit), xint = c(-Inf, Inf)) %>%
  mutate(no_dash = !(
    (xint == Inf & visit == tail(levels(visit), 1))  |
    (xint == -Inf & visit == head(levels(visit), 1))
  ))


ggplot(df, aes(x=avisit, y=mean, group=Type, color=Type, shape=Type)) + 
       scale_y_continuous(breaks=seq(0,18,2), limits=c(0, 18)) +
       geom_point(position=pd, cex=2) +
       xlab("") +
       ylab("Mean")  +
       scale_colour_manual(values=c("blue", "red")) +
       scale_shape_manual(values=c("triangle", "circle")) + 
       coord_cartesian(ylim = c(0, 18)) +
       facet_grid(.~factor(visit), scales = "free_x", space ="free_x",switch = "both") +
       geom_hline(data = hline_df, aes(yintercept = yint)) +
       geom_vline(data = vline_df, aes(xintercept = xint, linetype = no_dash), show.legend = FALSE) +
       theme_bw()  +
       theme(axis.text.y = element_text(margin = margin(r = 0)),  
             panel.spacing = unit(0, "mm"),                        
             strip.background = element_blank(),
             legend.title=element_blank(),
             strip.placement = "outside",
             legend.background = element_rect(color="black", fill="white", size=0.5, linetype="solid"), 
             legend.direction = "horizontal",
             panel.grid.minor = element_line(colour="white", linetype="dashed"),
             panel.grid.major = element_line(colour = "white",linetype="dashed"),
             panel.border = element_blank())

enter image description here

like image 167
Gregor Thomas Avatar answered Oct 13 '22 22:10

Gregor Thomas