функция plot в Julia не будет обрабатывать данные, взятые из наборов данных - PullRequest
0 голосов
/ 26 января 2019

2-й массив, создаваемый при использовании чтения набора данных, имеет тип any.Вот мой код:

using Plots
pyplot()
using DelimitedFiles
import Base: convert, promote_rule
fi=readdlm("train.csv",',')
att1=fi[:,1]
att2=fi[:,3]
plot(att1,att2)

Это сообщение об ошибке

No user recipe defined for SubString{String}

Stacktrace:
 [1] error(::String) at ./error.jl:33
 [2] convertToAnyVector(::SubString{String}, ::Dict{Symbol,Any}) at /home/jrun/.julia/packages/Plots/rmogG/src/series.jl:14
 [3] convertToAnyVector(::Array{Any,1}, ::Dict{Symbol,Any}) at /home/jrun/.julia/packages/Plots/rmogG/src/series.jl:65
 [4] macro expansion at /home/jrun/.julia/packages/Plots/rmogG/src/series.jl:138 [inlined]
 [5] apply_recipe(::Dict{Symbol,Any}, ::Type{Plots.SliceIt}, ::Array{Any,1}, ::Array{Any,1}, ::Nothing) at /home/jrun/.julia/packages/RecipesBase/Uz5AO/src/RecipesBase.jl:275
 [6] _process_userrecipes(::Plots.Plot{Plots.PyPlotBackend}, ::Dict{Symbol,Any}, ::Tuple{Array{Any,1},Array{Any,1}}) at /home/jrun/.julia/packages/Plots/rmogG/src/pipeline.jl:83
 [7] _plot!(::Plots.Plot{Plots.PyPlotBackend}, ::Dict{Symbol,Any}, ::Tuple{Array{Any,1},Array{Any,1}}) at /home/jrun/.julia/packages/Plots/rmogG/src/plot.jl:178
 [8] #plot#132(::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, ::Function, ::Array{Any,1}, ::Vararg{Array{Any,1},N} where N) at /home/jrun/.julia/packages/Plots/rmogG/src/plot.jl:57
 [9] plot(::Array{Any,1}, ::Array{Any,1}) at /home/jrun/.julia/packages/Plots/rmogG/src/plot.jl:51
 [10] top-level scope at In[75]:8

1 Ответ

0 голосов
/ 26 января 2019

Тот факт, что ваш ввод является контейнером типа Any, не должен иметь большого значения. Посмотрите на этот пример, который отлично работает:

julia> using Plots

julia> x = rand(3);

julia> xany = Any[x...];

julia> typeof(x)
Array{Float64,1}

julia> typeof(xany)
Array{Any,1}

julia> plot(x,x) # works

julia> plot(xany,xany) # works as well

Так что мне кажется, что фактическое содержание вашего Array{Any, 1} не может быть обработано. Из сообщения об ошибке я бы предположил, что он содержит строки (или подстроки) вместо чисел. Если это так, попробуйте сначала преобразовать эти строки в числа.

Воспроизведение (аналогичной) ошибки

julia> xanystrings = Any[string.(x)...]
3-element Array{Any,1}:
 "0.22161258086701574"
 "0.8190303081538728"
 "0.3519207194248777"

julia> plot(xanystrings, xanystrings)
ERROR: No user recipe defined for String
Stacktrace:
 [1] error(::String) at .\error.jl:33
 [2] convertToAnyVector(::String, ::Dict{Symbol,Any}) at C:\Users\carsten\.julia\packages\Plots\qh1wV\src\series.jl:14
 [3] convertToAnyVector(::Array{Any,1}, ::Dict{Symbol,Any}) at C:\Users\carsten\.julia\packages\Plots\qh1wV\src\series.jl:65
 [4] macro expansion at C:\Users\carsten\.julia\packages\Plots\qh1wV\src\series.jl:138 [inlined]
 [5] apply_recipe(::Dict{Symbol,Any}, ::Type{Plots.SliceIt}, ::Array{Any,1}, ::Array{Any,1}, ::Nothing) at C:\Users\carsten\.julia\packages\RecipesBase\Uz5AO\src\RecipesBase.jl:275
 [6] _process_userrecipes(::Plots.Plot{Plots.GRBackend}, ::Dict{Symbol,Any}, ::Tuple{Array{Any,1},Array{Any,1}}) at C:\Users\carsten\.julia\packages\Plots\qh1wV\src\pipeline.jl:83
 [7] _plot!(::Plots.Plot{Plots.GRBackend}, ::Dict{Symbol,Any}, ::Tuple{Array{Any,1},Array{Any,1}}) at C:\Users\carsten\.julia\packages\Plots\qh1wV\src\plot.jl:178
 [8] #plot#132(::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, ::Function, ::Array{Any,1}, ::Vararg{Array{Any,1},N} where N) at C:\Users\carsten\.julia\packages\Plots\qh1wV\src\plot.jl:57
 [9] plot(::Array{Any,1}, ::Array{Any,1}) at C:\Users\carsten\.julia\packages\Plots\qh1wV\src\plot.jl:51
 [10] top-level scope at none:0

Исправление:

julia> xfixed = parse.(Float64, xanystrings)
3-element Array{Float64,1}:
 0.22161258086701574
 0.8190303081538728
 0.3519207194248777

julia> plot(xfixed, xfixed) # works again
...