Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R ggplot自定义图例而不是默认图例_R_Ggplot2_Customization_Legend - Fatal编程技术网

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