简说
由于现在很多JL 的包不成熟–要么没有升级至>=1的版本,要么本身就还画风不稳定,在大多数情况下我还是选择用Plots.jl 其他的包,如Makie(一个对OpenGL的接口),GadFly(一个类似ggplot的包)也有突出的地方,不过应该要等一段时间才能稳定下来。
本文将说明,通过很少的努力,和很少的代码,我们可以用Plots.jl生成好的(美丽而有意义的)图。之后我将简单评论普通的做图指令在"图形的语法"大为流行的今天,仍具有的一定优势。
环境:
versioninfo()
Julia Version 1.1.0
Commit 80516ca202 (2019-01-21 21:24 UTC)
Platform Info:
OS: Windows (x86_64-w64-mingw32)
CPU: Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
WORD_SIZE: 64
LIBM: libopenlibm
LLVM: libLLVM-6.0.1 (ORCJIT, skylake)
Environment:
JULIA_EDITOR = "C:\Users\DELL\AppData\Local\atom\app-1.38.2\atom.exe" -a
JULIA_NUM_THREADS = 4
啊我怎么才1.60Hz的小短腿。算了不管CPU了。
基本语法
Plots.jl,如果没有理解错的话,是本着“不用学”(things should JUST WORK)的理念设计的。同样一个图形效果可以有不同的指令做出。
按顺序做出100个正态随机点的连线(使用randn生成)
推荐使用gr()做引擎,因为,快速稳定。
如果换成使用plotly()则可以打开一个互动界面。
using Plots
x = randn(100)
y = randn(100)
gr()
plot(x,y)
毫无意义,我想要散点图,换作 scatter
scatter(x,y)
除此之外,plots.jl 还有很多预定义的图的功能。比如块状图(raster),等高线图(contour),还有很多预制的图形,比如贝叶斯曲线等。我们在下一贴将详细介绍做图本身
我都想要!
注意这个叹号的额外用途(在已有的变量上直接修改)。在平时的编程中,带有叹号的函数将会修改变量自身,比如。
append!
sort!
感觉自己在讲英语。
其实,
plot!
scatter!
contour!
也是在一个图像对象上修改罢了。
图像是数据,这并没有什么稀奇。关键在于。对于某个图像的设置(数据,颜色,线条等等)可以被保存成一个对象(Object)。这个对象存储着所有重建这个图的信息。同样,这个对象可以被修改。
p = plot(x,y)
typeof(p)
dump(p)
那么p这个对象的形式是
Plot{Plots.GRBackend}
balabala…
如果你还不信,用dump()来把内容“倾倒”出来
Plots.Plot{Plots.GRBackend}
backend: Plots.GRBackend Plots.GRBackend()
n: Int64 1
attr: Dict{Symbol,Any}
slots: Array{UInt8}((64,)) UInt8[0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01 … 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01]
keys: Array{Symbol}((64,))
balabala…
p = plot(x,y)
p = scatter!(p,x,y)
这与下面这段代码是等效的
plot(x,y)
scatter!(x,y)
不过,p这个对象有名字,这样以后就可以抽冷子把他拎出来添加或者改变一些东西。反之,如果有个没名字的图,那么对它的修改则限制于邻近的命令(你只能匿名地修改上一个图)
colorkey
颜色地面板可以关掉,为了直观我将用p来修改
plot!(p;key=false)
看,不但能填,也能减。
等会,为啥这时候p变成了第一命令?这是多分派在可视化包上的使用。
其实对这种语法的使用争议也不小。安全的使用这个语法是建立在假设你
分号之后的关键字:keyword arguments,以及Attributes 的名单
;之后常常作为调节图像的不是必须的选项(你不动它,它就在默认位置)。
类似于上面的key,这里有很多的关键字。
问题在于,文档里并没有说明关键字都有哪些
?plot 将不会返回有用的信息
查询这里:
http://docs.juliaplots.org/latest/attributes/
attributes甚至可以让你把点图调节成折线图(将在下一个帖子整理)。
保存图像
你可以用savefig() 来保存,如果图像是个图像对象,那么最好把图像对象填成第一个命令。(如果没有则默认保存上一个图)
savefig("1.png")
或者
savefig(p,“1.png”)
如果换成使用plotly,那么直接点保存建或者截图或者浏览器打印就可以了