Ternary Contour Plot in R
How to create Ternary Contour Plots in R with Plotly.
Plotly Studio: Transform any dataset into an interactive data application in minutes with AI. Sign up for early access now.
Basic Terary Contour Plot
library(plotly)
library(rjson)
df <- fromJSON(file="https://gist.githubusercontent.com/davenquinn/988167471993bc2ece29/raw/f38d9cb3dd86e315e237fde5d65e185c39c931c2/data.json")
colors = c('#8dd3c7','#ffffb3','#bebada',
'#fb8072','#80b1d3','#fdb462',
'#b3de69','#fccde5','#d9d9d9',
'#bc80bd','#ccebc5','#ffed6f');
fig <- plot_ly()
for (i in 1:length(df)) {
l = c()
m = c()
n = c()
for (j in 1:length(df[[i]])) {
l[[j]] <- df[[i]][[j]]$clay
m[[j]] <- df[[i]][[j]]$sand
n[[j]] <- df[[i]][[j]]$silt
}
fig <- add_trace(
fig,
type = 'scatterternary',
a = l,
b = m,
c = n,
name = names(df[i]),
mode = 'lines',
line = list(
color='#444'
),
fill = 'toself',
fillcolor = colors[i],
showlegend = F
)
}
fig <- layout(
fig,
title = "Simple Ternary Contour Plot in R",
ternary = list(
sum = 100,
aaxis = list(
title = "clay",
ticksuffix = "%",
min = 0.01,
linewidth = 2,
ticks = "outside"
),
baxis = list(
title = "sand",
ticksuffix = "%",
min = 0.01,
linewidth = 2,
ticks = "outside"
),
caxis = list(
title = "silt",
ticksuffix = "%",
min = 0.01,
linewidth = 2,
ticks = "outside"
)
)
)
fig
Reference
See https://plotly.com/r/reference/#scatterternary for more information and options!
What About Dash?
Dash for R is an open-source framework for building analytical applications, with no Javascript required, and it is tightly integrated with the Plotly graphing library.
Learn about how to install Dash for R at https://dashr.plot.ly/installation.
Everywhere in this page that you see fig
, you can display the same figure in a Dash for R application by passing it to the figure
argument of the Graph
component from the built-in dashCoreComponents
package like this:
library(plotly)
fig <- plot_ly()
# fig <- fig %>% add_trace( ... )
# fig <- fig %>% layout( ... )
library(dash)
library(dashCoreComponents)
library(dashHtmlComponents)
app <- Dash$new()
app$layout(
htmlDiv(
list(
dccGraph(figure=fig)
)
)
)
app$run_server(debug=TRUE, dev_tools_hot_reload=FALSE)