Polar Charts in JavaScript
How to make D3.js-based polar charts in Plotly.js.
New to Plotly?
Plotly is a free and open-source graphing library for JavaScript. We recommend you read our Getting Started guide for the latest installation or upgrade instructions, then move on to our Plotly Fundamentals tutorials or dive straight in to some Basic Charts tutorials.
d3.csv('https://raw.githubusercontent.com/plotly/datasets/master/polar_dataset.csv', function(err, rows){
function unpack(rows, key) {
return rows.map(function(row) { return row[key]; });
}
var trace1 = {
r: unpack(rows, 'x1'),
theta: unpack(rows, 'y'),
mode: 'lines',
name: 'Figure8',
line: {color: 'peru'},
type: 'scatterpolar'
};
var trace2 = {
r: unpack(rows, 'x2'),
theta: unpack(rows, 'y'),
mode: 'lines',
name: 'Cardioid',
line: {color: 'darkviolet'},
type: 'scatterpolar'
};
var trace3 = {
r: unpack(rows, 'x3'),
theta: unpack(rows, 'y'),
mode: 'lines',
name: 'Hypercardioid',
line: {color: 'deepskyblue'},
type: 'scatterpolar'
};
var trace4 = {
r: unpack(rows, 'x4'),
theta: unpack(rows, 'y'),
mode: 'lines',
name: 'Subcardioid',
line: {color: 'orangered'},
type: 'scatterpolar'
};
var trace5 = {
r: unpack(rows, 'x5'),
theta: unpack(rows, 'y'),
mode: 'lines',
name: 'Supercardioid',
marker: {
color: 'none',
line: {color: 'green'}
},
type: 'scatterpolar'
};
var data = [trace1, trace2, trace3, trace4, trace5];
var layout = {
title: {
text: 'Mic Patterns'
},
font: {
family: 'Arial, sans-serif;',
size: 12,
color: '#000'
},
showlegend: true,
orientation: -90
};
Plotly.newPlot('myDiv', data, layout);
});
Click to copy
data = [
{
type: "scatterpolar",
mode: "lines",
r: [0, 1.5, 1.5, 0, 2.5, 2.5, 0],
theta: [0, 10, 25, 0, 205, 215, 0],
fill: "toself",
fillcolor: '#709BFF',
line: {
color: 'black'
}
},
{
type: "scatterpolar",
mode: "lines",
r: [0, 3.5, 3.5, 0],
theta: [0, 55, 75, 0],
fill: "toself",
fillcolor: '#E4FF87',
line: {
color: 'black'
}
},
{
type: "scatterpolar",
mode: "lines",
r: [0, 4.5, 4.5, 0, 4.5, 4.5, 0],
theta: [0, 100, 120, 0, 305, 320, 0],
fill: "toself",
fillcolor: '#FFAA70',
line: {
color: 'black'
}
},
{
type: "scatterpolar",
mode: "lines",
r: [0, 4, 4, 0],
theta: [0, 165, 195, 0],
fill: "toself",
fillcolor: '#FFDF70',
line: {
color: 'black'
}
},
{
type: "scatterpolar",
mode: "lines",
r: [0, 3, 3, 0],
theta: [0, 262.5, 277.5, 0],
fill: "toself",
fillcolor: '#B6FFB4',
line: {
color: 'black'
}
}
]
layout = {
polar: {
radialaxis: {
visible: true,
range: [0, 5]
}
},
showlegend: false
}
Plotly.newPlot('myDiv', data, layout)
Click to copy
var data = [
{
type: "scatterpolar",
name: "angular categories",
r: [5, 4, 2, 4, 5],
theta: ["a", "b", "c", "d", "a"],
fill: "toself"
},
{
type: "scatterpolar",
name: "radial categories",
r: ["a", "b", "c", "d", "b", "f", "a"],
theta: [1, 4, 2, 1.5, 1.5, 6, 5],
thetaunit: "radians",
fill: "toself",
subplot: "polar2"
},
{
type: "scatterpolar",
name: "angular categories (w/ categoryarray)",
r: [5, 4, 2, 4, 5],
theta: ["a", "b", "c", "d", "a"],
fill: "toself",
subplot: "polar3"
},
{
type: "scatterpolar",
name: "radial categories (w/ category descending)",
r: ["a", "b", "c", "d", "b", "f", "a", "a"],
theta: [45, 90, 180, 200, 300, 15, 20, 45],
fill: "toself",
subplot: "polar4"
},
{
type: "scatterpolar",
name: "angular categories (w/ extra category)",
r: [5, 4, 2, 4, 5, 5],
theta: ["b", "c", "d", "e", "a", "b"],
fill: "toself"
}
]
var layout = {
polar: {
domain: {
x: [0, 0.46],
y: [0.56, 1]
},
radialaxis: {
angle: 45
},
angularaxis: {
direction: "clockwise",
period: 6
}
},
polar2: {
domain: {
x: [0, 0.46],
y: [0, 0.44]
},
radialaxis: {
angle: 180,
tickangle: -180
}
},
polar3: {
domain: {
x: [0.54, 1],
y: [0.56, 1]
},
sector: [150, 400],
radialaxis: {
angle: -45
},
angularaxis: {
categoryarray: ["d", "a", "c", "b"]
}
},
polar4: {
domain: {
x: [0.54, 1],
y: [0, 0.44]
},
radialaxis: {
categoryorder: "category descending"
},
angularaxis: {
thetaunit: "radians",
dtick: 0.3141592653589793
}
}
}
Plotly.newPlot('myDiv', data, layout)
Click to copy
var data = [
{
type: "scatterpolar",
mode: "lines+markers",
r: [1,2,3,4,5],
theta: [0,90,180,360,0],
line: {
color: "#ff66ab"
},
marker: {
color: "#8090c7",
symbol: "square",
size: 8
},
subplot: "polar"
},
{
type: "scatterpolar",
mode: "lines+markers",
r: [1,2,3,4,5],
theta: [0,90,180,360,0],
line: {
color: "#ff66ab"
},
marker: {
color: "#8090c7",
symbol: "square",
size: 8
},
subplot: "polar2"
}
]
var layout = {
showlegend: false,
polar: {
domain: {
x: [0,0.4],
y: [0,1]
},
radialaxis: {
tickfont: {
size: 8
}
},
angularaxis: {
tickfont: {
size: 8
},
rotation: 90,
direction: "counterclockwise"
}
},
polar2: {
domain: {
x: [0.6,1],
y: [0,1]
},
radialaxis: {
tickfont: {
size: 8
}
},
angularaxis: {
tickfont: {
size: 8
},
direction: "clockwise"
}
}
}
Plotly.newPlot('myDiv', data, layout)
Click to copy
var data = [
{
type: "scatterpolar",
mode: "lines+markers",
r: [1,2,3,4,5],
theta: [0,90,180,360,0],
line: {
color: "#ff66ab"
},
marker: {
color: "#8090c7",
symbol: "square",
size: 8
},
subplot: "polar"
},
{
type: "scatterpolar",
mode: "lines+markers",
r: [1,2,3,4,5],
theta: [0,90,180,360,0],
line: {
color: "#ff66ab"
},
marker: {
color: "#8090c7",
symbol: "square",
size: 8
},
subplot: "polar2"
}
]
var layout = {
showlegend: false,
polar: {
sector: [145,215],
domain: {
x: [0,0.4],
y: [0,1]
},
radialaxis: {
tickfont: {
size: 8
}
},
angularaxis: {
tickfont: {
size: 8
}
}
},
polar2: {
domain: {
x: [0.6,1],
y: [0,1]
},
radialaxis: {
tickfont: {
size: 8
}
},
angularaxis: {
tickfont: {
size: 8
}
}
}
}
Plotly.newPlot('myDiv', data, layout)
Click to copy
var data = [{
type: "scatterpolargl",
r: [1, 2, 3],
theta: [50, 100, 200],
marker: {symbol: "square"}
}, {
type: "scatterpolargl",
r: [1, 2, 3],
theta: [1, 2, 3],
thetaunit: "radians"
}, {
type: "scatterpolargl",
r: ["a", "b", "c", "b"],
theta: ["D", "C", "B", "A"],
subplot: "polar2"
}, {
type: "scatterpolargl",
r: [50, 300, 900],
theta: [0, 90, 180],
subplot: "polar3"
}, {
type: "scatterpolargl",
mode: "lines",
r: [3, 3, 4, 3],
theta: [0, 45, 90, 270],
fill: "toself",
subplot: "polar4"
}]
var layout = {
polar: {
domain: {
x: [0, 0.46],
y: [0.56, 1]
},
radialaxis: {
range: [1, 4]
},
angularaxis: {
thetaunit: "radians"
}
},
polar2: {
domain: {
x: [0, 0.46],
y: [0, 0.42]
}
},
polar3: {
domain: {
x: [0.54, 1],
y: [0.56, 1]
},
radialaxis: {
type: "log",
tickangle: 45
},
sector: [0, 180]
},
polar4: {
domain: {
x: [0.54, 1],
y: [0, 0.44]
},
radialaxis: {
visible: false,
range: [0, 6]
}
},
showlegend: false
}
Plotly.newPlot('myDiv', data, layout);
Click to copy
d3.csv('https://raw.githubusercontent.com/plotly/datasets/master/hobbs-pearson-trials.csv', function(err, rows){
function unpack(rows, key) {
return rows.map(function(row) { return row[key]; });
}
var data = [
{
type: "scatterpolargl",
r: unpack(rows, 'trial_1_r'),
theta: unpack(rows, 'trial_1_theta'),
mode: "markers",
name: "Trial 1",
marker: {
color: "rgb(27,158,119)",
size: 15,
line: {
color: "white"
},
opacity: 0.7
},
cliponaxis: false
},
{
type: "scatterpolargl",
r: unpack(rows, "trial_2_r"),
theta: unpack(rows, "trial_2_theta"),
mode: "markers",
name: "Trial 2",
marker: {
color: "rgb(217,95,2)",
size: 20,
line: {
color: "white"
},
"opacity": 0.7
},
"cliponaxis": false
},
{
type: "scatterpolargl",
r: unpack(rows, "trial_3_r"),
theta: unpack(rows, "trial_3_theta"),
mode: "markers",
name: "Trial 3",
marker: {
color: "rgb(117,112,179)",
size: 12,
line: {
color: "white"
},
opacity: 0.7
},
cliponaxis: false
},
{
type: "scatterpolargl",
r: unpack(rows, "trial_4_r"),
theta: unpack(rows, "trial_4_theta"),
mode: "markers",
name: "Trial 4",
marker: {
color: "rgb(231,41,138)",
size: 22,
line: {
color: "white"
},
opacity: 0.7
},
cliponaxis: false
},
{
type: "scatterpolargl",
r: unpack(rows, "trial_5_r"),
theta: unpack(rows, "trial_5_theta"),
mode: "markers",
name: "Trial 5",
marker: {
color: "rgb(102,166,30)",
size: 19,
line: {
color: "white"
},
opacity: 0.7
},
cliponaxis: false
},
{
type: "scatterpolargl",
r: unpack(rows, "trial_6_r"),
theta: unpack(rows, "trial_6_theta"),
mode: "markers",
name: "Trial 6",
marker: {
color: "rgb(230,171,2)",
size: 10,
line: {
color: "white"
},
opacity: 0.7
},
cliponaxis: false
}
]
var layout = {
title: {
text: "Hobbs-Pearson Trials"
},
font: {
size: 15
},
showlegend: false,
polar: {
bgcolor: "rgb(223, 223, 223)",
angularaxis: {
tickwidth: 2,
linewidth: 3,
layer: "below traces"
},
radialaxis: {
side: "counterclockwise",
showline: true,
linewidth: 2,
tickwidth: 2,
gridcolor: "white",
gridwidth: 2
}
},
paper_bgcolor: "rgb(223, 223, 223)",
}
Plotly.newPlot('myDiv', data, layout);
})
Click to copy