reusable scatterplot component