无法修改ggplot图例标题及图例显示异常问题求助
问题与解决方案
问题说明
- 无法修改ggplot图表的图例标题,尝试
scale_color_discrete、labs(color=...)等方法均无效 - 在
geom_point的aes参数中设置size=2后,图例出现多余的尺寸标识
可复现代码
## 创建数据框 Predictor <- c("No", "Yes", "No", "Yes") TimePoint <- c("Pre", "Pre", "Post", "Post") value <- c(33, 32, 31, 40) SE <- c(1.5, 1.5, 1.5, 1.5) # 注:原代码中此处的estimate应为value,属于笔误,修正后才能正常运行 dataframe <- data.frame(Predictor, TimePoint, value, SE) ## 定义因子并重新排序TimePoint的水平 dataframe$TimePoint <- as.factor(dataframe$TimePoint) dataframe$Predictor <- as.factor(dataframe$Predictor) dataframe$TimePoint = factor(dataframe$TimePoint, levels = c("Pre", "Post"), ordered = TRUE) ## 创建图表 ggp <- ggplot(data=dataframe, aes(x=TimePoint, y=value, group=Predictor)) + geom_errorbar(aes(ymin=value-SE, ymax=value+SE), width=.1) + geom_line()+ geom_point(aes(shape=Predictor, size=2)) + coord_cartesian(ylim = c(0, 50)) + ## 指定y轴上下限 ylab("Value") + xlab(" Timing")+ scale_x_discrete(expand = c(0,0.25)) + scale_y_continuous(breaks = seq(0, 50, 5), limits = c(0, 50), expand = c(0, 0)) + theme_classic() + theme(axis.line = element_line(size = .6, colour = "black", linetype=1), axis.text = element_text( angle = 0, color="black", size=18, face=2), axis.title.x = element_text(color="black", size=18, face=2), axis.title.y = element_text(color="black", size=18, face=2, margin=margin(r=20))) print(ggp)
已尝试方法
ggp + scale_color_discrete(name = "New Legend Title") ggp + labs(color = "New Legend Title") ggp + scale_fill_discrete(name="New Legend Title") ggp + guides(col = guide_color(title = "New Legend Title")) ggp + labs(color = "New Legend Title")
解决方案
1. 移除多余的尺寸标识
aes()内部的参数是用来映射数据变量的,固定尺寸不需要放在映射里,把size=2移到geom_point()外部即可:
geom_point(aes(shape=Predictor), size=2)
2. 修改图例标题
当前图例是由shape映射生成的,之前的方法无效是因为错用了color/fill相关的设置,需要针对shape操作,两种可选方法:
方法一:用labs()直接指定
ggp + labs(shape = "新图例标题")
方法二:用scale_shape_discrete()设置
ggp + scale_shape_discrete(name = "新图例标题")
完整修正代码
## 创建数据框 Predictor <- c("No", "Yes", "No", "Yes") TimePoint <- c("Pre", "Pre", "Post", "Post") value <- c(33, 32, 31, 40) SE <- c(1.5, 1.5, 1.5, 1.5) dataframe <- data.frame(Predictor, TimePoint, value, SE) ## 定义因子并重新排序TimePoint的水平 dataframe$TimePoint <- as.factor(dataframe$TimePoint) dataframe$Predictor <- as.factor(dataframe$Predictor) dataframe$TimePoint = factor(dataframe$TimePoint, levels = c("Pre", "Post"), ordered = TRUE) ## 创建图表 ggp <- ggplot(data=dataframe, aes(x=TimePoint, y=value, group=Predictor)) + geom_errorbar(aes(ymin=value-SE, ymax=value+SE), width=.1) + geom_line()+ geom_point(aes(shape=Predictor), size=2) + # 修正size的位置 coord_cartesian(ylim = c(0, 50)) + ylab("Value") + xlab("Timing") + # 移除多余换行 scale_x_discrete(expand = c(0,0.25)) + scale_y_continuous(breaks = seq(0, 50, 5), limits = c(0, 50), expand = c(0, 0)) + theme_classic() + theme(axis.line = element_line(size = .6, colour = "black", linetype=1), axis.text = element_text( angle = 0, color="black", size=18, face=2), axis.title.x = element_text(color="black", size=18, face=2), axis.title.y = element_text(color="black", size=18, face=2, margin=margin(r=20))) + labs(shape = "分组") # 修改图例标题 print(ggp)
内容的提问来源于stack exchange,提问作者KG202
相关产品推荐
相关产品推荐

