R中不同距离度量(2D)的单位范围

我试图在R中绘制不同距离度量(2D)的单位球体.

我想想象L_0.1,L_0.5,L_1,L_2,L_4,L_10,L_infinity.

我希望在R中执行类似以下的操作,但需要更多指标.

《R中不同距离度量(2D)的单位范围》

以下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))

《R中不同距离度量(2D)的单位范围》

点赞