Opacity scale
Этот коммит содержится в:
родитель
09891a8959
Коммит
746899987e
@ -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);
|
||||||
Загрузка…
x
Ссылка в новой задаче
Block a user