Julia:Plots 包的属性汇总

简介: 这篇文章是 Julia 的 Plots 包的各种属性的汇总

这篇文章是 Julia 的 Plots 包的各种属性的汇总,实际上应该算是文档里面的一个翻译和整理。

1/ 属性

1.1/ 属性的介绍

在 Plots 上,输入的数据都有固定的位置(例如,在 plot(y) 里面的 y),而属性是以关键词的方式传递的(例如,plot(y, color=:blue))。在 REPL 中执行 using Plots 之后,可以使用 plotattr() 打印 series, plots, subplots, axes 的所有的属性进行查看:

# Valid Operations
plotattr(:Plot)
plotattr(:Series)
plotattr(:Subplot)
plotattr(:Axis)

获得属性列表后,您可以使用特定属性的别名或调查特定属性以打印该属性的别名及其描述。

julia> # Specific Attribute Example
       plotattr("size")
size {NTuple{2,Int}}
sizes, windowsize, wsize

(width_px, height_px) of the whole Plot
Plot attribute,  default: (600, 400)

1.2/ 别名(Aliases)

关键字可以通过别名机制(alias mechanic),或者可以叫做「缩写」,采用一系列值。 例如,plot(y, color=:blue) 实际上被解释为 plot(y, seriescolor=:blue)。 每个属性都有许多别名(请参见下面的图表),可以使用这些别名来避免因忘记参数名称而不断查找绘图 API 文档的痛苦。 ccolorseriescolor 都表示相同的意思,实际上它们最终会转换为更精确的属性 linecolormarkercolormarkerstrokecolorfillcolor(如果需要改变这些属性的话,也可以覆盖它们)。

一些建议:如果只是为了某个例子的可视化,不会大量重复的用到,可以用别名去指定关键词,但是对于一些长期代码,需要稳定性的代码(像是代码库),最好还是使用属性的全称,避免混淆。

1.3/ 魔术参数(Magic Arguments)

一些参数包含用于同时设置许多相关参数的智能简写。Plots 使用类型检查和多重分派来巧妙地「找出」哪些值适用于哪个参数。 传入一组值。 在处理之前,单个值将首先包装在一个元组中。

axis (and xaxis/yaxis/zaxis)

传入一个 xaxis 参数设定的元组可以快速地定义 xlabel, xlims, xticks, xscale, xflip, xtickfont,下面的两个表达是等价的:

plot(y, xaxis = ("my label", (0,10), 0:0.5:10, :log, :flip, font(20, "Courier")))

plot(y,
    xlabel = "my label",
    xlims = (0,10),
    xticks = 0:0.5:10,
    xscale = :log,
    xflip = true,
    xtickfont = font(20, "Courier")
)
yaxiszaxis 的工作机制是类似的,而如果使用 axis 则会对所有的坐标轴都起作用。

给参数 xticks(或 ytickszticks)传入一个元组来改变坐标轴刻度和标签的位置:

plot!(xticks = ([0:π:3*π;], ["0", "\\pi", "2\\pi"]))
yticks!([-1:1:1;], ["min", "zero", "max"])

line

为线条设置属性。缩写:l. 以下表达等价:

plot(y, line = (:steppre, :dot, :arrow, 0.5, 4, :red))

plot(y,
    seriestype = :steppre,
    linestyle = :dot,
    arrow = :arrow,
    linealpha = 0.5,
    linewidth = 4,
    linecolor = :red
)

fill

区域填充的属性设置。缩写:f, area. 以下表达等价:

plot(y, fill = (0, 0.5, :red))

plot(y,
    fillrange = 0,
    fillalpha = 0.5,
    fillcolor = :red
)

marker

为 marker 设置属性。缩写:m, mark. 以下表达等价:

scatter(y, marker = (:hexagon, 20, 0.6, :green, stroke(3, 0.2, :black, :dot)))

scatter(y,
    markershape = :hexagon,
    markersize = 20,
    markeralpha = 0.6,
    markercolor = :green,
    markerstrokewidth = 3,
    markerstrokealpha = 0.2,
    markerstrokecolor = :black,
    markerstrokestyle = :dot
)

