为啥在 Julia 中尝试使用 ggplot 时出现错误?

Posted

技术标签:

【中文标题】为啥在 Julia 中尝试使用 ggplot 时出现错误?【英文标题】:Why am i getting an error when trying to work with ggplot in Julia?为什么在 Julia 中尝试使用 ggplot 时出现错误? 【发布时间】:2021-12-24 18:26:07 【问题描述】:

我在 Julia 中调用 ggplot 包,如本网站所示:https://avt.im/blog/2018/03/23/R-packages-ggplot-in-julia。我使用该网站中显示的软件包,一切正常。

现在我使用 Effects 包绘制 Julia 中的平均边际效应。我想使用ggplot 绘制它,这是我拥有的数据:

df = effects(design, m1)

这是我的 ggplot 代码和错误:

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

UndefVarError: sex not defined

Stacktrace:
 [1] top-level scope
   @ In[131]:1
 [2] eval
   @ ./boot.jl:360 [inlined]
 [3] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)
   @ Base ./loading.jl:1116

我之前在 R 中在同一个数据帧上尝试过这段代码,它运行良好,所以我猜的问题是 ggplot 没有按应有的方式读取数据。有人可以帮我解决这个问题吗?

【问题讨论】:

【参考方案1】:

你的链接实际上在这个小sn-p中解释了它:

ggplot(d, aes(x=:x,y=:y)) + geom_line()

请注意,aes 函数使用 :x 之类的 Julia 符号来引用数据框列。

在您的aes(unemploy, workhours, group = sex, shape= sex, linetype=sex) 行中,sex 被视为 Julia 中的任何其他变量,特别是 Julia 尝试在代码中查找现有变量 sex 及其引用的对象.在您的代码中找不到它,因此是 UndefVarError

Non-standard evaluation 授予 R 的 aes 能够查看 group=sex 并将 sex 视为名称而不是尝试评估它的能力。这有点类似于 Julia 的宏在编译阶段之前处理未计算表达式的方式,但 R 的风格非常不同。

【讨论】:

感谢您的回答,我很抱歉,但我是 Julia 的新手,它仍然有点复杂。关于group=sex,我不确定我是否完全理解您。当我删除它们时,代码现在可以正常工作,但我仍然需要包含它们,我不确定我是否理解如何根据 Julia 的代码语言这样做。我试过group =:sex,但没用。 我没有直接说出来,也许我应该说。对aes 调用进行此编辑:aes(unemploy, workhours, group = :sex, shape= :sex, linetype=:sex) 效果很好,谢谢!上次来打扰您,但我试图通过包含此代码来更改此图中的比例,就像我通常在 R 中所做的那样:scale_y_continuous(limits = c(0, 40), breaks = seq(0, 40, by = 2)),我收到以下错误:UndefVarError: c not defined 。我试图通过放置双点 : 运算符来进行调整,但它不起作用。 当人们有其他问题时,我通常会建议他们在单独的帖子中进行,而不是将其附加到之前的问题中。但我有一个不同的建议:阅读一下如何在 Julia 中编写代码。我敢肯定,甚至有一些文章只是为了从 R 翻译到 Julia,从那里开始。您的错误是因为 c 不是 Julia 中的组合向量函数。为什么会这样? Julia 和 R 是不同的语言,所以你不应该期望 Julia 的编译器能够理解 R 代码,或者 R 和 Julia 的设计方式相同。 我还将在 Julia 文档中链接这一点,该文档列出了与 R 的差异。我不建议从那里开始,因为它没有以 Julia 教程的示例进行组织,但它确实指出了语言如何“构建向量”以及其他常见的习惯陷阱(docs.julialang.org/en/v1/manual/noteworthy-differences/…)

以上是关于为啥在 Julia 中尝试使用 ggplot 时出现错误?的主要内容,如果未能解决你的问题,请参考以下文章

在 Shinydashboard 中渲染 ggplot 时出现致命错误

为啥 ArrayFloat64,1 不是 Julia 中 ArrayReal,1 的子类型?

在ggplot中使用条形图时出现意外的x轴刻度线

在 Julia 中,为啥 @printf 是宏而不是函数?

使用ggplot将文本制作为新罗马字体时出现问题

为啥 Julia 代码性能比 Fortran 低很多?