我一直使用ggtern包在R Markdown中创建三元图。我正在使用R版本3.2.2(2015-08-14) - " Fire Safety"在平台上:x86_64-w64-mingw32 / x64(64位)。我在R Studio版本0.99.489中工作。
我想从单独打印每个绘图切换到使用嵌入式反应脚本(inputSelect和renderPlot函数)。但是,在renderPlot中使用ggtern我得到一个错误,我无法找到我正在调用的数据帧。我做了很多测试......(1)我可以将相同的数据帧调用到renderTable,(2)我可以使用基本绘图函数调用相同的数据帧到renderPlot(只是X和Y数据,忽略Z ),但是ggplot给出了相同的对象'你的数据'无法找到"。
我已经尝试从R Markdown切换到只写(然后调用)一个单独的Shiny应用程序,但这会产生类似的错误。
任何人都可以解释发生了什么并提出解决方案吗?我有很多这样做,我的短期修复是运行一些代码循环ggtern打印100多个图到png文件,然后使用反应脚本来选择和调用图像。但这显然不太理想!我还可以尝试在包组合或robCompositions中使用三元绘图选项 - 但如果可能的话,更愿意使用ggtern进行绘图。
以下是我的R Markdown文档中的数据和反应代码块。我还发布了整个文档(https://kdvdecisionanalysis.shinyapps.io/WhyCantPlot),您可以在其中查看各种有效且无法运行的测试。谢谢!
```{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命令在Shiny 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")
})