如何在R语言中绘制原始向量和旋转后向量?是否需要使用par函数
R语言同画布绘制原始向量与旋转后向量方案
一、先修正你的旋转函数bug
你提供的代码存在3处明显错误,会导致无法得到正确的旋转结果:
- 变量名冲突:输入参数
old_vector被你用来接收旋转矩阵,直接覆盖了输入的原始向量值 - 旋转矩阵公式错误:二维向量逆时针旋转a弧度的正交矩阵应为
matrix(c(cos(a), sin(a), -sin(a), cos(a)), nrow=2),你写的矩阵实际上是斜向反射矩阵 - 语法错误:矩阵乘法处的
old vector存在空格,属于无效变量名
修正后的函数代码如下:
rotate_vector <- function(a, old_vector){ # 输入参数: # a: 逆时针旋转的弧度值 # old_vector: 待旋转的二维向量,长度为2的数值向量或2行1列的矩阵 rotate_mat <- matrix(c(cos(a), sin(a), -sin(a), cos(a)), nrow = 2) rotated_vector <- rotate_mat %*% old_vector return(as.vector(rotated_vector)) }
二、绘图不需要调用par函数
par函数一般用于调整绘图全局参数、划分多子图布局,你仅需要在单张画布上绘制两个向量,直接用基础绘图函数叠加图层即可,不需要调用par。
完整绘图示例代码如下:
# 1. 定义原始向量、旋转角度 old_v <- c(2, 1) rotate_angle <- pi/3 # 逆时针旋转60度 # 2. 得到旋转后向量 new_v <- rotate_vector(rotate_angle, old_v) # 3. 初始化画布,设置坐标轴范围能容纳两个向量 x_limit <- range(c(0, old_v[1], new_v[1])) y_limit <- range(c(0, old_v[2], new_v[2])) plot(0, 0, xlim = x_limit, ylim = y_limit, xlab = "X", ylab = "Y", main = "向量旋转效果", type = "n") # 添加参考网格 grid() # 4. 绘制两个向量,用颜色区分 arrows(x0 = 0, y0 = 0, x1 = old_v[1], y1 = old_v[2], col = "darkblue", lwd = 2, length = 0.1) arrows(x0 = 0, y0 = 0, x1 = new_v[1], y1 = new_v[2], col = "darkred", lwd = 2, length = 0.1) # 5. 添加图例 legend("topright", legend = c("原始向量", "旋转后向量"), col = c("darkblue", "darkred"), lwd = 2)
如果你确实需要调整画布边距、字体等全局绘图属性,可以额外调用par函数设置对应参数,不是必须项。
内容的提问来源于stack exchange,提问作者itchy cat
相关产品推荐
相关产品推荐

