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

Julia中Plots(GR)库3D绘图自定义问题咨询

针对Plots(GR后端)3D绘图问题的解决方案

以下是针对你提出的4个GR后端3D绘图问题的具体解决方案:

1. 在3D绘图中添加标注

使用annotate!函数可以在3D空间指定坐标处添加文本标注,需传入三维坐标和text对象定义标注内容、字体大小等属性。示例如下:

# 在曲线终点添加标注
annotate!(xe[1000], ye[1000], ze[1000], text(L"t = %$B \, \mu\text{T}", 10, :black, "Computer Modern"))

2. 旋转Z轴标签(GR后端zguidefontrotation无效的解决办法)

GR后端的高层参数zguidefontrotation存在映射问题,可直接调用GR底层函数手动设置Z轴标签旋转角度:

# 在绘图完成后执行底层命令
GR.set_zlabel_rotation(-45)

也可以将绘图逻辑包裹在gr() do ... end块中确保上下文生效:

gr() do
    # 你的绘图代码
    p = plot(...)
    GR.set_zlabel_rotation(-45)
    display(p)
end

3. 消除3D绘图周围的大量空白(类似layout_tight功能)

GR后端可通过以下组合设置减少空白:

  • 初始化GR时设置plot_padding=0,关闭内部默认填充
  • 调整plotarea_ratio参数,提升绘图区域占画布的比例
  • 配合size参数设置合适的画布尺寸,同时优化边距

修改后的初始化和绘图参数示例:

gr(plot_padding=0) # 初始化时关闭内部填充

p = plot([xe[1:1000]],[ye[1:1000]],[ze[1:1000]],
    # ... 原有参数 ...
    size=(600, 600),       # 设置画布尺寸
    plotarea_ratio=0.9,    # 绘图区域占比
    margin=0mm,            # 统一边距为0
    top_margin=5mm         # 仅保留少量顶部边距放置标题
)

4. 调整标题位置(解决标题离绘图主体过远问题)

如果默认标题位置不理想,可通过两种方式优化:

方式1:调整标题位置参数

设置title_position=:plot让标题贴近绘图区域,同时微调边距:

p = plot(...,
    title = L"t = %$B \, \textrm{\mu T}",
    title_position=:plot, # 标题放置在绘图区域内上方
    top_margin=2mm
)

方式2:用annotate!模拟标题

完全自定义标题位置,通过三维坐标精准控制:

# 在绘图区域上方指定位置添加标题
annotate!(0, 0, 1.4, text(L"t = %$B \, \textrm{\mu T}", 12, :black, "Computer Modern"))

整合后的完整示例代码

using Plots; gr(plot_padding=0)
using Plots.PlotMeasures
using LaTeXStrings

te = 1e-6*rand(2000)
xe = rand(2000)
ye = rand(2000)
ze = rand(2000)

B = round(1e6*te[1000]; digits=3)
p = plot([xe[1:1000]],[ye[1:1000]],[ze[1:1000]],
    fontfamily = "Computer Modern",
    camera = (45,15),
    size=(600,600),
    plotarea_ratio=0.9,
    margin=0mm,
    top_margin=5mm,
    title = L"t = %$B \, \textrm{\mu T}",
    titlefontsize=12,
    title_position=:plot,
    xaxis=(L"x",(-1.2,1.2)), 
    yaxis=(L"y",(-1.2,1.2)), 
    zaxis=(L"z",(-1.2,1.2)), 
    tickfontsize=6,
    guidefontsize=10,
    linewidth = range(0, 1, length = 1000),
    seriesalpha = range(0, 1, length = 1000),
    aspect_ratio=:equal,
    framestyle=:box,
    legend=false,
    dpi=300,)

# 添加3D标注
annotate!(xe[1000], ye[1000], ze[1000], text(L"End Point", 8, :red, "Computer Modern"))

# 设置Z轴标签旋转
GR.set_zlabel_rotation(-45)

display(p)
# savefig(p, "3d_plot.png")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 00:01:12