列名在 Plots.jl 中包含空格



我正在尝试绘制数据框的特定列,其名称包含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:Userscondo.juliapackagesGRjoQgGsrcjlgr.jl:1118

我可以:

@df medf GR.plot(:TEMPERATURE)

但我不能:

@df medf GR.plot(:EXT TEMPERATURE)

在这种特殊情况下,我应该如何引用此专栏?

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")

我刚刚在导入扩展名为.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")

我在数据帧上使用它取得了良好的效果,在其他软件包上使用了 YMMV。

Julia 倾向于将符号常量 :symb 视为在某些情况下的变量名称,因此如果您尝试将包含空格的符号用作变量名称,则会变得很尴尬,因为 Julia 中的变量名称不能包含空格。

但是,您也可以按数据帧列的位置引用该列:

using CSV, DataFrames, Plots
iob = IOBuffer("""DATE/TIME,EXT TEMPERATUREn2018-10-10 12:30, 22.4n2018-10-11 08:10,26.1n""")
df = convert(DataFrame, CSV.read(iob))
plot(df[2], ylabel=names(df)[2]) 

相关内容

  • 没有找到相关文章

最新更新