Based on the data and code below how can I remove geom_points from Average Precipitation and Average Mean Temperature showing in the legend and the dashed line from the Precipitation symbol, and add white space between these legend symbols? And for some reason these legend items symbols show the dashed line as a dashed +.
Data (df):
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
))
Code:
ggplot(df, aes(x = AvgTMean, y = AvgPpt)) +
geom_point(aes(color = "Precipitation"), size = 2, shape = 1) +
geom_smooth(method = lm, aes(linetype = "LM"), se = T, color = "red") +
xlab("Mean Temperature (\u00B0F)") +
ylab("Average Precipitation (in)") +
ggtitle("Precipation - Mean Temperature Correlation Scatterplot") +
scale_linetype_manual(values = 2, name = NULL) +
scale_colour_manual(values = c("Average Precipitation" = "blue",
"Average Mean Temperature" = "orange",
"Precipitation" = "black"), name = "Legend") +
coord_cartesian(clip = "off") +
guides(color = guide_legend(override.aes = list(alpha = 0.5), order = 1)) +
geom_hline(aes(yintercept = mean(AvgPpt), color = "Average Precipitation"),linetype = "dashed") +
geom_vline(aes(xintercept = mean(AvgTMean), color = "Average Mean Temperature"),linetype = "dashed") +
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))
Output:
>Solution :
The easiest way to do this is:
- Map "precipitation" to the
shapeaesthetic to give it a different entry in the legend - Add a
scale_shape_manualto give the correct shape - Change the
key_glyphforgeom_vlinetodraw_key_pathto remove the vertical component of the key glyph
ggplot(df, aes(x = AvgTMean, y = AvgPpt)) +
geom_point(aes(shape = "Precipitation"), size = 2) +
geom_smooth(method = lm, aes(linetype = "LM"), se = T, color = "red") +
xlab("Mean Temperature (\u00B0F)") +
ylab("Average Precipitation (in)") +
ggtitle("Precipation - Mean Temperature Correlation Scatterplot") +
scale_linetype_manual(values = 2, name = NULL) +
scale_colour_manual(values = c("Average Precipitation" = "blue",
"Average Mean Temperature" = "orange"),
name = "Legend") +
coord_cartesian(clip = "off") +
guides(color = guide_legend(override.aes = list(alpha = 0.5), order = 1)) +
geom_hline(aes(yintercept = mean(AvgPpt),
color = "Average Precipitation"),
linetype = "dashed") +
geom_vline(aes(xintercept = mean(AvgTMean),
color = "Average Mean Temperature"),
linetype = "dashed", key_glyph = draw_key_path) +
scale_shape_manual(values = 1, name = NULL) +
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))

