Plots.jl 中包含 space 的列名
Column name containing a space in Plots.jl
我正在尝试在 Julia Plots.jl(GR 后端)中绘制名称包含 space 的数据框的特定列。
这是我的数据帧结构:
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)
在这种特殊情况下,我应该如何引用此专栏?
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])
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 文件时遇到了这个问题。还可以通过执行以下操作在名称中引用带有 space 的符号:
Symbol("SOME NAME WITH SPACE")
我注意到你在你的一些代码中这样做了,但不是在所有你使用带有 spaces 的名字的地方。您也应该能够在后续调用中执行此操作。例如,您可以:
@df medf GR.plot(Symbol("EXT TEMPERATURE"))
在我的例子中,我的 SPSS 文件中有很多名称中包含 spaces 的列,因此我编写了一个宏来为我执行此操作:
macro s_str(s)
Expr(:quote, Symbol(s))
end
那么后续的调用可以这样进行:
@df medf GR.plot(s"EXT TEMPERATURE")
我在 DataFrames 上使用这个效果很好,在其他包上使用 YMMV。
我正在尝试在 Julia Plots.jl(GR 后端)中绘制名称包含 space 的数据框的特定列。
这是我的数据帧结构:
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)
在这种特殊情况下,我应该如何引用此专栏?
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])
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 文件时遇到了这个问题。还可以通过执行以下操作在名称中引用带有 space 的符号:
Symbol("SOME NAME WITH SPACE")
我注意到你在你的一些代码中这样做了,但不是在所有你使用带有 spaces 的名字的地方。您也应该能够在后续调用中执行此操作。例如,您可以:
@df medf GR.plot(Symbol("EXT TEMPERATURE"))
在我的例子中,我的 SPSS 文件中有很多名称中包含 spaces 的列,因此我编写了一个宏来为我执行此操作:
macro s_str(s)
Expr(:quote, Symbol(s))
end
那么后续的调用可以这样进行:
@df medf GR.plot(s"EXT TEMPERATURE")
我在 DataFrames 上使用这个效果很好,在其他包上使用 YMMV。