使用CairoMakie与Julia设置饼图轴宽高比时遇类型转换错误
问题原因与解决方案
错误原因
你遇到的MethodError本质是Julia的语法解析问题:(autolimitaspect = 1)这种写法并没有创建配置轴属性的NamedTuple,而是被解析成了一个赋值表达式,最终返回的是整数1。而Makie.pie函数的axis参数需要接收一个包含轴配置的NamedTuple,当把整数1传入后,函数内部尝试将其转换为Symbol类型时失败,触发了类型转换错误。
在Julia中,单个元素的元组/NamedTuple必须在末尾添加逗号,才能和普通的括号表达式区分开:
(x = 1)→ 执行赋值,返回值1(Int64类型)(x = 1,)→ 创建包含:x => 1键值对的NamedTuple
修正代码
只需要在axis参数的元组末尾添加逗号,或者使用更简洁的NamedTuple创建语法即可:
写法1:添加逗号
using CairoMakie fig, ax, plt = Makie.pie([5,7,1,4], color = [:yellow, :orange, :red, :blue], radius = 4, inner_radius = 2, strokecolor = :black, strokewidth = 2, axis = (autolimitaspect = 1,) # 末尾添加逗号 ) save("myfigure.png", fig)
写法2:使用分号创建NamedTuple(更推荐)
using CairoMakie fig, ax, plt = Makie.pie([5,7,1,4], color = [:yellow, :orange, :red, :blue], radius = 4, inner_radius = 2, strokecolor = :black, strokewidth = 2, axis = (; autolimitaspect = 1) # 分号语法直接创建NamedTuple ) save("myfigure.png", fig)
内容的提问来源于stack exchange,提问作者JeanJouX
相关产品推荐
相关产品推荐

