ggtern(和ggplot)在反应式降价脚本中看不到数据

ggtern(和ggplot)在反应式降价脚本中看不到数据,r,ggplot2,shiny,r-markdown,ternary,R,Ggplot2,Shiny,R Markdown,Ternary,我一直在使用ggtern软件包在R Markdown中创建三元图。我使用的是R版本3.2.2 2015-08-14-平台上的消防安全:x86_64-w64-mingw32/x64 64位。我在R Studio版本0.99.489中工作 我想从单独打印每个绘图切换到使用嵌入式反应脚本inputSelect和renderPlot函数。但是,在renderPlot中使用ggtern时,我得到一个错误,即找不到我正在调用的数据帧。我做了很多测试。。。1我可以调用相同的dataframe来渲染,2我可以调

我一直在使用ggtern软件包在R Markdown中创建三元图。我使用的是R版本3.2.2 2015-08-14-平台上的消防安全:x86_64-w64-mingw32/x64 64位。我在R Studio版本0.99.489中工作

我想从单独打印每个绘图切换到使用嵌入式反应脚本inputSelect和renderPlot函数。但是,在renderPlot中使用ggtern时,我得到一个错误,即找不到我正在调用的数据帧。我做了很多测试。。。1我可以调用相同的dataframe来渲染,2我可以调用相同的dataframe来渲染plot,使用基本绘图函数仅调用X&Y数据,忽略Z,但ggplot提供的相同对象“yourdata”找不到

我曾经尝试过从R Markdown切换到只编写然后调用一个单独的闪亮应用程序,但这会产生类似的错误

有人能解释一下发生了什么并提出解决方案吗?我有很多这样的东西要做,我的短期解决方案是运行一些代码,循环ggtern将100多个绘图打印到png文件,然后使用反应脚本选择和调用图像。但这显然不太理想!我也可以尝试在包合成或robCompositions中使用三元绘图选项,但如果可能的话,我更喜欢使用ggtern绘图

下面是我的R Markdown文档中的数据和反应代码块。我还发布了整个文档,您可以在其中看到各种有效和无效的测试。谢谢

```{r data.import}
# Here is a very small example of input data
triadR <- data.frame(NarrID = rep(1:5, 2), Var = c(rep("Important",5),rep("Law", 5)), X = c(14.15406, 58.15887, 11.79224, 53.37626, 24.08851, 17.53618, 21.94300,  8.92137, 49.28843, 58.15012), Y = c(74.24623, 24.49748, 18.96985, 24.49748, 52.63819, 69.22111, 58.66835, 32.53769, 33.54272, 14.94975), Z = c(11.59971, 17.34365, 69.23792, 22.12626, 23.27329, 13.24271, 19.38865, 58.54094, 17.16886, 26.90012), Ax = rep(0.5,10),   Ay = rep(0.5, 10), DNA = rep(NA, 10))
triadR[3,3:5] = NA
triadQ <- data.frame(Var=c("Important", "Law"), Triad=c("People acted according to", "Justice was achieved through"), X = c("Intuition", "Reconciliation"), Y=c("Logic", "Revenge"), Z=c("Values", "Deterence"), Project=c(1,1))
triadQ
triadR
```
这就是我想要的情节。ggtern命令在闪亮的renderPlot命令之外生成正确的绘图

```{r ggtern, echo=TRUE, fig.width=4}
inputPanel(
selectInput("Triad", "Which triad would you like to view?", levels(unique(triadQ$Triad)))
)

renderPlot({
library(ggtern)
varname <- as.character(triadQ[which(triadQ$Triad==input$Triad),triadQ$Var]$Var)
data_nas <- data.frame(triadR[which(triadR$Var==varname),])
ggtern(data = plotdata, aes(plotdata$X, plotdata$Y, plotdata$Z)) +
    geom_density_tern(n = 200, aes(fill  = ..level.., alpha = ..level..)) +
    geom_point() +
    theme_bw() +
    labs(x="Stable",y="Emergent",z="Unstable",title="Fit Together") +
    scale_fill_gradient(low = "blue",high = "red") +
    guides(color = "none", fill = "none", alpha = "none")
})

也许您应该使用数据而不是plotdataSo plotdata到底是在哪里定义的?我想你会感到困惑,因为变量在开发过程中一直在R-Studio会话中定义,但每次R-markdown调用都会清除会话。我认为用plotdata替换data会解决HuberL建议的问题,但是我不能真正测试它,因为新版本的ggplot似乎已经破坏了ggtern,所以ggtern似乎从ggplot 2.0.0开始就被破坏了对不起,是的,在从我的真实代码中转录一个小示例时,我确实错过了其中一个代码块中的plotdata行。在实际代码中,我确实在每个块调用了正确的数据。但不管怎样,我都会得到同样的错误。如果只是ggplot更新,那就太不幸了!感谢您的回复。