Carpet Contour Plot in JavaScript
How to make D3.js-based carpet contour plots in Plotly.js.
Plotly Studio: Transform any dataset into an interactive data application in minutes with AI. Sign up for early access now.
var trace1 = {
type: 'carpet',
a: [0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3],
b: [4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6],
x: [2, 3, 4, 5, 2.2, 3.1, 4.1, 5.1, 1.5, 2.5, 3.5, 4.5],
y: [1, 1.4, 1.6, 1.75, 2, 2.5, 2.7, 2.75, 3, 3.5, 3.7, 3.75],
aaxis: {
tickprefix: "a = ",
smoothing: 0,
minorgridcount: 9,
type: 'linear'
},
baxis: {
tickprefix: "b = ",
smoothing: 0,
minorgridcount: 9,
type: 'linear'
}
}
var layout = {
title: {
text: "Cheater plot with 1d input"
},
margin: {
t: 40, r: 30, b: 30, l: 30
},
yaxis: {
range: [0.388,4.361]
},
xaxis: {
range: [0.667,5.932]
}
}
var data = [trace1]
Plotly.newPlot('myDiv', data, layout)
var trace1 = {
type: 'contourcarpet',
a: [0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3],
b: [4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6],
z: [1, 1.96, 2.56, 3.0625, 4, 5.0625, 1, 7.5625, 9, 12.25, 15.21, 14.0625],
autocontour: false,
contours: {
start: 1,
end: 14,
size: 1
},
line: {
width: 2,
smoothing: 0
},
colorbar: {
len: 0.4,
y: 0.25
}
}
var trace2 = {
type: 'carpet',
a: [0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3],
b: [4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6],
x: [2, 3, 4, 5, 2.2, 3.1, 4.1, 5.1, 1.5, 2.5, 3.5, 4.5],
y: [1, 1.4, 1.6, 1.75, 2, 2.5, 2.7, 2.75, 3, 3.5, 3.7, 3.75],
aaxis: {
tickprefix: "a = ",
smoothing: 0,
minorgridcount: 9,
type: 'linear'
},
baxis: {
tickprefix: "b = ",
smoothing: 0,
minorgridcount: 9,
type: 'linear'
}
}
var layout = {
title: {
text: "Cheater plot with 1d input"
},
margin: {
t: 40, r: 30, b: 30, l: 30
},
yaxis: {
range: [0.388,4.361]
},
xaxis: {
range: [0.667,5.932]
}
}
var data = [trace1,trace2]
Plotly.newPlot('myDiv', data, layout)
function Get(url){
var Httpreq = new XMLHttpRequest();
Httpreq.open("GET",url,false);
Httpreq.send(null);
return Httpreq.responseText;
}
var json_obj = JSON.parse(Get("https://raw.githubusercontent.com/bcdunbar/datasets/master/airfoil_data.json"));
var trace1 = {
a: json_obj[0].a,
b: json_obj[0].b,
baxis: {
startline: false,
endline: false,
showticklabels: "none",
smoothing: 0,
showgrid: false
},
x: json_obj[0].x,
y: json_obj[0].y,
type: "carpet",
aaxis:{
startlinewidth: 2,
startline: true,
showticklabels: "none",
endline: true,
showgrid: false,
endlinewidth: 2,
smoothing: 0
}
}
var trace2 = {
autocolorscale: false,
zmax: 1,
name: "Pressure",
colorscale: "Viridis",
zmin: -8,
colorbar: {
y: 0,
yanchor: "bottom",
title: {side:
'right'
},
len: 0.75,
title: {
text: "Pressure coefficient, c<sub>p</sub>"
},
},
contours: {
start: -1,
size: 0.025,
end: 1.000,
showlines: false
},
line: {
smoothing: 0
},
z: json_obj[1].z,
type: "contourcarpet",
autocontour: false,
zauto: false
}
var trace3 = {
opacity: 0.300,
showlegend: true,
name: "Streamlines",
autocontour: true,
ncontours: 50,
contours: {
coloring: "none"
},
line: {
color: "white",
width: 1
},
z: json_obj[2].z,
type: "contourcarpet"
}
var trace4 = {
showlegend: true,
name: "Pressure<br>contours",
autocontour: false,
z: json_obj[3].z,
type: "contourcarpet",
line: {
color: "rgba(0, 0, 0, 0.5)",
smoothing: 1
},
contours: {
size: 0.250,
start: -4,
coloring: "none",
end: 1.000,
showlines: true
}
}
var trace5 = {
legendgroup: "g1",
name: "Surface<br>pressure",
mode: "lines",
hoverinfo: "skip",
x: json_obj[4].x,
y: json_obj[4].y,
line: {
color: "rgba(255, 0, 0, 0.5)",
width: 1,
shape: "spline",
smoothing: 1
},
fill: "toself",
type: "scatter",
fillcolor: "rgba(255, 0, 0, 0.2)"
}
var trace6 = {
showlegend: false,
legendgroup: "g1",
mode: "lines",
hoverinfo: "skip",
x: json_obj[5].x,
y: json_obj[5].y,
line: {
color: "rgba(255, 0, 0, 0.3)",
width: 1
},
type: "scatter"
}
var trace7 = {
showlegend: false,
legendgroup: "g1",
name: "cp",
text: json_obj[6].text,
mode: "lines",
hoverinfo: "text",
x: json_obj[6].x,
y: json_obj[6].y,
line: {
color: "rgba(255, 0, 0, 0.2)",
width: 0
},
type: "scatter"
}
data = [trace1,trace2,trace3,trace4,trace5,trace6,trace7]
var layout = {
yaxis: {
zeroline: false,
range: [-1.800,1.800],
showgrid: false
},
dragmode: "pan",
height: 700,
xaxis: {
zeroline: false,
scaleratio: 1,
scaleanchor: "y",
range: [-3.800,3.800],
showgrid: false
},
title: {
text: "Flow over a Karman-Trefftz airfoil"
},
hovermode: "closest",
margin: {
r: 60,
b: 40,
l: 40,
t: 80
},
width: 900
}
Plotly.newPlot('myDiv', data, layout);
