Plots.jl中包含空格的列名

3
我正在尝试在 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)

在这种特定情况下,我应该如何引用这一列?

1
你可以将该列重命名为“names!”吗?还是你需要保留该空间的列名称? - Bill
我更倾向于保留原始列名。 - Pedro OS
你的问题正是为什么R版本的DataFrame有check.names-TRUE选项的原因,它会自动将列标签更改为有效名称。 - Bill
1
CSV.File有一个normalizenames选项可以实现这个功能。 - Milan Bouchet-Valat
3个回答

3

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

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

我在数据框架中使用这个工具,效果不错,但对于其他软件包可能会有所不同。


1
朱莉娅倾向于在某些情况下将符号常量:symb视为变量名,因此如果您尝试像使用变量名一样使用包含空格的符号,则会变得很麻烦,因为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]) 

不错,但我更倾向于使用列的名称进行引用,因为我熟悉 CSV 文件的结构。 - Pedro OS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接