使用ggplot将形状分配给n行的n-1个点

时间:2018-05-04 14:38:27

标签: r ggplot2

我想在一个图形中绘制3条线,对于其中两条线,使用形状来标记确定线条的点。在不失去对形状的控制的情况下,我无法做到这一点。有没有办法不使用形状标记一行的点而不失去设置其他线的点的形状的控制?

考虑以下示例:

years = 2001:2005
A = c(2, 3, 2.5, 2, 2.2)
B = c(2, 2.3, 2.8, 2, 3.2)
C = rep(2.1, 5)
DT = data.table(years, A, B, C)
mDT = melt(DT, id.vars = 'years', value.name = "Value", variable.name = "Parameter")

我想通过折线图和点直观地表示这些数据。对于参数A和B,我希望点具有形状。对于C我不希望它们有形状。我ggplot尝试了:

ggplot(mDT, aes(x = years, y = Value)) +
  geom_line(aes(linetype = Parameter, colour = Parameter)) +
  scale_linetype_manual(values = c("solid", "twodash", "dotted")) +
  geom_point(aes(shape = Parameter)) +
  scale_shape_manual(values = c("A" = 4, "B" = 6, "C" = ""))

但是A和B的形状分别是4s和6s。这也行不通,因为我没有足够的值

  scale_shape_manual(values = c(4, 6))

1 个答案:

答案 0 :(得分:1)

使用时

scale_shape_manual(values = c("A" = 4, "B" = 6, "C" = NA))

它将向量中的所有值强制转换为字符,因为向量只能保存相同数据类型的值。而是使用

NA

如果void不会改变事实,则所有其他值都是数字。