This spider diagram compares three computational chemistry methods: Classical Force Fields, Foundational ML Force Fields, and Density Functional Theory (DFT). The comparison is based on three key attributes:
This diagram shows common trade-offs, highlighting how Foundational ML Force Fields aim to bridge the gap between the speed of classical methods and the accuracy of DFT, while offering improved generalizability over classical force fields.
\documentclass[tikz]{standalone}
\usetikzlibrary{shapes.geometric,calc}
\begin{document}
\begin{tikzpicture}
% Define named coordinates
\coordinate (origin) at (0,0);
\coordinate (acc) at (0,4);
\coordinate (speed) at (-3.464,-2);
\coordinate (transfer) at (3.464,-2);
% Define the axes
\draw[gray] (origin) -- (acc) (origin) -- (speed) (origin) -- (transfer);
% Draw the triangles
\foreach \r in {1,2,3,4}
{
\draw[dotted,gray,line width=0.9pt] (0,\r) -- (-0.866*\r,-0.5*\r) -- (0.866*\r,-0.5*\r) -- cycle;
}
% Label the axes
\node[anchor=south] at (acc) {Accuracy};
\node[anchor=north east] at (speed) {speed};
\node[anchor=north west] at (transfer) {Transferability};
% Plot the shapes
\draw[red, thick, fill=red, opacity=0.2] (0,2) coordinate (CFFACC) -- (speed) -- (.87,-.5) -- cycle;
\draw[blue, thick, fill=blue, opacity=0.2] (0,3) -- (-2.598,-1.5) -- (2.598,-1.5) -- cycle;
\draw[green!80!black, thick, fill=green!80!black, opacity=0.2] (acc) -- (-0.866,-0.5) -- (transfer) -- cycle;
% Add rotated legend labels inside the shapes
\node[red, anchor=south, rotate=49] at ($(speed)!0.5!(CFFACC)$) {Classical Force Fields};
\node[blue, anchor=south] at ($(speed)!0.5!(transfer)$) {Foundational ML Force Fields};
\node[green!80!black, anchor=center] at ($(acc)!0.5!(transfer)$) [anchor=north, rotate=-60] {DFT};
\end{tikzpicture}
\end{document}
#import "@preview/cetz:0.3.2": canvas, draw
#set page(width: auto, height: auto, margin: 8pt)
#canvas({
import draw: line, content, rotate
// Define coordinates
let acc = (0, 4)
let speed = (-3.464, -2) // -2*sqrt(3), -2
let transfer = (3.464, -2) // 2*sqrt(3), -2
let origin = (0, 0)
// Helper function to draw dotted triangles
let draw-dotted-triangle(r) = {
let x = 0.866 * r // sqrt(3)/2 * r
let y = -0.5 * r
line(
(0, r),
(-x, y),
(x, y),
(0, r),
stroke: (dash: "dotted", paint: gray),
)
}
// Draw gray axes
line(origin, acc, stroke: gray)
line(origin, speed, stroke: gray)
line(origin, transfer, stroke: gray)
// Draw dotted triangles
for r in range(1, 5) {
draw-dotted-triangle(r)
}
// Label axes
content(acc, "Accuracy", anchor: "south")
content(speed, "Speed", anchor: "north-east")
content(transfer, "Transferability", anchor: "north-west")
// Draw colored regions
// Classical Force Fields (red)
let cff-acc = (0, 2)
let cff-color = rgb("#ff0000")
line(
cff-acc,
speed,
(0.87, -0.5),
cff-acc,
stroke: cff-color + .5pt,
fill: cff-color.transparentize(90%),
)
// ML Force Fields (blue)
let mlff-blue = rgb("#5a5adc")
line(
(0, 3),
(-2.598, -1.5),
(2.598, -1.5),
(0, 3),
stroke: mlff-blue + .5pt,
fill: mlff-blue.transparentize(85%),
)
// DFT (green)
let dft-green = rgb("#4c9900")
line(
acc,
(-0.866, -0.5),
transfer,
acc,
stroke: dft-green + .5pt,
fill: dft-green.transparentize(80%),
)
// // Add rotated labels
content(
(-1.7, 0.4),
text(fill: cff-color)[Classical Force Fields],
angle: 48.5deg,
)
content(
(0, -1.75),
text(fill: mlff-blue)[Foundational ML Force Fields],
)
content((1.9, 1.2), text(fill: dft-green)[DFT], angle: -60deg)
})