You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Julia中使用Makie如何删除scatter!绘制的散点?

Makie删除散点的正确实现方法

你之前的代码无法运行有两个核心原因:

  1. 新版Makie(v0.19及以后)不再推荐直接操作底层Scene对象,scatter!等变异绘图函数的第一个入参应为Axis轴对象而非Scene对象,因此直接传scene会报错
  2. 散点等绘图元素存储在Axis对应scene的plots数组中,不存在scene.scatter这个属性,旧版本的操作语法已经过时。

以下是两种适配新版Makie的解决方案,均可满足你「同一时间仅保留一个散点、可随时删除」的需求:

方案1:存储散点对象后调用delete!删除(最稳定,推荐)

该方法不会误删其他绘图元素,无需依赖绘图顺序,完全符合你的使用场景:

using GLMakie # 按需替换为CairoMakie/WGLMakie

# 1. 初始化画布、轴,可先绘制其他固定内容
fig, ax = lines(0:0.1:2pi, sin.(0:0.1:2pi), label="背景曲线")

# 2. 绘制散点时直接接住返回的绘图对象
current_scatter = scatter!(ax, [pi/2], [1.0], color=:red, markersize=12, label="临时散点")
axislegend(ax)
display(fig) # 此时可看到红色散点

# 3. 需要删除散点时执行即可
delete!(ax, current_scatter)
axislegend(ax) # 刷新图例,散点对应的图例项会同步消失
display(fig) # 此时散点已被移除

如果需要新增散点,只需重新给current_scatter赋值新的scatter!返回值即可,新增前可先调用delete!删除旧散点,保证同一时间仅存在一个散点。

方案2:直接弹出最后一个绘图元素

如果你每次都是最后绘制散点,不需要额外存储变量,可以直接弹出plots数组的最后一个元素:

# 绘制散点
scatter!(ax, [pi], [0.0], color=:blue, markersize=12)
# 删除最后绘制的元素(即上述散点)
pop!(ax.scene.plots)

该方法依赖绘图顺序,若散点不是最后一个绘制的元素会误删其他内容,仅适合简单场景使用。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 03:15:03