From a9c3d9543725c239dcf1365cb3f3c8482b29c9fd Mon Sep 17 00:00:00 2001 From: Jan Diehm Date: Mon, 23 Sep 2024 17:17:28 -0500 Subject: [PATCH] adds scatter plots --- package-lock.json | 6 + package.json | 1 + src/components/Distribution.svelte | 3 - src/components/Index.svelte | 87 ++++++------ src/components/Scatter.svelte | 147 ++++++++++++++++++++ src/components/layercake/AxisX.svg.svelte | 9 +- src/components/layercake/AxisY.svg.svelte | 3 +- src/components/layercake/Line.svelte | 3 +- src/components/layercake/Scatter.svg.svelte | 30 +++- src/styles/reset.css | 6 +- 10 files changed, 241 insertions(+), 54 deletions(-) create mode 100644 src/components/Scatter.svelte diff --git a/package-lock.json b/package-lock.json index 0b8f0f5c..17c29268 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "dependencies": { "@leveluptuts/svelte-fit": "^1.0.3", "axios": "^1.6.7", + "d3-regression": "^1.3.10", "fs": "^0.0.1-security", "image-download": "^2.1.0", "image-downloader": "^4.3.0", @@ -1524,6 +1525,11 @@ "node": ">=12" } }, + "node_modules/d3-regression": { + "version": "1.3.10", + "resolved": "https://registry.npmjs.org/d3-regression/-/d3-regression-1.3.10.tgz", + "integrity": "sha512-PF8GWEL70cHHWpx2jUQXc68r1pyPHIA+St16muk/XRokETzlegj5LriNKg7o4LR0TySug4nHYPJNNRz/W+/Niw==" + }, "node_modules/d3-scale": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", diff --git a/package.json b/package.json index cad7507b..9e26f9ec 100644 --- a/package.json +++ b/package.json @@ -47,6 +47,7 @@ "dependencies": { "@leveluptuts/svelte-fit": "^1.0.3", "axios": "^1.6.7", + "d3-regression": "^1.3.10", "fs": "^0.0.1-security", "image-download": "^2.1.0", "image-downloader": "^4.3.0", diff --git a/src/components/Distribution.svelte b/src/components/Distribution.svelte index d0e33a06..3ada30cb 100644 --- a/src/components/Distribution.svelte +++ b/src/components/Distribution.svelte @@ -12,8 +12,6 @@ export let data; - $: console.log({data}) - data.forEach(d => { d[yKey] = +d[yKey]; d[yKey] = +d[yKey]; @@ -34,7 +32,6 @@ const allWineData = findMatch("all", groupedData) const onlyAnimalWineData = findMatch("animal wine", groupedData) - console.log(onlyAnimalWineData) const lineData = allWineData; const endObj = {animalGroup: "end", category: "end", bucket: "end", percent: 0, count: 0}; diff --git a/src/components/Index.svelte b/src/components/Index.svelte index 5b43ff9f..c3925764 100644 --- a/src/components/Index.svelte +++ b/src/components/Index.svelte @@ -2,56 +2,61 @@ import { getContext } from "svelte"; import { animalSelect, metricSelect } from "$stores/misc.js"; import Intro from "$components/Intro.svelte"; - // import PhotoTest from "$components/PhotoTest.svelte"; - // import Distribution from "$components/Distribution.svelte"; - // import Select from "$components/helpers/Select.svelte"; + import PhotoTest from "$components/PhotoTest.svelte"; + import Distribution from "$components/Distribution.svelte"; + import Scatter from "$components/Scatter.svelte"; + import Select from "$components/helpers/Select.svelte"; - // import wineData_summary from "$data/wineData_summary.csv"; - // import wineData_catSummary from "$data/wineData_catSummary.csv"; - // import wineData_birdSummary from "$data/wineData_birdSummary.csv"; - // import WIP from "$components/helpers/WIP.svelte"; - // import Footer from "$components/Footer.svelte"; + import allWineData from "$data/wineData.csv" + import wineData_summary from "$data/wineData_summary.csv"; + import wineData_catSummary from "$data/wineData_catSummary.csv"; + import wineData_birdSummary from "$data/wineData_birdSummary.csv"; + import WIP from "$components/helpers/WIP.svelte"; + import Footer from "$components/Footer.svelte"; - // const copy = getContext("copy"); - // const data = getContext("data"); + const copy = getContext("copy"); + const data = getContext("data"); - // let optionsMetric = ["price", "rating"]; - // let optionsAnimal = ["all", "cats", "birds"]; + let optionsMetric = ["price", "rating"]; + let optionsAnimal = ["all", "cats", "birds"]; - // function setData($animalSelect, $metricSelect) { - // if ($animalSelect == "birds") { - // if ($metricSelect == "price") { - // return wineData_birdSummary.filter((d) => d.category == "price"); - // } else if ($metricSelect == "rating") { - // return wineData_birdSummary.filter((d) => d.category == "rating"); - // } - // } else if ($animalSelect == "cats") { - // if ($metricSelect == "price") { - // return wineData_catSummary.filter((d) => d.category == "price"); - // } else if ($metricSelect == "rating") { - // return wineData_catSummary.filter((d) => d.category == "rating"); - // } - // } else { - // if ($metricSelect == "price") { - // return wineData_summary.filter((d) => d.category == "price"); - // } else if ($metricSelect == "rating") { - // return wineData_summary.filter((d) => d.category == "rating"); - // } - // } - // } + function setData($animalSelect, $metricSelect) { + if ($animalSelect == "birds") { + if ($metricSelect == "price") { + return wineData_birdSummary.filter((d) => d.category == "price"); + } else if ($metricSelect == "rating") { + return wineData_birdSummary.filter((d) => d.category == "rating"); + } + } else if ($animalSelect == "cats") { + if ($metricSelect == "price") { + return wineData_catSummary.filter((d) => d.category == "price"); + } else if ($metricSelect == "rating") { + return wineData_catSummary.filter((d) => d.category == "rating"); + } + } else { + if ($metricSelect == "price") { + return wineData_summary.filter((d) => d.category == "price"); + } else if ($metricSelect == "rating") { + return wineData_summary.filter((d) => d.category == "rating"); + } + } + } - // $: dataSet = setData($animalSelect, $metricSelect) + $: dataSet = setData($animalSelect, $metricSelect) // $: dataSet = $animalSelect == "all" // ? wineData_summary // : $animalSelect == "cats" // ? wineData_catSummary // : wineData_birdSummary; - - // $: console.log(dataSet) - - + + + - + \ No newline at end of file diff --git a/src/components/layercake/AxisX.svg.svelte b/src/components/layercake/AxisX.svg.svelte index 1a459db4..948972c6 100644 --- a/src/components/layercake/AxisX.svg.svelte +++ b/src/components/layercake/AxisX.svg.svelte @@ -45,14 +45,14 @@ transform="translate({tickCheck(tick, i, $width)},{$yRange[0]})" > {#if gridlines !== false} - + {/if} {#if tickMarks === true} {/if} - + > {/each} {#if baseline === true} @@ -75,11 +75,12 @@ line, .tick line { stroke: var(--color-gray-300); - stroke-dasharray: 2; + stroke-dasharray: 2px 2px; } .tick text { fill: var(--color-gray-600); + font-family: var(--sans); } .tick .tick-mark, diff --git a/src/components/layercake/AxisY.svg.svelte b/src/components/layercake/AxisY.svg.svelte index 1fc6c6bc..41f02035 100644 --- a/src/components/layercake/AxisY.svg.svelte +++ b/src/components/layercake/AxisY.svg.svelte @@ -54,10 +54,11 @@ stroke: var(--color-gray-300); } .tick .gridline { - stroke-dasharray: 4px 4px; + stroke-dasharray: 2px 2px; } .tick text { fill: var(--color-gray-600); + font-family: var(--sans); } diff --git a/src/components/layercake/Line.svelte b/src/components/layercake/Line.svelte index 965cb22b..e537a146 100644 --- a/src/components/layercake/Line.svelte +++ b/src/components/layercake/Line.svelte @@ -2,13 +2,12 @@ import { getContext } from "svelte"; import { line, curveLinear, curveStepAfter } from "d3"; - const { data, xGet, yGet } = getContext("LayerCake"); + const { data, xGet, yGet, xScale, } = getContext("LayerCake"); export let stroke = "#000000"; export let curve = curveStepAfter; - $: path = line().x($xGet).y($yGet).curve(curve); $: pathD = path($data); diff --git a/src/components/layercake/Scatter.svg.svelte b/src/components/layercake/Scatter.svg.svelte index a443950d..cd2fe6f5 100644 --- a/src/components/layercake/Scatter.svg.svelte +++ b/src/components/layercake/Scatter.svg.svelte @@ -1,5 +1,6 @@ - {#each $data as d} + {#each $data[0] as d} {@const cx = $xGet(d)} {@const cy = $yGet(d)} {/each} + + d.price))} x2={500} y2={$yScale(d3.mean($data[0], d => d.price))} /> + d.rating))} y1={0} x2={$xScale(d3.mean($data[0], d => d.rating))} y2={500} /> + + + + diff --git a/src/styles/reset.css b/src/styles/reset.css index 04767f6b..9e7ab866 100644 --- a/src/styles/reset.css +++ b/src/styles/reset.css @@ -1,7 +1,9 @@ body { - background-color: var(--wine-black, #181A1F); - color: var(--wine-tan, #CFCABF); + /* background-color: var(--wine-black, #181A1F); */ + background-color: white; + /* color: var(--wine-tan, #CFCABF); */ + color: black; line-height: 1.4; font-family: var(--font-body, serif); font-feature-settings: 'kern' 1, 'onum' 0, 'liga' 0, 'tnum' 1;