朱莉娅中未显示情节

rns*_*nso 2 plot julia

我有一个名为 mycode.jl 的文件,其中包含从此处获取的以下代码。

using MultivariateStats, RDatasets, Plots

# load iris dataset
println("loading iris dataset:")
iris = dataset("datasets", "iris")
println(iris)
println("loaded; splitting dataset: ")

# split half to training set
Xtr = Matrix(iris[1:2:end,1:4])'
Xtr_labels = Vector(iris[1:2:end,5])

# split other half to testing set
Xte = Matrix(iris[2:2:end,1:4])'
Xte_labels = Vector(iris[2:2:end,5])

print("split; Performing PCA: ")


# Suppose Xtr and Xte are training and testing data matrix, with each observation in a column. We train a PCA model, allowing up to 3 dimensions:
M = fit(PCA, Xtr; maxoutdim=3)
println(M)

# Then, apply PCA model to the testing set
Yte = predict(M, Xte)
println(Yte)


# And, reconstruct testing observations (approximately) to the original space
Xr = reconstruct(M, Yte)
println(Xr)

# Now, we group results by testing set labels for color coding and visualize first 3 principal components in 3D plot
println("Plotting fn:")
setosa = Yte[:,Xte_labels.=="setosa"]
versicolor = Yte[:,Xte_labels.=="versicolor"]
virginica = Yte[:,Xte_labels.=="virginica"]

p = scatter(setosa[1,:],setosa[2,:],setosa[3,:],marker=:circle,linewidth=0)
scatter!(versicolor[1,:],versicolor[2,:],versicolor[3,:],marker=:circle,linewidth=0)
scatter!(virginica[1,:],virginica[2,:],virginica[3,:],marker=:circle,linewidth=0)
plot!(p,xlabel="PC1",ylabel="PC2",zlabel="PC3")

println("Reached end of program.")
Run Code Online (Sandbox Code Playgroud)

我在 Linux 终端上使用命令运行上面的代码:julia mycode.jl

代码运行正常并到达末尾,但绘图没有出现。

问题出在哪里以及如何解决。

sun*_*ica 8

正如绘图文档的输出部分所述:

绘图仅在返回时显示(分号将抑制返回),或者使用 display(plt)、gui() 显式显示,或通过在绘图命令中添加 show = true 来显示。

您可以通过设置默认值来获得类似 MATLAB 的交互行为:default(show = true)

关于“返回时”的第一部分是关于您何时plot从 REPL(或 Jupyter 等)调用的,这里不适用。

在这里,您可以使用其他选项之一:

  • display(p)最后一次调用后调用plot!(这是最常见的方法)
  • gui()最后一次之后打电话plot!
  • show = true在最后一次plot!调用中添加参数
  • 通过在脚本开头设置默认值以始终显示Plots.default(show = true)绘图

其中任何一项都足以使绘图窗口出现。


当 Julia 进程结束时,情节结束,如果发生得太快,您可以:

  1. 在终端上运行您的代码julia -i mycode.jl- 这将运行您的代码,显示绘图,然后将您带到 Julia REPL。这既可以使绘图保持打开状态,又可以让您在需要时进一步使用代码中的变量。
  2. readline()在程序末尾添加一个调用。这将使 Julia 等待额外按下换行符/Enter/Return 键,并且绘图将一直显示,直到您按下该键。

(这些建议归功于Julia Discourse 上的 ffevotte 。)