在Julia中调用ggplot绘制边际效应时报错UndefVarError如何解决?
错误原因
两种语言的变量作用域规则存在差异:R的ggplot2会优先在传入的data参数对应的数据框中查找aes()里指定的变量,而Julia的默认规则是优先在调用代码的当前作用域查找变量,直接写sex时Julia不会主动去df中匹配列名,因此抛出未定义错误。
可行解决方案
方案1:修改列名为符号类型(适用于ggplot2.jl包)
将aes()中所有引用数据框列的参数改为Julia的Symbol类型(加冒号前缀),明确指定引用的是数据框的列,而非当前作用域的变量,修改后代码如下:
ggplot(df, aes(:unemploy, :workhours, group = :sex, shape= :sex, linetype=:sex)) + geom_point(position=position_dodge(width=0.15)) + geom_errorbar(aes(ymin = :lower, ymax = :upper),width = 0.1, linetype = "solid",position=position_dodge(width=0.15))+ geom_line(position=position_dodge(width=0.15))
方案2:通过RCall直接运行R代码(兼容性最好)
如果是通过RCall调用R的ggplot2,可将原有R代码直接放在R代码块中执行,无需修改语法:
using RCall # 将Julia侧的df数据传到R环境 @rput df # 执行R绘图代码 R""" library(ggplot2) ggplot(df, aes(unemploy, workhours, group = sex, shape= sex, linetype=sex)) + geom_point(position=position_dodge(width=0.15)) + geom_errorbar(aes(ymin = lower, ymax = upper),width = 0.1, linetype = "solid",position=position_dodge(width=0.15))+ geom_line(position=position_dodge(width=0.15)) """
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