1.4/ 需注意的参数

以下一些参数可能是不常注意到的重要参数:

scatter(y, thickness_scaling = 2)  # 将字体大小和线宽增加 2 倍
# 适合演示文稿和海报
# 如果后端不支持此功能,请使用缩放默认字体
# 大小的函数 scalefontsizes(2)。


scatter(y, ticks=:native)  # 让后端自己计算刻度。
# 如果使用交互式后端执行鼠标缩放的话推荐这样

scatter(rand(100), smooth=true)  # 将回归线添加到图中
目录
相关文章
|
JavaScript
31avalon - 指令ms-rules(验证规则绑定)
31avalon - 指令ms-rules(验证规则绑定)
51 0
32avalon - 指令ms-rules(自定义验证规则)
32avalon - 指令ms-rules(自定义验证规则)
42 1
|
6月前
|
存储
Julia 数据类型
Julia中的数据类型包括整数和浮点数,以及字面量。类型转换通过T(x)、convert(T,x)或x % T实现,其中错误转换会抛出InexactError。示例展示了Int8类型的转换,如成功转换127,但128会引发错误。舍入函数如round(Int8, x)简化了转换,但同样可能因不精确而报错。
|
3月前
|
分布式计算 并行计算 Unix
Julia 教程
Julia 是一个开源的编程语言,采用 MIT 许可证,每个人都可以免费使用。
43 8
|
4月前
|
缓存 Go
Go引用包版本更新但是被引用的包的子包并没有出现在vendor中的问题和解决方案
文章讨论了在Go模块项目中升级依赖包版本时遇到的子包未出现在vendor目录的问题,并提供了直接删除旧版本引用并重新执行`go mod vendor`的解决方案。
47 0
|
7月前
|
存储 索引
Julia 数组
Julia的数组是可变的、类型可异的顺序集合,支持一维和多维。索引使用整数,大小不固定。通过方括号创建,元素间用逗号分隔。例如,`[1,2,3]`创建一个整数向量,而`[1, "baidu", 2.5, pi]`创建一个包含不同类型的数组。可以指定类型,如`Int64[1,2,3]`创建整数数组,`String["Taobao","baidu","GOOGLE"]`创建字符串数组。Julia提供多种函数支持数组操作,如添加和合并元素。
Julia 元组
Julia 中的元组是不可变的有序元素集合,与数组用法相似但用小括号表示。创建元组如 `(5, 10, 15, 20, 25, 30)`,可以使用数组函数操作,如 `tupl[3:end]` 获取子元组。尝试修改元组元素会导致错误,如 `tupl2[2]=0` 会抛出 `MethodError`。
|
7月前
|
索引
Julia 数组基本函数
摘要: 了解 Julia 中的数组基本函数:eltype() 获取元素类型,length() 返回元素数量,ndims() 给出维数,size() 和 size(A,n) 用于获取维度大小,axes() 和 axes(A,n) 提供索引范围,eachindex() 用于遍历,stride() 和 strides() 描述元素间隔。
“UnwrapRef“ 是一种类型,在同时启用了 “preserveValueImports“ 和 “isolatedModules“ 时,必须使用仅类型导入进行导入。
“UnwrapRef“ 是一种类型,在同时启用了 “preserveValueImports“ 和 “isolatedModules“ 时,必须使用仅类型导入进行导入。
1025 0
“UnwrapRef“ 是一种类型,在同时启用了 “preserveValueImports“ 和 “isolatedModules“ 时,必须使用仅类型导入进行导入。
|
Ubuntu 开发工具
Julia:DiffEqSensitivity 包的预编译(precompiling)失败
我更新了某个包,然后在预编译的时候,出现了 `Failed to precompile` 的报错。在 `using DiffEqSensitivity` 的时候,出现了 `ERROR: UndefVarError: SciMLBase not defined.` 的报错,然后无法完成 precompile。
151 0