英文:
ggplot2 - how to add a break between dotted lines in legend?
问题
以下是要翻译的内容:
这段代码生成了两个直方图。我想知道是否有简单的方法来在图例中为这两个直方图的虚线创建一个间隔,就像附带的图像中的图例一样 - 我希望虚线不要相互交错?
我尝试在主题部分添加了 legend.spacing.y
,但这只是将整个图例向下移动。我想创建一个明显的间隔,使这两条虚线不会相互接触。
英文:
The following code produces two histograms. I'm wondering whether there's any simple way to create a break in the dotted lines in the legend for these histograms. See the legend in the attached image - I want the dotted lines not to run into each other?
#make low cost histogram
PLOT1 <- LCset1 %>%
ggplot(aes(x=donation, fill=lowmonetaryamount))+
coord_cartesian(xlim = c(1, NA)) +
geom_histogram(binwidth=1,aes(y = (..count..)/sum(..count..)),col=I("black"))+
scale_color_grey()+scale_fill_grey(start = .85,
end = .85,) +
theme_linedraw()+
guides(fill = "none", cols='none')+
geom_vline(aes(xintercept=10, size='\nLow cost\n'),
color="black", linetype=5)+
geom_vline(aes(xintercept=50, size='\nHigh cost\n'),
color="black", linetype="dotted")+
scale_size_manual(values = c(.5, 0.5), breaks = c('\nLow cost\n','\nHigh cost\n'), guide=guide_legend(title = "", override.aes = list(linetype=c(5,3), color=c('black', 'black'))))+
scale_y_continuous(labels=scales::percent, limits = c(0, .015))+
scale_x_continuous(breaks = c(seq(0,50,10), 55), labels = c("","$10","$20","$30","$40","$50"," >$50"), limits = c(0, 60))+
ggtitle("\n% donating each non-zero amount when low cost is $10")+
theme(plot.title = element_text(hjust = 0.5))+
xlab(NULL)+
ylab(NULL)+
theme(plot.title = element_text(size=13))+
theme(
# other theme parameters
legend.key.size = unit(2, "lines"),
legend.key.width = unit(1, "lines"),
legend.text = element_text(size=12),
axis.text = element_text(size=12),
legend.key.height = unit(0.5, "lines")
)
#make high cost histogram
PLOT2 <- HCset1 %>%
ggplot(aes(x=donation, fill=lowmonetaryamount))+
coord_cartesian(xlim = c(1, NA)) +
geom_histogram(binwidth=1,aes(y = (..count..)/sum(..count..)),col=I("black"))+
scale_color_grey()+scale_fill_grey(start = .85,
end = .85,) +
theme_linedraw()+
guides(fill = "none", cols='none')+
geom_vline(aes(xintercept=10, size='\nLow cost\n'),
color="black", linetype=5)+
geom_vline(aes(xintercept=50, size='\nHigh cost\n'),
color="black", linetype="dotted")+
scale_size_manual(values = c(.5, 0.5), breaks = c('\nLow cost\n','\nHigh cost\n'), guide=guide_legend(title = "", override.aes = list(linetype=c(5,3), color=c('black', 'black'))))+
scale_y_continuous(labels=scales::percent, limits = c(0, .015))+
scale_x_continuous(breaks = c(seq(0,50,10), 55), labels = c("","$10","$20","$30","$40","$50"," >$50"), limits = c(0, 60))+
ggtitle("% donating each non-zero amount when high cost is $50")+
theme(plot.title = element_text(hjust = 0.5))+
xlab(NULL)+
ylab(NULL)+
theme(plot.title = element_text(size=13))+
theme(
# other theme parameters
legend.key.size = unit(2, "lines"),
legend.key.width = unit(1, "lines"),
legend.text = element_text(size=12),
axis.text = element_text(size=12),
legend.key.height = unit(0.5, "lines")
)
#combine two histograms
plot<- ggarrange(PLOT1, PLOT2,ncol=1,label.x=1,common.legend = TRUE, legend="right")
plots <- grid.arrange(plot,top=textGrob("Histograms for the 40.1% of the total sample whose last donation was between $10.00 and $49.99",gp=gpar(fontsize=14,fontface="bold")))
ggsave("plots_1.png", plots, width = 10, height = 8)
I tried adding legend.spacing.y to the theme section, but this only moves the entire legend down. I'd like to create a distinct break so that the two dotted lines don't touch each other.
答案1
得分: 2
使legend.spacing.y起作用的关键是在guide_legend上使用byrow=TRUE参数。
library(ggplot2)
ggplot(mtcars, aes(y = factor(cyl), fill = factor(cyl))) +
geom_bar() +
theme(legend.spacing.y = unit(2.0, 'cm')) +
guides(fill = guide_legend(byrow = TRUE))
英文:
The trick to making legend.spacing.y work is the byrow=TRUE param on guide_legend
library(ggplot2)
ggplot(mtcars, aes(y = factor(cyl), fill = factor(cyl))) +
geom_bar() +
theme(legend.spacing.y = unit(2.0, 'cm')) +
guides(fill = guide_legend(byrow = TRUE))
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论