google trends chart implemented
Этот коммит содержится в:
родитель
8cbebef259
Коммит
3da173a248
@ -5,6 +5,7 @@
|
|||||||
import { margin } from '../stores/dimensions';
|
import { margin } from '../stores/dimensions';
|
||||||
|
|
||||||
import CoronaChart from './CoronaChart.svelte';
|
import CoronaChart from './CoronaChart.svelte';
|
||||||
|
import GoogleTrendsChart from './GoogleTrendsChart.svelte';
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<g class="background-chart">
|
<g class="background-chart">
|
||||||
@ -14,6 +15,11 @@
|
|||||||
margin={$margin}
|
margin={$margin}
|
||||||
showLegend={!$originalTimeDomain} />
|
showLegend={!$originalTimeDomain} />
|
||||||
{/if}
|
{/if}
|
||||||
|
{#if (/^gt_/.test(dataset.id))}
|
||||||
|
<GoogleTrendsChart data={dataset.data}
|
||||||
|
margin={$margin}
|
||||||
|
showLegend={!$originalTimeDomain} />
|
||||||
|
{/if}
|
||||||
{/each}
|
{/each}
|
||||||
</g>
|
</g>
|
||||||
|
|
||||||
|
|||||||
@ -25,7 +25,7 @@
|
|||||||
|
|
||||||
$: if (data) {
|
$: if (data) {
|
||||||
yScale = scaleLog()
|
yScale = scaleLog()
|
||||||
.domain([1, max(data.map((d) => d.cases))])
|
.domain([1, max(data, (d) => d.cases)])
|
||||||
.range([$panelHeight - margin.bottom, margin.top * 0.7]);
|
.range([$panelHeight - margin.bottom, margin.top * 0.7]);
|
||||||
|
|
||||||
area = (type, data) => d3area()
|
area = (type, data) => d3area()
|
||||||
|
|||||||
80
src/components/GoogleTrendsChart.svelte
Обычный файл
80
src/components/GoogleTrendsChart.svelte
Обычный файл
@ -0,0 +1,80 @@
|
|||||||
|
<script>
|
||||||
|
// chart with GoogleTrends data
|
||||||
|
import { timeScale } from '../stores/scales';
|
||||||
|
import { panelHeight } from '../stores/dimensions';
|
||||||
|
import { fade } from 'svelte/transition';
|
||||||
|
import {
|
||||||
|
scaleLinear,
|
||||||
|
max,
|
||||||
|
area as d3area,
|
||||||
|
format,
|
||||||
|
curveBasis } from 'd3';
|
||||||
|
|
||||||
|
export let data;
|
||||||
|
export let margin = {
|
||||||
|
top: 100,
|
||||||
|
right: 20,
|
||||||
|
bottom: 0,
|
||||||
|
left: 20
|
||||||
|
};
|
||||||
|
export let showLegend = true;
|
||||||
|
|
||||||
|
const commaFormat = format(',');
|
||||||
|
|
||||||
|
let xScale, yScale, area, ticks;
|
||||||
|
let casesPath, deathsPath;
|
||||||
|
|
||||||
|
$: if (data) {
|
||||||
|
yScale = scaleLinear()
|
||||||
|
.domain([0, max(data, (d) => d.value)])
|
||||||
|
.range([$panelHeight - margin.bottom, margin.top * 0.7]);
|
||||||
|
|
||||||
|
area = d3area()
|
||||||
|
.x((d) => $timeScale(d.date))
|
||||||
|
.y0(yScale(0))
|
||||||
|
.y1((d) => yScale(d.value))
|
||||||
|
.curve(curveBasis);
|
||||||
|
|
||||||
|
ticks = yScale.ticks(5).slice(1);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{#if (data)}
|
||||||
|
<g class="google-trends-chart"
|
||||||
|
transition:fade={{duration: 200}}>
|
||||||
|
<g class="area">
|
||||||
|
<path d={area(data)}></path>
|
||||||
|
</g>
|
||||||
|
<!-- {#if (showLegend)}
|
||||||
|
<g class="ticks"
|
||||||
|
transform="translate({$timeScale(data.slice(-1)[0].date) + 5} 0)">
|
||||||
|
{#each ticks as tick}
|
||||||
|
<g class="tick"
|
||||||
|
transform="translate(0 {yScale(tick)})">
|
||||||
|
<rect x="0" y="-12" width="25" height="15"></rect>
|
||||||
|
<text>{commaFormat(tick)}</text>
|
||||||
|
</g>
|
||||||
|
{/each}
|
||||||
|
</g>
|
||||||
|
{/if} -->
|
||||||
|
</g>
|
||||||
|
{/if}
|
||||||
|
|
||||||
|
<style>
|
||||||
|
path {
|
||||||
|
stroke: none;
|
||||||
|
opacity: 0.2;
|
||||||
|
fill: var(--usa-blue);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* .tick rect {
|
||||||
|
fill: var(--bg);
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tick text {
|
||||||
|
font-family: var(--font-02);
|
||||||
|
font-size: 0.6rem;
|
||||||
|
fill: var(--dfrlab-silver);
|
||||||
|
} */
|
||||||
|
</style>
|
||||||
@ -108,8 +108,6 @@
|
|||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
console.log($contextData[1].data)
|
|
||||||
|
|
||||||
preloadImages(data);
|
preloadImages(data);
|
||||||
|
|
||||||
// apply filters from URL
|
// apply filters from URL
|
||||||
|
|||||||
@ -2,7 +2,11 @@ import { googleTrendsApiPath } from '../inputs/dataPaths';
|
|||||||
|
|
||||||
const loadGoogleTrendsData = async (keyword) => {
|
const loadGoogleTrendsData = async (keyword) => {
|
||||||
const response = await fetch(`${googleTrendsApiPath}${encodeURIComponent(keyword)}`);
|
const response = await fetch(`${googleTrendsApiPath}${encodeURIComponent(keyword)}`);
|
||||||
return(response.json());
|
const data = (await response.json()).map((d) => ({
|
||||||
|
...d,
|
||||||
|
date: new Date(d.time * 1000)
|
||||||
|
}));
|
||||||
|
return(data);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default loadGoogleTrendsData;
|
export default loadGoogleTrendsData;
|
||||||
|
|||||||
Загрузка…
x
Ссылка в новой задаче
Block a user