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

Plots.jl(GR)绘图区域限制对系列注解无效是Bug还是预期行为?

问题定性

该现象属于Plots.jl的预期设计行为,并非程序Bug。
Plots.jl中xlim、ylim参数的默认裁剪规则仅作用于散点、线条等主绘图序列元素,series_annotations归属独立的文本标注层,默认不会随主序列被轴域范围自动裁剪,即便标注锚点落在设定的显示区间外,文本仍会被渲染到画布上。

注解显示区域限制方案

可根据使用场景选择以下两种实现方式:

  • 预过滤注解数据
    传入series_annotations参数前先做坐标判断,仅为落在目标显示区间内的数据点绑定有效注解,区间外的点传入空文本即可,该方案兼容所有Plots后端。
    可直接运行的修改后示例:
    x = 1:1:30
    y = x
    # 定义目标显示区间
    x_range = (5, 25)
    y_range = (3, 30)
    # 生成过滤后的注解列表
    annotations = map(zip(x, y)) do (xi, yi)
        in_x = x_range[1] ≤ xi ≤ x_range[2]
        in_y = y_range[1] ≤ yi ≤ y_range[2]
        in_x && in_y ? text(xi, :bottom) : text("")
    end
    
    plot(x, y, zcolor = x, seriestype = :scatter, title = "My plot",
        xlim = x_range, ylim = y_range, markersize = 5, label = "",
        series_annotations = annotations)
    
  • 开启GR后端专属裁剪属性
    如果固定使用GR后端,可直接开启全局裁剪开关,所有超出轴域范围的元素(包括注解文本)都会被自动隐藏,无需手动过滤数据:
    # 开启GR后端裁剪功能
    gr(clip = true)
    
    x = 1:1:30
    plot(x, x, zcolor = x, seriestype = :scatter, title = "My plot",
        xlim = (5, 25), ylim = (3, 30), markersize = 5, label = "",
        series_annotations = text.(x, :bottom))
    

    注意:clip=true是GR后端的专属参数,切换至PyPlot、Plotly等其他后端时该参数不生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:15:30