我正在尝试绘制一个数据框的特定列,其名称在Julia Plots.jl(GR后端)中包含一个空格。
这是我的数据帧结构:
17-element Array{Symbol,1}:
Symbol("DATE/TIME")
[...]
:TEMPERATURE
Symbol("EXT TEMPERATURE")
:PIM
[...]
这是我的代码:
using CSV, DataFrames
me=CSV.File(joinpath(dir,"myfile.csv"),delim=';')
medf=me|>DataFrame
using Plots,StatPlots,GR
@df medf GR.plot(Symbol("EXT TEMPERATURE"),title="Temperature")
此操作失败,并显示以下信息:
MethodError: no method matching plot(::Symbol)
Closest candidates are:
plot(!Matched::Union{AbstractString, Function, AbstractArray{T,2} where T, AbstractArray{T,1} where T}...; kv...) at C:\Users\condo\.julia\packages\GR\joQgG\src\jlgr.jl:1118
我可以:
@df medf GR.plot(:TEMPERATURE)
但是我不能:
@df medf GR.plot(:EXT TEMPERATURE)
在这种特殊情况下,我应该如何参考本专栏?
答案 0 :(得分:2)
StatPlots
中的宏@df
似乎有一些限制。幸运的是,StatPlots
软件包为您的情况提供了cols()
作为解决方法。
尝试:
using CSV, DataFrames
me=CSV.File(joinpath(dir,"myfile.csv"),delim=';')
medf=me|>DataFrame
using StatPlots
gr() # N.B.: You can include things like size=(400,300), or dpi=400 here as params
@df medf plot(cols(Symbol("EXT TEMPERATURE")),title="Temperature")
答案 1 :(得分:1)
在导入扩展名为.sav
的SPSS文件时,我刚刚遇到了这个问题。您还可以通过执行以下操作来引用符号名称中带有空格的符号:
Symbol("SOME NAME WITH SPACE")
我注意到您已经在您的某些代码中完成了此操作,但并非所有使用空格的名称都使用了该代码。您也应该能够在后续调用中做到这一点。例如,您可能有:
@df medf GR.plot(Symbol("EXT TEMPERATURE"))
在我的情况下,我的SPSS文件中有很多列,名称中带有空格,因此我写了一个宏来为我做这件事:
macro s_str(s)
Expr(:quote, Symbol(s))
end
然后可以按以下方式进行后续调用:
@df medf GR.plot(s"EXT TEMPERATURE")
我在DataFrames和YMMV上在其他软件包上使用此效果都很好。
答案 2 :(得分:0)
在某些情况下,Julia倾向于将Symbol常量:symb当作变量名对待,因此,如果您尝试使用包含空格的Symbols就像它们是变量名一样会变得尴尬,因为Julia中的变量名不能包含空格。
不过,您还可以通过以下方式通过其位置来引用DataFrame列:
using CSV, DataFrames, Plots
iob = IOBuffer("""DATE/TIME,EXT TEMPERATURE\n2018-10-10 12:30, 22.4\n2018-10-11 08:10,26.1\n""")
df = convert(DataFrame, CSV.read(iob))
plot(df[2], ylabel=names(df)[2])