makeChart4 = (dataset) => {
const w = 600;
const h = dataset.length * 24;
const chart4Svg = d3.create("svg")
.attr('width', w)
.attr('height', h);
const minDownloads = d3.min(dataset, (d) => d.downloads);
const maxDownloads = d3.max(dataset, (d) => d.downloads);
const minRatings = d3.min(dataset, (d) => d.average_rating);
const maxRatings = d3.max(dataset, (d) => d.average_rating);
const xScale = d3
.scaleLinear()
.domain([0, maxDownloads])
.range([0, w - 100]);
const yScale = d3
.scaleLinear()
.domain([4.5, maxRatings])
.range([h - 20, 20]);
const rScale = d3
.scaleSqrt()
.domain([4.5, maxRatings])
.range([5,15]);
chart4Svg
.selectAll("circle")
.data(dataset)
.join("circle")
.attr("cx", (d) => xScale(d.downloads))
.attr("cy", (d) => yScale(d.average_rating))
.attr("r", (d) => rScale(d.average_rating))
.attr("transform", `translate(70,0)`)
.attr("fill", "orange");
chart4Svg
.selectAll("text")
.data(dataset)
.join("text")
.attr("x", (d) => xScale(d.downloads))
.attr("y", (d) => yScale(d.average_rating) - 10)
.text((d) => `${d.app_name}`)
.attr("transform", `translate(70,0)`)
.style("text-anchor", "middle")
.style("font-size", "8px");
chart4Svg
.append("g")
.attr("class", "axis")
.attr("transform", `translate(80, ${h - 18})`)
.call(d3.axisBottom(xScale));
chart4Svg
.append("g")
.attr("class", "axis")
.attr("transform", `translate(70,0)`)
.call(d3.axisLeft(yScale).tickSize(0));
return chart4Svg.node();
}