过去两年我一直在使用r开关,而且最近才开始使用ggplot来构建图形。我陷入了下面描述的情况:
我有一个多层图,其中所有数据都在初始ggplot调用中引用的相同数据框中。
我想要做的是手动调整图例文本以反映每个图层的名称和颜色/ geom(layer4& 5可以是一个参考)。当我这样做时,geom_lines的图例都会变回红色。
另一个问题是我想重命名渐变比例,但是当我这样做时,渐变变成离散点而不是条形。
ggplot(D_ff_NWn,aes(NW_norm,FF_Det,color = CYC))+
geom_point()+
scale_color_gradient(guide = guide_legend(title = "Feeder Cycle"))+
geom_line(aes(NW_norm,FF10.fit,fill="black"), color="black", show.legend = TRUE) +
geom_line(aes(NW_norm,Diff1*SCL_rg+SCL_FF[1],fill="red"),
color="red", show.legend = TRUE)+
geom_line(aes(NW_norm,FF_UCL,fill="Prediction"),color="green")+
geom_line(aes(NW_norm,FF_LCL),color="green")+
labs(x = "Normalized Net Weight (%)")+
scale_y_continuous("Feed Factor (g/rev)",
sec.axis = sec_axis(~ (. - SCL_FF[1])/SCL_rg,
name = "1st Derivative ([g/rev]/%)"))+
scale_fill_manual(name="",
labels = c("Avg FF (g/min)", "1st Derivative","95% Prediction"),
values = c("black","red","green"))+
theme(axis.text.y.right = element_text(color = "red"),
axis.title.y.right = element_text(color = "red"))
总而言之,我希望有:
注意:使用SCL_FF
和SCL_rg
我确信无法添加足够的数据来生成上面显示的图像,但数据框结构如下所示。
'data.frame': 16141 obs. of 19 variables:
$ key : Factor w/ 6 levels "ATAB","CCNa",..: 1 1 1 1 1 1 1 1
1 1 ...
$ Process_Time : num 5.65 5.67 5.68 5.7 5.72 ...
$ CONC_PCT : num 32 32 31.8 31.7 31.6 ...
$ STATE : Factor w/ 4 levels "Blind","Gravimetric",..: 2 2 2 2
2 2 2 2 2 2 ...
$ NW : num 1.16 1.15 1.15 1.15 1.15 ...
$ SRW_SP : num 56.7 56.4 56.3 56.2 56 ...
$ FF : num 2.36 2.37 2.37 2.37 2.37 ...
$ MF : num 8 7.98 7.95 7.93 7.9 ...
$ CYC : int 1 1 1 1 1 1 1 1 1 1 ...
$ Max_Mass : num 1.72 1.72 1.72 1.72 1.72 ...
$ NW_norm : num 0.673 0.672 0.671 0.67 0.668 ...
$ FF_Det : num 2.33 2.33 2.33 2.34 2.34 ...
$ FF10.fit : num 2.34 2.34 2.34 2.34 2.34 ...
$ FF10.se.fit : num 0.000121 0.000121 0.000121 0.000121 0.000121
...
$ FF10.residual.scale: num 0.00458 0.00458 0.00458 0.00458 0.00458 ...
$ FF10.df : num 16128 16128 16128 16128 16128 ...
$ Diff1 : num 0.0363 0.0363 0.0361 0.0344 0.0323 ...
$ FF_UCL : num 2.35 2.35 2.35 2.35 2.35 ...
$ FF_LCL : num 2.34 2.34 2.34 2.34 2.34 ...
有什么我公然缺席的吗?我认为我对ggplot图层的工作原理有了一个很好的理解。
感谢任何帮助或指导。
更新07May2018
Z.Lin下面描述的解决方案奏效了。我颠倒了渐变条标签,并将“一阶导数”图层更改为指向隐藏“标准化净重”高端的不需要的栅格。
ggplot(D_ff_NWn, aes(x = NW_norm))+
geom_point(aes(y = FF_Det, fill = CYC), shape = 21,stroke = 0.1) +
geom_point(aes(y = Diff1 * SCL_rg + SCL_FF[1], colour = "1st
Derivative"),size=0.5) +
geom_line(aes(y = FF10.fit, colour = "Avg FF (g/min)")) +
geom_line(aes(y = FF_UCL, colour = "95% Prediction")) +
geom_line(aes(y = FF_LCL, colour = "95% Prediction")) +
labs(x = "Normalized Net Weight (%)")+
scale_y_continuous(name = "Feed Factor (g/rev)",
sec.axis = sec_axis(~ (. - SCL_FF[1])/SCL_rg,
name = "1st Derivative ([g/rev]/%)")) +
scale_fill_gradient(name = "Feeder Cycle",guide = guide_colourbar(reverse =
TRUE))+
scale_colour_manual(name = "",
values = c("Avg FF (g/min)" = "black",
"1st Derivative" = "red",
"95% Prediction" = "green"))+
theme(axis.text.y.right = element_text(color = "red"),
axis.title.y.right = element_text(color = "red"))
答案 0 :(得分:0)
如果没有实际数据进行测试,这是我对可以为您工作的最佳猜测:
ggplot(D_ff_NWn,
aes(x = NW_norm))+
geom_point(aes(y = FF_Det, fill = CYC), shape = 21, colour = alpha("black", 0)) +
geom_line(aes(y = FF10.fit, colour = "Avg FF (g/min)")) +
geom_line(aes(y = Diff1 * SCL_rg + SCL_FF[1], colour = "1st Derivative")) +
geom_line(aes(y = FF_UCL, colour = "95% Prediction")) +
geom_line(aes(y = FF_LCL, colour = "95% Prediction")) +
labs(x = "Normalized Net Weight (%)")+
scale_y_continuous(name = "Feed Factor (g/rev)",
sec.axis = sec_axis(~ (. - SCL_FF[1])/SCL_rg,
name = "1st Derivative ([g/rev]/%)")) +
scale_fill_gradient(name = "Feeder Cycle")+
scale_colour_manual(name = "",
values = c("Avg FF (g/min)" = "black",
"1st Derivative" = "red",
"95% Prediction" = "green")) +
theme(axis.text.y.right = element_text(color = "red"),
axis.title.y.right = element_text(color = "red"))
如果这样可行,我在您的代码中观察到的几个问题的解释如下:
问题1 - 您想为geom_point()
&指定不同的颜色图例。 geom_line()
图层
如果您选中?geom_line
,则可以看到colour
列在其理解的美学中,但fill
不是。fill = red
。这意味着geom_line(aes(...))
中的geom_point
(或其他颜色)行将被忽略。
另一方面,colour
同时理解fill
和colour
。默认的点形状基于fill
美学而着色,但还有其他形状根据colour
美学着色,其轮廓基于fill
美学。
(图片来自here。形状21-25接受colour
的颜色,& geom_point
的轮廓。)
要解决问题1,请选择21-25中的形状,使用aes(fill = CYC)
设置aes(colour = something)
的颜色,然后将[{1}}保留为各自的geom_line
图层。< / p>
问题2 - 手动声明的图例标签的顺序可能不正确
我知道您使用aes(fill = "some value")
和scale_fill_manual()
这样的内容可以手动指定审美映射,但代码中值的顺序为:
aes(fill = "black")
(第2层)aes(fill = "red")
(第3层)aes(fill = "Prediction")
(第4层)而手动秤中的订单是:
scale_fill_manual(name="",
labels = c("Avg FF (g/min)", "1st Derivative","95% Prediction"),
values = c("black","red","green"))
暂时忽略colour
与fill
问题,我们可以看到此处列出的值的字母顺序为c("black", "Prediction", "red")
。 scale_fill_manual()
无法知道Prediction
应该映射到green
;它只是按字母顺序排列值,&amp;将它们按顺序匹配到此处列出的标签/值。
要解决问题2,请在values
中为scale_XXX_manual
参数使用命名向量。
(我还建议将标签用作各种geom_line(aes(fill = "some value"))
图层中的值,并将labels = c(...)
中的scale_XXX_manual
全部删除。我认为这样更整洁。)
问题3 - 您明确要求离散点中的颜色图例,而不是颜色条
ggplot2
,guide_legend
和guide_colourbar
中有两个不同的与图例相关的功能。前者创造了一个离散的尺度,而后者则是一个连续的尺度。默认情况下,scale_XXX_gradient
实际上使用了colourbar选项,但行scale_color_gradient(guide = guide_legend(title = "Feeder Cycle"))
覆盖了该行。
要解决问题3,您可以:
guide_legend(title = "some title")
替换为guide_colourbar(title = "some title")
或; scale_XXX_gradient(name = "some title")
指定图例名称。(次要)第4期 - 顶级美学映射
在您的代码中,每个geom
图层的美学映射都以NW_norm
的{{1}}开头,后跟x
的不同变量。
由于y
对所有图层都是通用的,因此应在顶级x = NW_norm
调用中声明,并且仅。除非有一个本地ggplot()
映射来覆盖它,否则所有后续层都将继承该层。
由于每个图层的aes(x = some.other.variable)
不同,因此不需要它在顶层调用中。每个y = something
图层都应具有自己的geom
美学映射,将明确命名为y
,而不是aes(y = something, ...)