我试图在R中绘制不同距离度量(2D)的单位球体.
我想想象L_0.1,L_0.5,L_1,L_2,L_4,L_10,L_infinity.
我希望在R中执行类似以下的操作,但需要更多指标.
以下R代码是我的尝试.
################ Different metrics ##################
fun <- function(x,p=.5){
(abs(x)^.5)}
fun1 <- function(x,p=.5){
(2-abs(x)^.5)}
fun2 <- function(x,p=.1){
(abs(x)^.1)}
fun3 <- function(x,p=.1){
(2-abs(x)^.1)}
fun4 <- function(x,p=1){
(abs(x)^1)}
fun5 <- function(x,p=1){
(2-abs(x)^1)}
fun6 <- function(x,p=2){
(abs(x)^2)}
fun7 <- function(x,p=2){
(2-abs(x)^2)}
fun8 <- function(x,p=4){
(abs(x)^4)}
fun9 <- function(x,p=4){
(2-abs(x)^4)}
fun10 <- function(x,p=10){
(abs(x)^10)}
fun11 <- function(x,p=10){
(2-abs(x)^10)}
plot(fun1,1,-1,ylim=c(2,-0),xlim = c(1,-1))
plot(fun,-1,1,add=T)
plot(fun2,-1,1,add=T)
plot(fun3,-1,1,add=T)
plot(fun4,-1,1,add=T)
plot(fun5,-1,1,add=T)
plot(fun6,-1,1,add=T)
plot(fun7,-1,1,add=T)
plot(fun8,-1,1,add=T)
plot(fun9,-1,1,add=T)
plot(fun10,-1,1,add=T)
plot(fun11,-1,1,add=T)
##########################################################
我不确定我创建的功能.我的意思是(2-abs(x)).如果您注意到我在问题中附加的原始图表以零(y轴)为中心.
我的代码是否可以在问题中重现相同的情节?以及如何为每个指标提供不同的颜色?
最佳答案 我建议你创建一些泛型函数,并通过lapply循环将它们直接传递给绘图函数:
例如,您可以为每个p创建两个通用函数:
## The generic functions for every p and x
fun.generic1 <- function(p, x) {
return(abs(x)^p)
}
fun.generic2 <- function(p, x) {
return(2-abs(x)^p)
}
和绘图功能(使用曲线而不是绘图将x作为函数传递):
## The curve wrapping function
fun.plot <- function(p) {
curve(fun.generic1(p, x), y = c(-1, 1), add = TRUE)
curve(fun.generic2(p, x), y = c(-1, 1), add = TRUE)
}
然后,您可以创建要绘制的p的所有值的向量(包括Inf):
## All the p values
p_vector <- c(0.1, 0.5, 1, 2, 4, 10, Inf)
然后绘制一个定义了x和y限制的空图:
## Empty plot
plot(NULL, ylim = c(2, -0), xlim = c(1, -1), xlab = "x", ylab = "y")
并使用简单的lapply绘制所有参数(结果保存在静默对象中,不会阻塞R控制台):
## Plot all the parameters
silent <- lapply(p_vector, fun.plot)
额外奖励:您还可以将所有内容整合到一个更优雅的功能中:
## Wrapping function
plot.everything <- function(p_vector) {
plot(NULL, ylim = c(2, -0), xlim = c(1, -1), xlab = "x", ylab = "y")
lapply(p_vector, fun.plot)
return(invisible())
}
## Plotting the vector directly
plot.everything(c(0.1, 0.5, 1, 2, 4, 10, Inf))