ggplot图例调整:移除指定符号、修正样式并增加图例间距
解决方案
数据
structure(list(year = 1980:2021, AvgTMean = c(46.6861236310086, 45.9935321876897, 48.1700038729655, 46.4810115090517, 46.4829304907586, 46.7485468749052, 47.6219529266638, 47.2361218780086, 47.2499555211466, 47.5220451962069, 48.5570011928017, 48.3781107312672, 46.8573046128362, 47.176300310069, 48.4485899941034, 47.4609176108276, 46.6484865289397, 48.1642107206379, 48.1402675745948, 46.9259296469741, 47.0971184616466, 46.9726183841638, 47.6723684868621, 47.5039107233534, 47.1155762179138, 46.7073537729569, 47.0220951396465, 47.7124003840862, 47.3834037927155, 47.1793288212414, 45.2688071177586, 47.9963270432845, 47.1814417165345, 47.868863306069, 47.5397788474655, 49.6073711623448, 48.3243434869914, 48.3742754506034, 48.1300366010172, 48.8198359721638, 48.8188162341724, 48.1362190050517), year.1 = 1980:2021, AvgPpt = c(7.98047681617574, 4.49794226223406, 4.9684832619452, 5.55716999365373, 4.57494083048695, 5.14877823483309, 4.97444435545455, 4.22068948662692, 3.60726044275288, 2.84911801980053, 4.21517699598155, 5.46851140458677, 4.52277085448576, 4.64293974933608, 6.15600410764903, 5.875274014911, 4.87718798058995, 5.8443990209339, 5.32429453784799, 5.74763654079229, 4.17193446127319, 4.76059529730215, 4.16013977314758, 4.69800474088282, 3.72061294666274, 5.29432854004791, 3.93882676214587, 4.43336743516705, 4.64442420697922, 5.77322014781625, 5.20579882483319, 4.61210504742011, 5.74595928751707, 4.42505010181327, 4.9249395747262, 4.47639288282123, 4.93601457652385, 6.44108245535473, 5.15154468243163, 6.11707801937097, 8.82894831877217, 5.03274669845953)), class = "data.frame", row.names = c(NA, -42L ))
修改后的代码
ggplot(df, aes(x = AvgTMean, y = AvgPpt)) + geom_point(aes(color = "Precipitation"), size = 2, shape = 1) + geom_smooth(method = lm, aes(linetype = "LM"), se = TRUE, color = "red") + geom_hline(aes(yintercept = mean(AvgPpt), color = "Average Precipitation"), linetype = "dashed") + geom_vline(aes(xintercept = mean(AvgTMean), color = "Average Mean Temperature"), linetype = "dashed") + xlab("平均温度 (°F)") + ylab("平均降水量 (英寸)") + ggtitle("降水量与平均温度相关性散点图") + scale_colour_manual( values = c( "Average Precipitation" = "blue", "Average Mean Temperature" = "orange", "Precipitation" = "black" ), name = "图例" ) + scale_linetype_manual(values = 2, name = NULL) + # 精准控制图例元素显示 guides( color = guide_legend( override.aes = list( shape = c(NA, NA, 1), # 隐藏均值线对应的散点符号 linetype = c(2, 2, 0), # 隐藏散点对应的虚线 alpha = 0.5 ), order = 1, # 调整图例项尺寸,增加间距 keyheight = unit(1.2, "lines"), keywidth = unit(1.5, "lines") ), linetype = guide_legend(order = 2) ) + coord_cartesian(clip = "off") + theme( axis.text = element_text(size = 12), legend.text = element_text(size = 12), legend.title = element_text(size = 14), axis.title = element_text(size = 14), # 增加图例内部空白 legend.key = element_rect(size = 0.5) )
修改说明
- 移除均值线图例的散点符号:在
guide_legend的override.aes参数中,给"Average Precipitation"和"Average Mean Temperature"对应的位置设置shape = NA,直接隐藏多余的散点符号。 - 移除散点图例的虚线:给"Precipitation"对应的位置设置
linetype = 0(无线条样式),消除原本错误显示的虚线。 - 添加图例符号间距:通过
keyheight和keywidth调整图例项的整体尺寸,配合legend.key设置,增加图例元素之间的空白。 - 修复虚线+散点的异常:通过
override.aes分别指定每个图例项的shape和linetype,让均值线图例只显示虚线,散点图例只显示空心圆,解决元素叠加的问题。
内容的提问来源于stack exchange,提问作者Ed_Gravy
相关产品推荐
相关产品推荐

