R ggplot自定义图例而不是默认图例
我已经搜索并尝试了一系列建议,以便能够在分组散点图中显示自定义图例,而不是默认图例。我试过,也跟着其他人 例如,假设我有一个像这样的R ggplot自定义图例而不是默认图例,r,ggplot2,customization,legend,R,Ggplot2,Customization,Legend,我已经搜索并尝试了一系列建议,以便能够在分组散点图中显示自定义图例,而不是默认图例。我试过,也跟着其他人 例如,假设我有一个像这样的df: df = data.frame(id = c("A", "A", "B", "C", "C", "C"), value = c(1,2,1,2,3,4), ref = c(
df
:
df = data.frame(id = c("A", "A", "B", "C", "C", "C"),
value = c(1,2,1,2,3,4),
ref = c(1.5, 1.5, 1, 2,2,2),
min = c(0.5, 0.5, 1,2,2,2))
我想将每个id
的值
s显示为圆点,但也将每个id
的ref
差值和min
imum值显示为不同形状的点,如下所示:
p = ggplot(data = df) +
geom_point(aes(x = id, y = value, color = factor(id)), shape = 19, size = 6) +
geom_point(aes(x = id, y = ref, color = factor(id)), shape = 0, size = 8) +
geom_point(aes(x = id, y = min, color = factor(id)), shape = 2, size = 8) +
xlab("") +
ylab("Value")
#print(p)
现在一切都好了,但我的传说并没有给情节的解释增加任何东西,因为X轴和颜色足以理解它。我知道我可以通过主题(legend.position=“none”)
删除图例。
相反,我希望有一个图例,说明每个点的实际形状所代表的内容(例如,填充圆点=值
,三角形=最小值
,正方形=参考值
)
在尝试通过scale\u fill\u manual
和类似的方式手动设置刻度值时
override.shape = shapes$shape
override.linetype = shapes$pch
guides(colour = guide_legend(override.aes = list(shape = override.shape, linetype = override.linetype)))...
....
我也尝试过制作二次绘图,但没有显示,使用上面粘贴的一个链接中建议的内容:
shapes = data.frame(shape = c("value", "reference", "minimum"), pch = c(19,0,2), col = c("gray", "gray", "gray"))
p2 = ggplot(shapes, aes(shape, pch)) + geom_point()
#print(p2)
g_legend <- function(a.gplot){
tmp <- ggplot_gtable(ggplot_build(a.gplot))
leg <- which(sapply(tmp$grobs, function(x) x$name) == "guide-box")
legend <- tmp$grobs[[leg]]
return(legend)
}
legend <- g_legend(p2)
library(gridExtra)
pp <- arrangeGrob(p1 ,legend,
widths=c(5/4, 1/4),
ncol = 2)
shapes=data.frame(shape=c(“值”、“参考”、“最小值”)、pch=c(19,0,2)、col=c(“灰色”、“灰色”、“灰色”))
p2=ggplot(形状,aes(形状,pch))+geom_点()
#打印(p2)
g_legend您可以使用scale_shape_manual
手动创建形状图例:
库(ggplot2)
ggplot(数据=df)+
几何点(aes(x=id,y=值,颜色=因子(id),形状=值),尺寸=6)+
几何点(aes(x=id,y=ref,颜色=id,形状=ref',尺寸=8)+
几何点(aes(x=id,y=最小值,颜色=系数(id),形状=最小值),尺寸=8)+
比例形状手册(值=c('value'=19,'ref'=0,'min'=2))+
xlab(“”)+
ylab(“价值”)
由(v0.3.0)于2020年4月15日创建
但更好的方法是将df
重塑为长格式,并将每个aes
映射到一个变量:
库(dplyr)
图书馆(tidyr)
df%>%
枢轴长度(-id)%>%
ggplot()+
几何点(aes(x=id,y=值,颜色=因子(id),形状=名称,大小=名称))+
比例形状手册(值=c('value'=19,'ref'=0,'min'=2))+
刻度尺寸手动(值=c('value'=6,'ref'=8,'min'=8))+
xlab(“”)+
ylab(“价值”)
由(v0.3.0)于2020年4月15日创建
要删除颜色的图例,请使用指南\u none()
:
library(tidyr)
图书馆(GG2)
df%>%
枢轴长度(-id)%>%
ggplot()+
几何点(aes(x=id,y=值,颜色=因子(id),形状=名称,大小=名称))+
比例形状手册(值=c('value'=19,'ref'=0,'min'=2))+
刻度尺寸手动(值=c('value'=6,'ref'=8,'min'=8))+
辅助线(颜色=辅助线\无()+
xlab(“”)+
ylab(“价值”)
由(v0.3.0)于2020年4月16日创建
数据:
df=data.frame(id=c(“A”、“A”、“B”、“c”、“c”、“c”),
值=c(1,2,1,2,3,4),
ref=c(1.5,1.5,1,2,2),
最小值=c(0.5,0.5,1,2,2))
您可以使用缩放\u形状\u手册
手动创建形状图例:
库(ggplot2)
ggplot(数据=df)+
几何点(aes(x=id,y=值,颜色=因子(id),形状=值),尺寸=6)+
几何点(aes(x=id,y=ref,颜色=id,形状=ref',尺寸=8)+
几何点(aes(x=id,y=最小值,颜色=系数(id),形状=最小值),尺寸=8)+
比例形状手册(值=c('value'=19,'ref'=0,'min'=2))+
xlab(“”)+
ylab(“价值”)
由(v0.3.0)于2020年4月15日创建
但更好的方法是将df
重塑为长格式,并将每个aes
映射到一个变量:
库(dplyr)
图书馆(tidyr)
df%>%
枢轴长度(-id)%>%
ggplot()+
几何点(aes(x=id,y=值,颜色=因子(id),形状=名称,大小=名称))+
比例形状手册(值=c('value'=19,'ref'=0,'min'=2))+
刻度尺寸手动(值=c('value'=6,'ref'=8,'min'=8))+
xlab(“”)+
ylab(“价值”)
由(v0.3.0)于2020年4月15日创建
要删除颜色的图例,请使用指南\u none()
:
library(tidyr)
图书馆(GG2)
df%>%
枢轴长度(-id)%>%
ggplot()+
几何点(aes(x=id,y=值,颜色=因子(id),形状=名称,大小=名称))+
比例形状手册(值=c('value'=19,'ref'=0,'min'=2))+
刻度尺寸手动(值=c('value'=6,'ref'=8,'min'=8))+
辅助线(颜色=辅助线\无()+
xlab(“”)+
ylab(“价值”)
由(v0.3.0)于2020年4月16日创建
数据:
df=data.frame(id=c(“A”、“A”、“B”、“c”、“c”、“c”),
值=c(1,2,1,2,3,4),
ref=c(1.5,1.5,1,2,2),
最小值=c(0.5,0.5,1,2,2))
您可以先使用tidyr整理数据,然后将aes形状映射到新变量
library(tidyr)
df2您可以先使用tidyr整理数据,然后将aes形状映射到新变量
library(tidyr)
df2只需将形状和大小与颜色一起添加到您所映射的美学中。还是我遗漏了更复杂的东西?谢谢你的评论。添加形状geom_点(aes(x=id,y=value,color=factor(id),shape=19),size=6)
(大小在此上下文中不重要)会导致此错误:错误:连续变量无法映射到形状。如果有区别的话,形状不是数据帧的一部分,但也许我应该把它添加到那里!?您需要将它映射到某个变量,比如区分第一个geom_点调用和第二个调用的任何变量。但这指出了一个更大的问题,即ggplot是通用的
> legend <- g_legend(p2)
Error in tmp$grobs[[leg]] :
attempt to select less than one element in get1index