Изменить тип линии границы - PullRequest
0 голосов
/ 26 октября 2018

Я хотел бы изменить тип линии границы панели со сплошной линии на пунктирную линию на моем графике. Я пытался использовать panel.border и panel_border в теме, но R постоянно повторяет, что не может найти эти две функции в теме.

Ответы [ 2 ]

0 голосов
/ 17 июля 2019

element_rect принимает аргумент типа линии. Он может нарисовать линию оси в верхней части границы или наоборот, так что вы также можете изменить axis.line. Эта тема должна дать вам то, что вы хотите, и будет немного элегантнее ggplot() + theme(axis.line = element_line(linetype = 3), panel.border = element_rect(linetype =3)

0 голосов
/ 26 октября 2018

Я думаю, что это будет очень трудно сделать с theme опциями.Даже когда интервал между панелями равен 0, я уверен, что он использует element_rect для рисования границ панели.Чтобы получить нужный вам график с theme модификациями, потребуется изменить 1 или 2 линии каждой границы панели с учетом того, является ли фасет левым, правым или центральным фасетом.

Чтобы обойти это, мы можем использоватьhline и vline вместо.Хаки, но это работает:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...