You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何移除R语言中plot()绘制圆形时出现的水平线?

解决圆形绘图中出现水平线的问题

嘿,这个问题我遇见过!原因其实很简单——你的函数生成的点顺序有个小问题:它先按x从-a到a生成上半圆的点,紧接着又重复一次x从-a到a生成下半圆的点。这就导致plot在画完上半圆的终点(a,0)后,直接跳转到下半圆的起点(-a,0),硬生生画出了一条横穿圆心的水平线。

下面给你两种解决方法,第一种更优雅,推荐优先使用:

方法1:调整点的顺序,让圆周连续衔接

修改你的函数,让下半圆的xa-a(也就是反转上半圆的x序列),这样整个点的顺序是沿着圆周从左到右画完上半圆,再从右到左画下半圆,完美衔接不会跳步:

d_cir = function(a=1){
  x = seq(-a, a, .005)
  # 上半圆:x从-a到a,y为正的平方根
  y_upper = sqrt(a^2 - x^2)
  # 下半圆:x反转(从a到-a),y为负的平方根
  x_lower = rev(x)
  y_lower = -sqrt(a^2 - x_lower^2)
  # 合并成连续的圆周点序列
  cbind(c(x, x_lower), c(y_upper, y_lower))
}

# 重新绘制,水平线就消失啦
plot(d_cir(), asp = 1, type="l")

方法2:不修改函数,分开绘制上下半圆

如果你不想改动原函数,可以把生成的圆形数据拆成上下两部分,分别用plotlines绘制:

# 生成原始圆形数据
circle_data = d_cir()
# 计算上下半圆的分界点
half_rows = nrow(circle_data) / 2
# 先画半圆,设置好y轴范围确保下半圆能显示
plot(circle_data[1:half_rows, ], asp=1, type="l", ylim=c(-1, 1))
# 再用lines画下半圆
lines(circle_data[(half_rows + 1):nrow(circle_data), ])

两种方法都能解决问题,不过第一种方法让数据本身就是连续的圆周序列,后续再用这些数据做其他操作也更方便~

内容的提问来源于stack exchange,提问作者maluicr

火山引擎 最新活动