Этот коммит содержится в:
Maarten 2024-10-05 19:45:42 +02:00
родитель 09891a8959
Коммит 746899987e
4 изменённых файлов: 21 добавлений и 17 удалений

Просмотреть файл

@ -1,6 +1,5 @@
<script> <script>
import { scaleUtc, scalePoint, scaleOrdinal, scaleLinear, scaleTime } from 'd3-scale'; import { scaleUtc, scalePoint, scaleOrdinal, scaleLinear, scaleTime } from 'd3-scale';
import { extent } from 'd3-array';
import { utcFormat } from 'd3-time-format'; import { utcFormat } from 'd3-time-format';
import { area, stack, curveNatural } from 'd3-shape'; import { area, stack, curveNatural } from 'd3-shape';
import { max, union, index } from 'd3-array'; import { max, union, index } from 'd3-array';
@ -24,9 +23,10 @@
let width; let width;
let height = 200; let height = 200;
$: xScale = scaleTime($timeRangeFilter, [0, width - margins.right - margins.left]); $: xScale = scaleTime($timeRangeFilter, [0, width - margins.right - margins.left]);
$: opacityScale = scaleLinear()
.domain([0, max(cases.map(d => d.attribution_total_score))])
.range([0.2, 1])
$: ticks = xScale.ticks(5); $: ticks = xScale.ticks(5);
const actorNations = ['Key event', 'China', 'Iran', 'North Korea', 'Russia']; const actorNations = ['Key event', 'China', 'Iran', 'North Korea', 'Russia'];
@ -76,8 +76,8 @@
y1={yScale(nation)} y1={yScale(nation)}
y2={yScale(nation)} y2={yScale(nation)}
style:stroke={colorScale(nation)} style:stroke={colorScale(nation)}
stroke-width={2} stroke-width={32}
opacity={0.3} opacity={0.1}
></line> ></line>
<text <text
class="country-label" class="country-label"
@ -114,6 +114,7 @@
stroke={'#ffffff'} stroke={'#ffffff'}
stroke-width={2} stroke-width={2}
ttContent={`<p class="countryname">${attrCase.Short_Title}</p>`} ttContent={`<p class="countryname">${attrCase.Short_Title}</p>`}
opacity={opacityScale(attrCase.attribution_total_score)}
bind:tooltipContent bind:tooltipContent
bind:tooltipX bind:tooltipX
bind:tooltipY bind:tooltipY

Просмотреть файл

@ -1,25 +1,24 @@
import { timeScale, attributionScoreScale} from '../../stores/scales'; /*import { timeScale, attributionScoreScale} from '../../stores/scales';
import { import {
usaRed, usaRed,
polBlue, polBlue,
polPurple, polPurple,
polRed } from '$lib/utils/colors'; polRed } from '$lib/utils/colors';
import { scaleTime, scaleLinear } from 'd3-scale'; import { scaleTime, scaleLinear } from 'd3-scale';
import { max } from 'd3-array' import { getTimeRange } from './misc';
//import { getTimeRange } from './misc';
// sets all the basic scales // sets all the basic scales
export const setScales = (data, width, margin) => { export const setScales = (data, width, margin, maxAttribution) => {
if (!data) return; if (!data) return;
// time scale // time scale
/*timeScale.set(scaleTime() timeScale.set(scaleTime()
.domain(getTimeRange(data)) .domain(getTimeRange(data))
.range([margin.left, width - margin.right]));*/ .range([margin.left, width - margin.right]));
// attribution score scale // attribution score scale
attributionScoreScale.set(scaleLinear() attributionScoreScale.set(scaleLinear()
.domain([-1, 1.1 * max(data, (d) => d.attributionScore)]) .domain([0, maxAttribution])
.range(['#FFFFFF', usaRed])); .range([0.2, 1]));
}; };*/

Просмотреть файл

@ -2,6 +2,7 @@
import copy from '../data/copy.json'; import copy from '../data/copy.json';
import { onMount } from 'svelte'; import { onMount } from 'svelte';
import { csv } from 'd3-fetch'; import { csv } from 'd3-fetch';
import { max } from 'd3-array';
import { base } from '$app/paths'; import { base } from '$app/paths';
import CaseCard from '$lib/components/CaseCard.svelte'; import CaseCard from '$lib/components/CaseCard.svelte';
import CaseTable from '$lib/components/CaseTable.svelte'; import CaseTable from '$lib/components/CaseTable.svelte';
@ -10,7 +11,7 @@
import Controls from '$lib/components/Controls.svelte'; import Controls from '$lib/components/Controls.svelte';
import AnimatedFilterIcon from '$lib/components/AnimatedFilterIcon.svelte'; import AnimatedFilterIcon from '$lib/components/AnimatedFilterIcon.svelte';
import { splitString, haveOverlap, withinRange, includesTextSearch } from '$lib/utils/misc' import { splitString, haveOverlap, withinRange, includesTextSearch } from '$lib/utils/misc'
import { setScales } from '$lib/utils/scales'; //import { setScales } from '$lib/utils/scales';
import { extent } from 'd3-array'; import { extent } from 'd3-array';
import { import {
@ -33,6 +34,7 @@
let cases = []; let cases = [];
let events = []; let events = [];
let metrics = []; let metrics = [];
let maxAttribution = 0;
onMount(async function () { onMount(async function () {
const response = await csv(`https://fiat-2024-processed-data.s3.us-west-2.amazonaws.com/Demo_Attribution_Data.csv`); const response = await csv(`https://fiat-2024-processed-data.s3.us-west-2.amazonaws.com/Demo_Attribution_Data.csv`);
@ -51,6 +53,8 @@
d.show = false d.show = false
}) })
maxAttribution = max(cases.map(d => d.attribution_total_score))
platformFilter.init(cases, 'platform'); platformFilter.init(cases, 'platform');
actorNationFilter.init(cases, 'actor_nation'); actorNationFilter.init(cases, 'actor_nation');
sourceFilter.init(cases, 'source') sourceFilter.init(cases, 'source')
@ -104,7 +108,7 @@
} }
// set the scales // set the scales
$: setScales(cases, width, margin); //$: setScales(cases, width, margin);
let sidebarOpen = false; let sidebarOpen = false;

Просмотреть файл

@ -1,6 +1,6 @@
import { writable, readable } from 'svelte/store'; import { writable, readable } from 'svelte/store';
export const timeScale = writable(); export const timeScale = writable();
export const attributionScoreScale = writable(); //export const attributionScoreScale = writable();
//export const scaleFactor = readable(window.devicePixelRatio || 1); //export const scaleFactor = readable(window.devicePixelRatio || 1);