plot = {
let svg = d3.create('svg').attr('width', width).attr('height', total_height)
let central_plot = svg.append('g').attr('transform', `translate(${margin},${margin})`)
let x_loading_g = central_plot.append('g')
.attr('transform', `translate(0,${plot_size})`)
let y_loading_g = central_plot.append('g')
.attr('transform', `translate(${plot_size},0)`)
let scatterplot_g = central_plot.append('g')
let cluster_g = central_plot.append('g')
.attr('transform', `translate(0,${plot_size+2*attribute_pad+loading_size+2*margin})`)
x_loading_g.append('rect')
.attr('width', plot_size).attr('height', loading_size)
.attr('fill', 'none').attr('stroke', d3.hcl(0,0,30)).attr('stroke-width', .8)
y_loading_g.append('rect')
.attr('width', loading_size).attr('height', plot_size)
.attr('fill', 'none').attr('stroke', d3.hcl(0,0,30)).attr('stroke-width', .8)
scatterplot_g.append('rect')
.attr('width', plot_size).attr('height', plot_size)
.attr('fill', 'none').attr('stroke', d3.hcl(0,0,30)).attr('stroke-width', .8)
cluster_g.append('rect')
.attr('width', plot_size).attr('height', clustering_size)
.attr('fill', 'none').attr('stroke', d3.hcl(0,0,30)).attr('stroke-width', .8)
create_scatterplot(scatterplot_g)
create_x_loading(x_loading_g)
create_y_loading(y_loading_g)
create_clustering(cluster_g)
return svg.node()
}