我想用普通的 R绘制两个具有不同颜色和点样式的函数以及相应的图例。
我有几个问题:
我正在使用
pch=21
和pch=22
。我的理解是它们是“充满”的符号。它们确实在图例中显示为填充,但在图表本身上显示为空心。怎么了?我可以在不手动指定网格的情况下在点之间获得更多空间吗?也许通过选择要打印的点数?
随意添加您想要的任何建议。我对 R 很陌生。特别是,有没有更好的方法来绘制两个函数?例如通过定义函数向量?并且没有一种方法可以自动生成图例而无需在普通 R 中指定颜色和形状?
这是我的代码:
par(new=TRUE)
p1 <- plot(function(x){ x^(2)/2 }
, 0, 100
, xlab = "x"
, ylab = "y"
, ylim = c(0,5000)
, las = 1
, type = "p"
, cex = 0.8
, pch = 21
, col = "red"
)
par(new=TRUE)
p2 <- plot(function(x){ (1-x^(2))/2 }
, 0, 100
, xlab = ""
, ylab = ""
, axes = FALSE
, type = "p"
, cex = 0.8
, pch = 22
, col = "blue"
)
par(new=TRUE)
l <- legend( "topleft"
, inset = c(0,0.4)
, cex = 1.5
, bty = "n"
, legend = c("A", "B")
, text.col = c("red", "blue")
, pt.bg = c("red","blue")
, pch = c(21,22)
)
经过各种探索,我选择了使用par(new=TRUE)
“技巧”来叠加这两个功能(而不是说,使用 matplot 或 plot 和 points 或 layout 的组合)。这是一个糟糕的举动吗?(编辑:是的,非常糟糕,见下文)+1 如果您不要求我阅读手册 ;-)
编辑:解决方案摘要
感谢 joran 和 Didzis Elferts,我找到了解决我的几个问题的方法。为了记录,我想在这里总结一下:
要在图表上获得填充符号,您需要同时指定 col(颜色)和 bg(背景)。即使对于
pch=21
和也是如此pch=22
,它不会自动被指定的颜色填充。要在图例中获得填充符号,您需要同时指定 col 和 pt.bg。在这里,仅 bg 是不够的。par(new=TRUE)
正如我最初所做的那样,使用with是一个非常糟糕的主意axes=FALSE
,因为重叠的图不一定使用相同的坐标系。第二个情节的预期功能是,(100^2-x^2)/2
但我无意中写了(1-x^2)/2
并没有意识到,因为我设置了axes = FALSE。
总而言之,这是我的首选解决方案:
curve( x^2/2
, from = 0
, to = 100
, n = 30
, type = "p"
, pch = 21 # alternatively pch=15 is a solid symbol
, col = "red" # colors the outline of hollow symbol pch=21
, bg = "red" # fills hollow symbol pch=21 with color
, xlab = "x"
, ylab = "y"
)
curve( (100^2-x^2)/2
, from = 0
, to = 100
, n = 30
, type = "p"
, pch = 22 # alternative pch=16
, col = "blue"
, bg = "blue"
, add = TRUE
)
legend( "topleft"
, inset = c(0,0.4),
, cex = 1.5,
, bty = "n",
, legend = c("A", "B"),
, text.col = c("red", "blue"),
, col = c("red", "blue"),
, pt.bg = c("red","blue")
, pch = c(21,22)
)
这产生了一个类似于 joran 所示的情节。非常感谢你们俩的帮助。