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
	 Maarten
						Maarten