From f4f50797260efb2bd376d8cf9f8cd26c8ae071c6 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Fri, 5 Jan 2024 18:41:14 -0500 Subject: [PATCH 01/11] Vertex is 2D --- sg2d-wgpu/src/marks/circle.wgsl | 2 +- sg2d-wgpu/src/marks/polygon_symbol.wgsl | 2 +- sg2d-wgpu/src/marks/rect.rs | 8 ++++---- sg2d-wgpu/src/marks/rect.wgsl | 2 +- sg2d-wgpu/src/marks/rule.rs | 8 ++++---- sg2d-wgpu/src/marks/rule.wgsl | 2 +- sg2d-wgpu/src/marks/symbol.rs | 10 +++++----- sg2d-wgpu/src/vertex.rs | 4 ++-- 8 files changed, 19 insertions(+), 19 deletions(-) diff --git a/sg2d-wgpu/src/marks/circle.wgsl b/sg2d-wgpu/src/marks/circle.wgsl index 1167432..b570a07 100644 --- a/sg2d-wgpu/src/marks/circle.wgsl +++ b/sg2d-wgpu/src/marks/circle.wgsl @@ -8,7 +8,7 @@ struct ChartUniform { var chart_uniforms: ChartUniform; struct VertexInput { - @location(0) position: vec3, + @location(0) position: vec2, }; struct InstanceInput { diff --git a/sg2d-wgpu/src/marks/polygon_symbol.wgsl b/sg2d-wgpu/src/marks/polygon_symbol.wgsl index c5dcb97..9019572 100644 --- a/sg2d-wgpu/src/marks/polygon_symbol.wgsl +++ b/sg2d-wgpu/src/marks/polygon_symbol.wgsl @@ -8,7 +8,7 @@ struct ChartUniform { var chart_uniforms: ChartUniform; struct VertexInput { - @location(0) position: vec3, + @location(0) position: vec2, }; struct InstanceInput { diff --git a/sg2d-wgpu/src/marks/rect.rs b/sg2d-wgpu/src/marks/rect.rs index 93f17eb..052fe09 100644 --- a/sg2d-wgpu/src/marks/rect.rs +++ b/sg2d-wgpu/src/marks/rect.rs @@ -49,16 +49,16 @@ impl RectShader { Self { verts: vec![ Vertex { - position: [0.0, 0.0, 0.0], + position: [0.0, 0.0], }, Vertex { - position: [1.0, 0.0, 0.0], + position: [1.0, 0.0], }, Vertex { - position: [1.0, 1.0, 0.0], + position: [1.0, 1.0], }, Vertex { - position: [0.0, 1.0, 0.0], + position: [0.0, 1.0], }, ], indices: vec![0, 1, 2, 0, 2, 3], diff --git a/sg2d-wgpu/src/marks/rect.wgsl b/sg2d-wgpu/src/marks/rect.wgsl index d911f23..f701d7d 100644 --- a/sg2d-wgpu/src/marks/rect.wgsl +++ b/sg2d-wgpu/src/marks/rect.wgsl @@ -8,7 +8,7 @@ struct ChartUniform { var chart_uniforms: ChartUniform; struct VertexInput { - @location(0) position: vec3, + @location(0) position: vec2, }; struct InstanceInput { diff --git a/sg2d-wgpu/src/marks/rule.rs b/sg2d-wgpu/src/marks/rule.rs index 31aca3e..b44f274 100644 --- a/sg2d-wgpu/src/marks/rule.rs +++ b/sg2d-wgpu/src/marks/rule.rs @@ -54,16 +54,16 @@ impl RuleShader { Self { verts: vec![ Vertex { - position: [-0.5, 0.5, 0.0], + position: [-0.5, 0.5], }, Vertex { - position: [-0.5, -0.5, 0.0], + position: [-0.5, -0.5], }, Vertex { - position: [0.5, -0.5, 0.0], + position: [0.5, -0.5], }, Vertex { - position: [0.5, 0.5, 0.0], + position: [0.5, 0.5], }, ], indices: vec![0, 1, 2, 0, 2, 3], diff --git a/sg2d-wgpu/src/marks/rule.wgsl b/sg2d-wgpu/src/marks/rule.wgsl index 6c7a032..453b19f 100644 --- a/sg2d-wgpu/src/marks/rule.wgsl +++ b/sg2d-wgpu/src/marks/rule.wgsl @@ -8,7 +8,7 @@ struct ChartUniform { var chart_uniforms: ChartUniform; struct VertexInput { - @location(0) position: vec3, + @location(0) position: vec2, }; struct InstanceInput { diff --git a/sg2d-wgpu/src/marks/symbol.rs b/sg2d-wgpu/src/marks/symbol.rs index fa5b954..cbc0670 100644 --- a/sg2d-wgpu/src/marks/symbol.rs +++ b/sg2d-wgpu/src/marks/symbol.rs @@ -46,16 +46,16 @@ impl SymbolShader { Self { verts: vec![ Vertex { - position: [r, -r, 0.0], + position: [r, -r], }, Vertex { - position: [r, r, 0.0], + position: [r, r], }, Vertex { - position: [-r, r, 0.0], + position: [-r, r], }, Vertex { - position: [-r, -r, 0.0], + position: [-r, -r], }, ], indices: vec![0, 1, 2, 0, 2, 3], @@ -77,7 +77,7 @@ impl SymbolShader { .vertices .iter() .map(|v| Vertex { - position: [v.x, -v.y, 0.0], + position: [v.x, -v.y], }) .collect::>(); Self { diff --git a/sg2d-wgpu/src/vertex.rs b/sg2d-wgpu/src/vertex.rs index 914abc0..5c61b5b 100644 --- a/sg2d-wgpu/src/vertex.rs +++ b/sg2d-wgpu/src/vertex.rs @@ -1,7 +1,7 @@ #[repr(C)] #[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] pub struct Vertex { - pub position: [f32; 3], + pub position: [f32; 2], } impl Vertex { @@ -12,7 +12,7 @@ impl Vertex { attributes: &[wgpu::VertexAttribute { offset: 0, shader_location: 0, - format: wgpu::VertexFormat::Float32x3, + format: wgpu::VertexFormat::Float32x2, }], } } From 1b1252cdea5153bbddc021c2ec2b404cedaebbd0 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Fri, 5 Jan 2024 19:11:49 -0500 Subject: [PATCH 02/11] Use vertex_attr_array! macro --- sg2d-wgpu/src/marks/rect.rs | 30 ++++++---------------- sg2d-wgpu/src/marks/rule.rs | 48 ++++++++--------------------------- sg2d-wgpu/src/marks/symbol.rs | 24 +++++------------- 3 files changed, 25 insertions(+), 77 deletions(-) diff --git a/sg2d-wgpu/src/marks/rect.rs b/sg2d-wgpu/src/marks/rect.rs index 052fe09..17d47e5 100644 --- a/sg2d-wgpu/src/marks/rect.rs +++ b/sg2d-wgpu/src/marks/rect.rs @@ -12,6 +12,13 @@ pub struct RectInstance { pub height: f32, } +const INSTANCE_ATTRIBUTES: [wgpu::VertexAttribute; 4] = wgpu::vertex_attr_array![ + 1 => Float32x2, // position + 2 => Float32x3, // color + 3 => Float32, // width + 4 => Float32, // height +]; + impl RectInstance { pub fn iter_from_spec(mark: &RectMark) -> impl Iterator + '_ { izip!( @@ -96,28 +103,7 @@ impl MarkShader for RectShader { wgpu::VertexBufferLayout { array_stride: std::mem::size_of::() as wgpu::BufferAddress, step_mode: wgpu::VertexStepMode::Instance, - attributes: &[ - wgpu::VertexAttribute { - offset: 0, - shader_location: 1, - format: wgpu::VertexFormat::Float32x2, - }, - wgpu::VertexAttribute { - offset: std::mem::size_of::<[f32; 2]>() as wgpu::BufferAddress, - shader_location: 2, - format: wgpu::VertexFormat::Float32x3, - }, - wgpu::VertexAttribute { - offset: std::mem::size_of::<[f32; 5]>() as wgpu::BufferAddress, - shader_location: 3, - format: wgpu::VertexFormat::Float32, - }, - wgpu::VertexAttribute { - offset: std::mem::size_of::<[f32; 6]>() as wgpu::BufferAddress, - shader_location: 4, - format: wgpu::VertexFormat::Float32, - }, - ], + attributes: &INSTANCE_ATTRIBUTES, } } } diff --git a/sg2d-wgpu/src/marks/rule.rs b/sg2d-wgpu/src/marks/rule.rs index b44f274..021fbfa 100644 --- a/sg2d-wgpu/src/marks/rule.rs +++ b/sg2d-wgpu/src/marks/rule.rs @@ -14,6 +14,15 @@ pub struct RuleInstance { pub stroke_width: f32, } +const INSTANCE_ATTRIBUTES: [wgpu::VertexAttribute; 6] = wgpu::vertex_attr_array![ + 1 => Float32, // x0 + 2 => Float32, // y0 + 3 => Float32, // x1 + 4 => Float32, // y1 + 5 => Float32x3, // stroke + 6 => Float32, // stroke_width +]; + impl RuleInstance { pub fn iter_from_spec(mark: &RuleMark) -> impl Iterator + '_ { izip!( @@ -101,44 +110,7 @@ impl MarkShader for RuleShader { wgpu::VertexBufferLayout { array_stride: std::mem::size_of::() as wgpu::BufferAddress, step_mode: wgpu::VertexStepMode::Instance, - attributes: &[ - // x0 - wgpu::VertexAttribute { - offset: 0, - shader_location: 1, - format: wgpu::VertexFormat::Float32, - }, - // y0 - wgpu::VertexAttribute { - offset: std::mem::size_of::<[f32; 1]>() as wgpu::BufferAddress, - shader_location: 2, - format: wgpu::VertexFormat::Float32, - }, - //x1 - wgpu::VertexAttribute { - offset: std::mem::size_of::<[f32; 2]>() as wgpu::BufferAddress, - shader_location: 3, - format: wgpu::VertexFormat::Float32, - }, - //y1 - wgpu::VertexAttribute { - offset: std::mem::size_of::<[f32; 3]>() as wgpu::BufferAddress, - shader_location: 4, - format: wgpu::VertexFormat::Float32, - }, - // stroke - wgpu::VertexAttribute { - offset: std::mem::size_of::<[f32; 4]>() as wgpu::BufferAddress, - shader_location: 5, - format: wgpu::VertexFormat::Float32x3, - }, - // stroke_width - wgpu::VertexAttribute { - offset: std::mem::size_of::<[f32; 7]>() as wgpu::BufferAddress, - shader_location: 6, - format: wgpu::VertexFormat::Float32, - }, - ], + attributes: &INSTANCE_ATTRIBUTES, } } } diff --git a/sg2d-wgpu/src/marks/symbol.rs b/sg2d-wgpu/src/marks/symbol.rs index cbc0670..ede0df3 100644 --- a/sg2d-wgpu/src/marks/symbol.rs +++ b/sg2d-wgpu/src/marks/symbol.rs @@ -14,6 +14,12 @@ pub struct SymbolInstance { pub size: f32, } +const INSTANCE_ATTRIBUTES: [wgpu::VertexAttribute; 3] = wgpu::vertex_attr_array![ + 1 => Float32x2, // position + 2 => Float32x3, // color + 3 => Float32, // size +]; + impl SymbolInstance { pub fn iter_from_spec(mark: &SymbolMark) -> impl Iterator + '_ { izip!( @@ -119,23 +125,7 @@ impl MarkShader for SymbolShader { wgpu::VertexBufferLayout { array_stride: std::mem::size_of::() as wgpu::BufferAddress, step_mode: wgpu::VertexStepMode::Instance, - attributes: &[ - wgpu::VertexAttribute { - offset: 0, - shader_location: 1, - format: wgpu::VertexFormat::Float32x2, - }, - wgpu::VertexAttribute { - offset: std::mem::size_of::<[f32; 2]>() as wgpu::BufferAddress, - shader_location: 2, - format: wgpu::VertexFormat::Float32x3, - }, - wgpu::VertexAttribute { - offset: std::mem::size_of::<[f32; 5]>() as wgpu::BufferAddress, - shader_location: 3, - format: wgpu::VertexFormat::Float32, - }, - ], + attributes: &INSTANCE_ATTRIBUTES, } } } From 4442fd251c0da4811ee591d822ca006e1c709a1b Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Fri, 5 Jan 2024 19:33:50 -0500 Subject: [PATCH 03/11] specialize vertex type per mark --- sg2d-wgpu/src/lib.rs | 1 - sg2d-wgpu/src/marks/mark.rs | 20 +++++++++----- sg2d-wgpu/src/marks/rect.rs | 39 +++++++++++++++++++++----- sg2d-wgpu/src/marks/rule.rs | 39 +++++++++++++++++++++----- sg2d-wgpu/src/marks/symbol.rs | 52 ++++++++++++++++++++++++----------- sg2d-wgpu/src/vertex.rs | 19 ------------- 6 files changed, 113 insertions(+), 57 deletions(-) delete mode 100644 sg2d-wgpu/src/vertex.rs diff --git a/sg2d-wgpu/src/lib.rs b/sg2d-wgpu/src/lib.rs index 2de1719..f558a2f 100644 --- a/sg2d-wgpu/src/lib.rs +++ b/sg2d-wgpu/src/lib.rs @@ -1,7 +1,6 @@ pub mod canvas; pub mod error; pub mod marks; -pub mod vertex; use crate::canvas::{Canvas, WindowCanvas}; use sg2d::scene_graph::SceneGraph; diff --git a/sg2d-wgpu/src/marks/mark.rs b/sg2d-wgpu/src/marks/mark.rs index 1997a47..2e9f294 100644 --- a/sg2d-wgpu/src/marks/mark.rs +++ b/sg2d-wgpu/src/marks/mark.rs @@ -1,16 +1,18 @@ use crate::canvas::CanvasUniform; -use crate::vertex::Vertex; use wgpu::util::DeviceExt; use wgpu::{CommandBuffer, Device, TextureFormat, TextureView}; pub trait MarkShader { type Instance: bytemuck::Pod + bytemuck::Zeroable; - fn verts(&self) -> &[Vertex]; + type Vertex: bytemuck::Pod + bytemuck::Zeroable; + + fn verts(&self) -> &[Self::Vertex]; fn indices(&self) -> &[u16]; fn shader(&self) -> &str; fn vertex_entry_point(&self) -> &str; fn fragment_entry_point(&self) -> &str; fn instance_desc(&self) -> wgpu::VertexBufferLayout<'static>; + fn vertex_desc(&self) -> wgpu::VertexBufferLayout<'static>; } pub struct GeomMarkRenderer { @@ -24,14 +26,18 @@ pub struct GeomMarkRenderer { } impl GeomMarkRenderer { - pub fn new( + pub fn new( device: &Device, uniform: CanvasUniform, texture_format: TextureFormat, sample_count: u32, - mark_shader: Box>, - instances: &[T], - ) -> Self { + mark_shader: Box>, + instances: &[I], + ) -> Self + where + I: bytemuck::Pod + bytemuck::Zeroable, + V: bytemuck::Pod + bytemuck::Zeroable, + { // Uniforms let uniform_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { label: Some("Uniform Buffer"), @@ -88,7 +94,7 @@ impl GeomMarkRenderer { vertex: wgpu::VertexState { module: &shader, entry_point: mark_shader.vertex_entry_point(), - buffers: &[Vertex::desc(), mark_shader.instance_desc()], + buffers: &[mark_shader.vertex_desc(), mark_shader.instance_desc()], }, fragment: Some(wgpu::FragmentState { module: &shader, diff --git a/sg2d-wgpu/src/marks/rect.rs b/sg2d-wgpu/src/marks/rect.rs index 17d47e5..42f4ae7 100644 --- a/sg2d-wgpu/src/marks/rect.rs +++ b/sg2d-wgpu/src/marks/rect.rs @@ -1,7 +1,27 @@ use crate::marks::mark::MarkShader; -use crate::vertex::Vertex; use itertools::izip; use sg2d::marks::rect::RectMark; +use wgpu::VertexBufferLayout; + +#[repr(C)] +#[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] +pub struct RectVertex { + pub position: [f32; 2], +} + +const VERTEX_ATTRIBUTES: [wgpu::VertexAttribute; 1] = wgpu::vertex_attr_array![ + 0 => Float32x2, // position +]; + +impl RectVertex { + pub fn desc() -> VertexBufferLayout<'static> { + VertexBufferLayout { + array_stride: std::mem::size_of::() as wgpu::BufferAddress, + step_mode: wgpu::VertexStepMode::Vertex, + attributes: &VERTEX_ATTRIBUTES, + } + } +} #[repr(C)] #[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] @@ -38,7 +58,7 @@ impl RectInstance { } pub struct RectShader { - verts: Vec, + verts: Vec, indices: Vec, shader: String, vertex_entry_point: String, @@ -55,16 +75,16 @@ impl RectShader { pub fn new() -> Self { Self { verts: vec![ - Vertex { + RectVertex { position: [0.0, 0.0], }, - Vertex { + RectVertex { position: [1.0, 0.0], }, - Vertex { + RectVertex { position: [1.0, 1.0], }, - Vertex { + RectVertex { position: [0.0, 1.0], }, ], @@ -78,8 +98,9 @@ impl RectShader { impl MarkShader for RectShader { type Instance = RectInstance; + type Vertex = RectVertex; - fn verts(&self) -> &[Vertex] { + fn verts(&self) -> &[Self::Vertex] { self.verts.as_slice() } @@ -106,4 +127,8 @@ impl MarkShader for RectShader { attributes: &INSTANCE_ATTRIBUTES, } } + + fn vertex_desc(&self) -> VertexBufferLayout<'static> { + RectVertex::desc() + } } diff --git a/sg2d-wgpu/src/marks/rule.rs b/sg2d-wgpu/src/marks/rule.rs index 021fbfa..34e55b6 100644 --- a/sg2d-wgpu/src/marks/rule.rs +++ b/sg2d-wgpu/src/marks/rule.rs @@ -1,7 +1,27 @@ use crate::marks::mark::MarkShader; -use crate::vertex::Vertex; use itertools::izip; use sg2d::marks::rule::RuleMark; +use wgpu::VertexBufferLayout; + +#[repr(C)] +#[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] +pub struct RuleVertex { + pub position: [f32; 2], +} + +const VERTEX_ATTRIBUTES: [wgpu::VertexAttribute; 1] = wgpu::vertex_attr_array![ + 0 => Float32x2, // position +]; + +impl RuleVertex { + pub fn desc() -> VertexBufferLayout<'static> { + VertexBufferLayout { + array_stride: std::mem::size_of::() as wgpu::BufferAddress, + step_mode: wgpu::VertexStepMode::Vertex, + attributes: &VERTEX_ATTRIBUTES, + } + } +} #[repr(C)] #[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] @@ -45,7 +65,7 @@ impl RuleInstance { } pub struct RuleShader { - verts: Vec, + verts: Vec, indices: Vec, shader: String, vertex_entry_point: String, @@ -62,16 +82,16 @@ impl RuleShader { pub fn new() -> Self { Self { verts: vec![ - Vertex { + RuleVertex { position: [-0.5, 0.5], }, - Vertex { + RuleVertex { position: [-0.5, -0.5], }, - Vertex { + RuleVertex { position: [0.5, -0.5], }, - Vertex { + RuleVertex { position: [0.5, 0.5], }, ], @@ -85,8 +105,9 @@ impl RuleShader { impl MarkShader for RuleShader { type Instance = RuleInstance; + type Vertex = RuleVertex; - fn verts(&self) -> &[Vertex] { + fn verts(&self) -> &[Self::Vertex] { self.verts.as_slice() } @@ -113,4 +134,8 @@ impl MarkShader for RuleShader { attributes: &INSTANCE_ATTRIBUTES, } } + + fn vertex_desc(&self) -> VertexBufferLayout<'static> { + RuleVertex::desc() + } } diff --git a/sg2d-wgpu/src/marks/symbol.rs b/sg2d-wgpu/src/marks/symbol.rs index ede0df3..e312af1 100644 --- a/sg2d-wgpu/src/marks/symbol.rs +++ b/sg2d-wgpu/src/marks/symbol.rs @@ -1,11 +1,32 @@ use crate::error::Sg2dWgpuError; use crate::marks::mark::MarkShader; -use crate::vertex::Vertex; use itertools::izip; use lyon::tessellation::geometry_builder::{simple_builder, VertexBuffers}; use lyon::tessellation::math::Point; use lyon::tessellation::{FillOptions, FillTessellator}; use sg2d::marks::symbol::{SymbolMark, SymbolShape}; +use wgpu::VertexBufferLayout; + +#[repr(C)] +#[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] +pub struct SymbolVertex { + pub position: [f32; 2], +} + +const VERTEX_ATTRIBUTES: [wgpu::VertexAttribute; 1] = wgpu::vertex_attr_array![ + 0 => Float32x2, // position +]; + +impl SymbolVertex { + pub fn desc() -> VertexBufferLayout<'static> { + VertexBufferLayout { + array_stride: std::mem::size_of::() as wgpu::BufferAddress, + step_mode: wgpu::VertexStepMode::Vertex, + attributes: &VERTEX_ATTRIBUTES, + } + } +} + #[repr(C)] #[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] pub struct SymbolInstance { @@ -14,6 +35,8 @@ pub struct SymbolInstance { pub size: f32, } +// First shader index (i.e. the 1 in `1 => Float...`) must be one greater than +// the largest shader index used in VERTEX_ATTRIBUTES above const INSTANCE_ATTRIBUTES: [wgpu::VertexAttribute; 3] = wgpu::vertex_attr_array![ 1 => Float32x2, // position 2 => Float32x3, // color @@ -37,7 +60,7 @@ impl SymbolInstance { } pub struct SymbolShader { - verts: Vec, + verts: Vec, indices: Vec, shader: String, vertex_entry_point: String, @@ -51,18 +74,10 @@ impl SymbolShader { let r = 0.6; Self { verts: vec![ - Vertex { - position: [r, -r], - }, - Vertex { - position: [r, r], - }, - Vertex { - position: [-r, r], - }, - Vertex { - position: [-r, -r], - }, + SymbolVertex { position: [r, -r] }, + SymbolVertex { position: [r, r] }, + SymbolVertex { position: [-r, r] }, + SymbolVertex { position: [-r, -r] }, ], indices: vec![0, 1, 2, 0, 2, 3], shader: include_str!("circle.wgsl").to_string(), @@ -82,7 +97,7 @@ impl SymbolShader { let verts = buffers .vertices .iter() - .map(|v| Vertex { + .map(|v| SymbolVertex { position: [v.x, -v.y], }) .collect::>(); @@ -100,8 +115,9 @@ impl SymbolShader { impl MarkShader for SymbolShader { type Instance = SymbolInstance; + type Vertex = SymbolVertex; - fn verts(&self) -> &[Vertex] { + fn verts(&self) -> &[Self::Vertex] { self.verts.as_slice() } @@ -128,4 +144,8 @@ impl MarkShader for SymbolShader { attributes: &INSTANCE_ATTRIBUTES, } } + + fn vertex_desc(&self) -> VertexBufferLayout<'static> { + SymbolVertex::desc() + } } diff --git a/sg2d-wgpu/src/vertex.rs b/sg2d-wgpu/src/vertex.rs deleted file mode 100644 index 5c61b5b..0000000 --- a/sg2d-wgpu/src/vertex.rs +++ /dev/null @@ -1,19 +0,0 @@ -#[repr(C)] -#[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] -pub struct Vertex { - pub position: [f32; 2], -} - -impl Vertex { - pub fn desc() -> wgpu::VertexBufferLayout<'static> { - wgpu::VertexBufferLayout { - array_stride: std::mem::size_of::() as wgpu::BufferAddress, - step_mode: wgpu::VertexStepMode::Vertex, - attributes: &[wgpu::VertexAttribute { - offset: 0, - shader_location: 0, - format: wgpu::VertexFormat::Float32x2, - }], - } - } -} From 711c2e7f6cd25c43ac0ca89a7f3a54c8bafc088c Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Fri, 5 Jan 2024 20:15:45 -0500 Subject: [PATCH 04/11] Add stroke color and normals to index/vertex buffers --- sg2d-wgpu/src/marks/circle.wgsl | 12 +++++--- sg2d-wgpu/src/marks/polygon_symbol.wgsl | 17 ++++++++--- sg2d-wgpu/src/marks/symbol.rs | 39 ++++++++++++++++++------- 3 files changed, 49 insertions(+), 19 deletions(-) diff --git a/sg2d-wgpu/src/marks/circle.wgsl b/sg2d-wgpu/src/marks/circle.wgsl index b570a07..232a79b 100644 --- a/sg2d-wgpu/src/marks/circle.wgsl +++ b/sg2d-wgpu/src/marks/circle.wgsl @@ -9,12 +9,16 @@ var chart_uniforms: ChartUniform; struct VertexInput { @location(0) position: vec2, + @location(1) normal: vec2, + @location(2) kind: u32, }; struct InstanceInput { - @location(1) position: vec2, - @location(2) color: vec3, - @location(3) size: f32, + @location(3) position: vec2, + @location(4) fill_color: vec3, + @location(5) stroke_color: vec3, + @location(6) stroke_width: f32, + @location(7) size: f32, }; struct VertexOutput { @@ -33,7 +37,7 @@ fn vs_main( var out: VertexOutput; // Pass through color - out.color = instance.color; + out.color = instance.fill_color; // Compute normalized position of vertex let size_scale = sqrt(instance.size); diff --git a/sg2d-wgpu/src/marks/polygon_symbol.wgsl b/sg2d-wgpu/src/marks/polygon_symbol.wgsl index 9019572..e142d63 100644 --- a/sg2d-wgpu/src/marks/polygon_symbol.wgsl +++ b/sg2d-wgpu/src/marks/polygon_symbol.wgsl @@ -9,12 +9,16 @@ var chart_uniforms: ChartUniform; struct VertexInput { @location(0) position: vec2, + @location(1) normal: vec2, + @location(2) kind: u32, }; struct InstanceInput { - @location(1) position: vec2, - @location(2) color: vec3, - @location(3) size: f32, + @location(3) position: vec2, + @location(4) fill_color: vec3, + @location(5) stroke_color: vec3, + @location(6) stroke_width: f32, + @location(7) size: f32, }; struct VertexOutput { @@ -29,7 +33,12 @@ fn vs_main( instance: InstanceInput, ) -> VertexOutput { var out: VertexOutput; - out.color = instance.color; + if (model.kind == 0u) { + out.color = instance.fill_color; + } else { + out.color = instance.stroke_color; + } + let size_scale = sqrt(instance.size); let x = 2.0 * (model.position[0] * size_scale + instance.position[0]) / chart_uniforms.size[0] - 1.0; let y = 2.0 * (model.position[1] * size_scale + (chart_uniforms.size[1] - instance.position[1])) / chart_uniforms.size[1] - 1.0; diff --git a/sg2d-wgpu/src/marks/symbol.rs b/sg2d-wgpu/src/marks/symbol.rs index e312af1..504f59c 100644 --- a/sg2d-wgpu/src/marks/symbol.rs +++ b/sg2d-wgpu/src/marks/symbol.rs @@ -7,14 +7,21 @@ use lyon::tessellation::{FillOptions, FillTessellator}; use sg2d::marks::symbol::{SymbolMark, SymbolShape}; use wgpu::VertexBufferLayout; +const FILL_KIND: u32 = 0; +const STROKE_KIND: u32 = 1; + #[repr(C)] #[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] pub struct SymbolVertex { pub position: [f32; 2], + pub normal: [f32; 2], + pub kind: u32, } -const VERTEX_ATTRIBUTES: [wgpu::VertexAttribute; 1] = wgpu::vertex_attr_array![ +const VERTEX_ATTRIBUTES: [wgpu::VertexAttribute; 3] = wgpu::vertex_attr_array![ 0 => Float32x2, // position + 1 => Float32x2, // normal + 2 => Uint32, // kind ]; impl SymbolVertex { @@ -31,16 +38,20 @@ impl SymbolVertex { #[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] pub struct SymbolInstance { pub position: [f32; 2], - pub color: [f32; 3], + pub fill_color: [f32; 3], + pub stroke_color: [f32; 3], + pub stroke_width: f32, pub size: f32, } // First shader index (i.e. the 1 in `1 => Float...`) must be one greater than // the largest shader index used in VERTEX_ATTRIBUTES above -const INSTANCE_ATTRIBUTES: [wgpu::VertexAttribute; 3] = wgpu::vertex_attr_array![ - 1 => Float32x2, // position - 2 => Float32x3, // color - 3 => Float32, // size +const INSTANCE_ATTRIBUTES: [wgpu::VertexAttribute; 5] = wgpu::vertex_attr_array![ + 3 => Float32x2, // position + 4 => Float32x3, // fill_color + 5 => Float32x3, // stroke_color + 6 => Float32, // stroke_width + 7 => Float32, // size ]; impl SymbolInstance { @@ -53,7 +64,9 @@ impl SymbolInstance { ) .map(|(x, y, fill, size)| SymbolInstance { position: [*x, *y], - color: *fill, + fill_color: *fill, + stroke_color: [0.0, 0.0, 0.0], + stroke_width: 0.0, size: *size, }) } @@ -72,12 +85,14 @@ impl SymbolShader { Ok(match shape { SymbolShape::Circle => { let r = 0.6; + let normal: [f32; 2] = [0.0, 0.0]; + let kind = FILL_KIND; Self { verts: vec![ - SymbolVertex { position: [r, -r] }, - SymbolVertex { position: [r, r] }, - SymbolVertex { position: [-r, r] }, - SymbolVertex { position: [-r, -r] }, + SymbolVertex { position: [r, -r], normal, kind }, + SymbolVertex { position: [r, r], normal, kind }, + SymbolVertex { position: [-r, r], normal, kind }, + SymbolVertex { position: [-r, -r], normal, kind }, ], indices: vec![0, 1, 2, 0, 2, 3], shader: include_str!("circle.wgsl").to_string(), @@ -99,6 +114,8 @@ impl SymbolShader { .iter() .map(|v| SymbolVertex { position: [v.x, -v.y], + normal: [0.0, 0.0], + kind: FILL_KIND, }) .collect::>(); Self { From 7091c5109b927732f764605ba802d97dc9f84c2e Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Sat, 6 Jan 2024 10:37:07 -0500 Subject: [PATCH 05/11] Support symbol stroke in geom symbols --- .../binned_scatter_cross_stroke.dims.json | 6 + .../symbol/binned_scatter_cross_stroke.png | Bin 0 -> 37235 bytes .../binned_scatter_cross_stroke.sg.json | 606 ++++++++++++++++++ .../binned_scatter_cross_stroke.vg.json | 123 ++++ sg2d-vega/src/marks/symbol.rs | 32 +- sg2d-wgpu/src/canvas.rs | 6 +- sg2d-wgpu/src/marks/polygon_symbol.wgsl | 30 +- sg2d-wgpu/src/marks/symbol.rs | 110 +++- sg2d-wgpu/tests/test_image_baselines.rs | 1 + sg2d/src/marks/symbol.rs | 10 + 10 files changed, 889 insertions(+), 35 deletions(-) create mode 100644 sg2d-vega-test-data/vega-scenegraphs/symbol/binned_scatter_cross_stroke.dims.json create mode 100644 sg2d-vega-test-data/vega-scenegraphs/symbol/binned_scatter_cross_stroke.png create mode 100644 sg2d-vega-test-data/vega-scenegraphs/symbol/binned_scatter_cross_stroke.sg.json create mode 100644 sg2d-vega-test-data/vega-specs/symbol/binned_scatter_cross_stroke.vg.json diff --git a/sg2d-vega-test-data/vega-scenegraphs/symbol/binned_scatter_cross_stroke.dims.json b/sg2d-vega-test-data/vega-scenegraphs/symbol/binned_scatter_cross_stroke.dims.json new file mode 100644 index 0000000..1ec583a --- /dev/null +++ b/sg2d-vega-test-data/vega-scenegraphs/symbol/binned_scatter_cross_stroke.dims.json @@ -0,0 +1,6 @@ +{ + "width": 410, + "height": 410, + "origin_x": 5, + "origin_y": 5 +} \ No newline at end of file diff --git a/sg2d-vega-test-data/vega-scenegraphs/symbol/binned_scatter_cross_stroke.png b/sg2d-vega-test-data/vega-scenegraphs/symbol/binned_scatter_cross_stroke.png new file mode 100644 index 0000000000000000000000000000000000000000..8d4a21c8ed66c027b698fcf8e96cff8550a34547 GIT binary patch literal 37235 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

t>G_5nAmEAB)#8D?oD%rH+NG!vX#Q=S$lOe@a zRus3}dCtY+IwlD+z(2JyJT-VRf)+A!RW%zzf7W*BWZ)#q{<|fk1OUSoy3GYug zop2Vzv=%8#a0huWmtWlB;_?jI%5Pc^H&2RX4qCVrJ@qdsw z#KQAS5yb(XwIh$?6doq4b?MF|?r%J4!3&>T@Nz`119*1GMYyB~BvcVqdMQ${;4N)2 z2%WR|lmt|ZavkVyoaO!log4B7S|EtaK1M;8fU~e=MKhf?g0Awx0Z+Rh6Rc|%InN?w;kMGmD`Q6zT&_cBTp0p9ir#@y8sTG=00I4?w%YdwrI7n! ziu^dC(%t%c@WS7`RX>W`CtVIQAXeL{c9@v>NtYcp654}6s8^j`;HA=C=14Eu3|=Vi z4#jMfO3n%jiAfuIJAQAynTL&8&UG+9fVLR{x?GS!&;mwejtHYCIEQD|d$1y_nz-94 znpVj4*8VQgrmzzMGb;`z=nsDJQ&D0Pn3|OEF0EQnu+U_NLq6r#mq1~kTStG%s2$l0IsTPT_C~sUHy-D42lv86?#HKlwfiSM+ z!w?Tp2H{dB&7E638`7)qI1!HoMS?g^pCLii5*T;{s509Ir5i#T7!t$_>@NoiD*tOh z8DNLO9!`ppUAm_gO~F$4Nd)Sb#4t1SA)zV)UAvA}#RO|pNs96El5PsDDuU%sY*CZ! zy@wa&Oy#hMPB3l&sbSwFm}ogkbH$yaF@5T`ftU@8^EjDbf3;|2)!yTAxvY)H@8(Sl z!Q$US?&H#|nDjR9SJIGDh%($<);*twmxr&^3trrR^3Rc$h;b*?Sd=368r%-bAiapz zWzZp@YYS`97abtOw^yOkn`0Q@ud(aw<;jdJs2MFk@>h(IWZEty&|6BUqQS1qtn)kr z>(kf>K|@gQXvY_ygiFG)mlc3F7Aw>xB3CLy&tJTkPYJbO1UU2#q62&R6zReuoKA#Pjr7z* zx>Wnu0GOaMgvSL89)Z<4$I3AGtQlO<3USV<8P`O*Cfu?&oia35rkAjj1Pfu3>XhDlMJGF zU?vEiOj`^Btp#i}(!1Qbq%A^U%@r3g0qz`TVu}SrQ`8Epd1CHTq&<}LU}Yw( z9;V%t>#)yXQMTnEKVHDapr3sJsrt*M`opI@s`Zx9adKOelm7j9eKGP=b zV}tnTU|=!vX#f&`WwdqYeLdjBt`DH)?1wHR(|B z2N6&H5uROPCDaU!ohpiY(@uR_W5Nj#STucuT*unj-W6SIHu{j6N$$DJpgXh;&RQSz z+gkVU2H$E#b*GIu5yji;`b5f*Hf9E(D?Qf=5VG8K&C`+(%tA zMPe6gCB12di7;ebBDN2wQbICYb^R7m(SVd}>AOK@=SduPHs%(674=1dICUR{W8Odn zIqUXUr1^&i!G#jMG)Z|683+nv7M*SC$OgCVJc5Lfi~GH^Ylv{FPilDUGBjnc30{aA zHcM(-7m9Yqq}jq_^N}z<4w;!ZzP~A9ausZCUewXt&7x08oC^3fK6uzHNDr6j;}xmT zgrai$J}=tl;RUog3xRw}>$su?b4NO+J2J`G0L>*mY_Nj8;hSvhED%o6M-W7kPMohs zhgOvBNO<4rgzJFFWy!x45reJdY<+K&+p>q(jzh&2r^qdmsc*Nx_#t#yhqDdz4nUxq zl@#qJ-Qh&oRN6`aH+LhDRIVn4J>?29X7Dh%>Xm3fIJjdZty|*F0fG2`, pub size: Option, pub shape: Option, + pub stroke: Option, + pub stroke_width: Option, } impl VegaMarkItem for VegaSymbolItem {} @@ -25,17 +27,27 @@ impl VegaMarkItem for VegaSymbolItem {} impl VegaMarkContainer { pub fn to_scene_graph(&self, origin: [f32; 2]) -> Result { // Get shape of first item and use that for all items for now - let first_shape = self - .items - .get(0) + let first = self.items.get(0); + + let first_shape = first .and_then(|item| item.shape.clone()) .unwrap_or_else(|| "circle".to_string()); + let first_has_stroke = first.map(|item| item.stroke.is_some()).unwrap_or(false); + + // Only include stroke_width if there is a stroke color + let stroke_width = if first_has_stroke { + first.and_then(|item| item.stroke_width.clone()) + } else { + None + }; + let first_shape = shape_to_path(&first_shape)?; // Init mark with scalar defaults let mut mark = SymbolMark { shape: first_shape, + stroke_width, clip: self.clip, ..Default::default() }; @@ -49,6 +61,8 @@ impl VegaMarkContainer { let mut y = Vec::::new(); let mut fill = Vec::<[f32; 3]>::new(); let mut size = Vec::::new(); + let mut stroke = Vec::<[f32; 3]>::new(); + let mut stroke_width = Vec::::new(); // For each item, append explicit values to corresponding vector for item in &self.items { @@ -63,6 +77,15 @@ impl VegaMarkContainer { if let Some(s) = item.size { size.push(s); } + + if let Some(c) = &item.stroke { + let c = csscolorparser::parse(c)?; + stroke.push([c.r as f32, c.g as f32, c.b as f32]) + } + + if let Some(s) = item.stroke_width { + stroke_width.push(s); + } } // Override values with vectors @@ -81,6 +104,9 @@ impl VegaMarkContainer { if size.len() == len { mark.size = EncodingValue::Array { values: size }; } + if stroke.len() == len { + mark.stroke = EncodingValue::Array { values: stroke }; + } Ok(SceneMark::Symbol(mark)) } diff --git a/sg2d-wgpu/src/canvas.rs b/sg2d-wgpu/src/canvas.rs index e537383..f74c02a 100644 --- a/sg2d-wgpu/src/canvas.rs +++ b/sg2d-wgpu/src/canvas.rs @@ -54,7 +54,11 @@ pub trait Canvas { *self.uniform(), self.texture_format(), self.sample_count(), - Box::new(SymbolShader::try_new(mark.shape.clone())?), + Box::new(SymbolShader::try_new( + mark.shape.clone(), + true, + mark.stroke_width.is_some(), + )?), instances.as_slice(), ))); Ok(()) diff --git a/sg2d-wgpu/src/marks/polygon_symbol.wgsl b/sg2d-wgpu/src/marks/polygon_symbol.wgsl index e142d63..682ae0c 100644 --- a/sg2d-wgpu/src/marks/polygon_symbol.wgsl +++ b/sg2d-wgpu/src/marks/polygon_symbol.wgsl @@ -33,16 +33,38 @@ fn vs_main( instance: InstanceInput, ) -> VertexOutput { var out: VertexOutput; + let size_scale = sqrt(instance.size); + + // Compute scenegraph x and y coordinates + let sg_x = model.position[0] * size_scale + instance.position[0]; + let sg_y = model.position[1] * size_scale + (chart_uniforms.size[1] - instance.position[1]); + let pos = vec2(sg_x, sg_y); + if (model.kind == 0u) { + // fill vertex out.color = instance.fill_color; + + let normalized_pos = 2.0 * pos / chart_uniforms.size - 1.0; + out.clip_position = vec4(normalized_pos, 0.0, 1.0); } else { + // stroke vertex out.color = instance.stroke_color; + + // Compute scaled stroke width. + // The 0.1 here is the widget that lyon used to compute the stroke tesselation + let scaled_stroke_width = 0.1 * size_scale; + + // Adjust vertex along normal to achieve desired line width + // The factor of 2.0 here is because the normal vector that lyon + // returns has length such that moving all stroke vertices by the length + // of the "normal" vector will increase the line width by 2. + var diff = scaled_stroke_width - instance.stroke_width; + let adjusted_pos = pos - diff * model.normal / 2.0; + + let normalized_pos = 2.0 * adjusted_pos / chart_uniforms.size - 1.0; + out.clip_position = vec4(normalized_pos, 0.0, 1.0); } - let size_scale = sqrt(instance.size); - let x = 2.0 * (model.position[0] * size_scale + instance.position[0]) / chart_uniforms.size[0] - 1.0; - let y = 2.0 * (model.position[1] * size_scale + (chart_uniforms.size[1] - instance.position[1])) / chart_uniforms.size[1] - 1.0; - out.clip_position = vec4(x, y, 0.0, 1.0); return out; } diff --git a/sg2d-wgpu/src/marks/symbol.rs b/sg2d-wgpu/src/marks/symbol.rs index 504f59c..1025d59 100644 --- a/sg2d-wgpu/src/marks/symbol.rs +++ b/sg2d-wgpu/src/marks/symbol.rs @@ -1,9 +1,17 @@ use crate::error::Sg2dWgpuError; use crate::marks::mark::MarkShader; use itertools::izip; +use lyon::lyon_tessellation::geometry_builder::Positions; +use lyon::lyon_tessellation::{ + BuffersBuilder, FillGeometryBuilder, FillVertex, FillVertexConstructor, GeometryBuilderError, + StrokeVertex, StrokeVertexConstructor, VertexId, +}; use lyon::tessellation::geometry_builder::{simple_builder, VertexBuffers}; use lyon::tessellation::math::Point; -use lyon::tessellation::{FillOptions, FillTessellator}; +use lyon::tessellation::{ + FillBuilder, FillOptions, FillTessellator, GeometryBuilder, StrokeGeometryBuilder, + StrokeOptions, StrokeTessellator, +}; use sg2d::marks::symbol::{SymbolMark, SymbolShape}; use wgpu::VertexBufferLayout; @@ -56,17 +64,19 @@ const INSTANCE_ATTRIBUTES: [wgpu::VertexAttribute; 5] = wgpu::vertex_attr_array! impl SymbolInstance { pub fn iter_from_spec(mark: &SymbolMark) -> impl Iterator + '_ { + let stroke_width = mark.stroke_width.unwrap_or(0.0); izip!( mark.x_iter(), mark.y_iter(), mark.fill_iter(), mark.size_iter(), + mark.stroke_iter(), ) - .map(|(x, y, fill, size)| SymbolInstance { + .map(move |(x, y, fill, size, stroke)| SymbolInstance { position: [*x, *y], fill_color: *fill, - stroke_color: [0.0, 0.0, 0.0], - stroke_width: 0.0, + stroke_color: *stroke, + stroke_width, size: *size, }) } @@ -81,7 +91,11 @@ pub struct SymbolShader { } impl SymbolShader { - pub fn try_new(shape: SymbolShape) -> Result { + pub fn try_new( + shape: SymbolShape, + has_fill: bool, + has_stroke: bool, + ) -> Result { Ok(match shape { SymbolShape::Circle => { let r = 0.6; @@ -89,10 +103,26 @@ impl SymbolShader { let kind = FILL_KIND; Self { verts: vec![ - SymbolVertex { position: [r, -r], normal, kind }, - SymbolVertex { position: [r, r], normal, kind }, - SymbolVertex { position: [-r, r], normal, kind }, - SymbolVertex { position: [-r, -r], normal, kind }, + SymbolVertex { + position: [r, -r], + normal, + kind, + }, + SymbolVertex { + position: [r, r], + normal, + kind, + }, + SymbolVertex { + position: [-r, r], + normal, + kind, + }, + SymbolVertex { + position: [-r, -r], + normal, + kind, + }, ], indices: vec![0, 1, 2, 0, 2, 3], shader: include_str!("circle.wgsl").to_string(), @@ -101,25 +131,25 @@ impl SymbolShader { } } SymbolShape::Path(ref path) => { - let mut buffers: VertexBuffers = VertexBuffers::new(); - let mut vertex_builder = simple_builder(&mut buffers); - let mut tessellator = FillTessellator::new(); - let options = FillOptions::default(); - tessellator.tessellate_path(path, &options, &mut vertex_builder)?; - - // - y-coordinate is negated to flip vertically from SVG coordinates (top-left) - // to canvas coordinates (bottom-left). - let verts = buffers - .vertices - .iter() - .map(|v| SymbolVertex { - position: [v.x, -v.y], - normal: [0.0, 0.0], - kind: FILL_KIND, - }) - .collect::>(); + let mut buffers: VertexBuffers = VertexBuffers::new(); + let mut builder = BuffersBuilder::new(&mut buffers, VertexPositions); + + // Tesselate fill + if has_fill { + let mut fill_tessellator = FillTessellator::new(); + let fill_options = FillOptions::default(); + fill_tessellator.tessellate_path(path, &fill_options, &mut builder)?; + } + + // Tesselate stroke + if has_stroke { + let mut stroke_tessellator = StrokeTessellator::new(); + let stroke_options = StrokeOptions::default().with_line_width(0.1); + stroke_tessellator.tessellate_path(path, &stroke_options, &mut builder)?; + } + Self { - verts, + verts: buffers.vertices, indices: buffers.indices, shader: include_str!("polygon_symbol.wgsl").to_string(), vertex_entry_point: "vs_main".to_string(), @@ -166,3 +196,29 @@ impl MarkShader for SymbolShader { SymbolVertex::desc() } } + +pub struct VertexPositions; + +impl FillVertexConstructor for VertexPositions { + fn new_vertex(&mut self, vertex: FillVertex) -> SymbolVertex { + // - y-coordinate is negated to flip vertically from SVG coordinates (top-left) + // to canvas coordinates (bottom-left). + SymbolVertex { + position: [vertex.position().x, -vertex.position().y], + normal: [0.0, 0.0], + kind: FILL_KIND, + } + } +} + +impl StrokeVertexConstructor for VertexPositions { + fn new_vertex(&mut self, vertex: StrokeVertex) -> SymbolVertex { + // - y-coordinate is negated to flip vertically from SVG coordinates (top-left) + // to canvas coordinates (bottom-left). + SymbolVertex { + position: [vertex.position().x, -vertex.position().y], + normal: [vertex.normal().x, -vertex.normal().y], + kind: STROKE_KIND, + } + } +} diff --git a/sg2d-wgpu/tests/test_image_baselines.rs b/sg2d-wgpu/tests/test_image_baselines.rs index 022e5cd..3bea36c 100644 --- a/sg2d-wgpu/tests/test_image_baselines.rs +++ b/sg2d-wgpu/tests/test_image_baselines.rs @@ -28,6 +28,7 @@ mod test_image_baselines { case("symbol", "binned_scatter_circle", 0.001), case("symbol", "binned_scatter_path", 0.001), case("symbol", "binned_scatter_path_star", 0.001), + case("symbol", "binned_scatter_cross_stroke", 0.001), case("rule", "wide_rule_axes", 0.0001), case("text", "bar_axis_labels", 0.01) )] diff --git a/sg2d/src/marks/symbol.rs b/sg2d/src/marks/symbol.rs index 571ddc3..be3d5fa 100644 --- a/sg2d/src/marks/symbol.rs +++ b/sg2d/src/marks/symbol.rs @@ -7,11 +7,13 @@ pub struct SymbolMark { pub name: String, pub clip: bool, pub shape: SymbolShape, + pub stroke_width: Option, pub len: u32, pub x: EncodingValue, pub y: EncodingValue, pub fill: EncodingValue<[f32; 3]>, pub size: EncodingValue, + pub stroke: EncodingValue<[f32; 3]>, } impl SymbolMark { @@ -30,13 +32,18 @@ impl SymbolMark { pub fn size_iter(&self) -> Box + '_> { self.size.as_iter(self.len as usize) } + pub fn stroke_iter(&self) -> Box + '_> { + self.stroke.as_iter(self.len as usize) + } } + impl Default for SymbolMark { fn default() -> Self { Self { name: "".to_string(), clip: true, shape: Default::default(), + stroke_width: None, len: 1, x: EncodingValue::Scalar { value: 0.0 }, y: EncodingValue::Scalar { value: 0.0 }, @@ -44,6 +51,9 @@ impl Default for SymbolMark { value: [0.0, 0.0, 0.0], }, size: EncodingValue::Scalar { value: 20.0 }, + stroke: EncodingValue::Scalar { + value: [0.0, 0.0, 0.0], + }, } } } From d403ec59ce3297066dfae7b3f3915aa020648c4b Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Sat, 6 Jan 2024 16:56:28 -0500 Subject: [PATCH 06/11] Support stroke in circle symbol shader --- .../binned_scatter_circle_stroke.dims.json | 6 + .../symbol/binned_scatter_circle_stroke.png | Bin 0 -> 44074 bytes .../binned_scatter_circle_stroke.sg.json | 606 ++++++++++++++++++ .../binned_scatter_circle_stroke.vg.json | 123 ++++ sg2d-wgpu/src/marks/circle.wgsl | 31 +- sg2d-wgpu/src/marks/polygon_symbol.wgsl | 2 +- sg2d-wgpu/src/marks/symbol.rs | 4 +- sg2d-wgpu/tests/test_image_baselines.rs | 1 + 8 files changed, 763 insertions(+), 10 deletions(-) create mode 100644 sg2d-vega-test-data/vega-scenegraphs/symbol/binned_scatter_circle_stroke.dims.json create mode 100644 sg2d-vega-test-data/vega-scenegraphs/symbol/binned_scatter_circle_stroke.png create mode 100644 sg2d-vega-test-data/vega-scenegraphs/symbol/binned_scatter_circle_stroke.sg.json create mode 100644 sg2d-vega-test-data/vega-specs/symbol/binned_scatter_circle_stroke.vg.json diff --git a/sg2d-vega-test-data/vega-scenegraphs/symbol/binned_scatter_circle_stroke.dims.json b/sg2d-vega-test-data/vega-scenegraphs/symbol/binned_scatter_circle_stroke.dims.json new file mode 100644 index 0000000..1ec583a --- /dev/null +++ b/sg2d-vega-test-data/vega-scenegraphs/symbol/binned_scatter_circle_stroke.dims.json @@ -0,0 +1,6 @@ +{ + "width": 410, + "height": 410, + "origin_x": 5, + "origin_y": 5 +} \ No newline at end of file diff --git a/sg2d-vega-test-data/vega-scenegraphs/symbol/binned_scatter_circle_stroke.png b/sg2d-vega-test-data/vega-scenegraphs/symbol/binned_scatter_circle_stroke.png new file mode 100644 index 0000000000000000000000000000000000000000..7b812c3a30a67533d41a10e558e0e30a3e6f1521 GIT binary patch literal 44074 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 c9R1RNy&3w*T(<%LJof1Cf3^KTo_*#20XL#KeE, @location(1) center: vec2, @location(2) radius: f32, - @location(3) color: vec3, + @location(3) fill_color: vec3, + @location(4) stroke_width: f32, + @location(5) stroke_color: vec3, }; @@ -36,8 +38,10 @@ fn vs_main( ) -> VertexOutput { var out: VertexOutput; - // Pass through color - out.color = instance.fill_color; + // Pass through colors and stroke_width + out.fill_color = instance.fill_color; + out.stroke_color = instance.stroke_color; + out.stroke_width = instance.stroke_width; // Compute normalized position of vertex let size_scale = sqrt(instance.size); @@ -63,10 +67,23 @@ fn fs_main( ) -> @location(0) vec4 { let buffer = 0.5; let dist = length(in.center - vec2(in.clip_position[0], in.clip_position[1])); - let alpha_factor = 1.0 - smoothstep(in.radius - buffer, in.radius + buffer, dist); - if (dist > in.radius + buffer) { - discard; + + if (in.stroke_width > 0.0) { + let inner_radius = in.radius - in.stroke_width / 2.0; + let outer_radius = in.radius + in.stroke_width / 2.0; + if (dist > outer_radius + buffer * 2.0) { + discard; + } else { + let alpha_factor = 1.0 - smoothstep(outer_radius - buffer, outer_radius + buffer, dist); + let mix_factor = 1.0 - smoothstep(inner_radius - buffer, inner_radius + buffer, dist); + return vec4(mix(in.stroke_color, in.fill_color, mix_factor), alpha_factor); + } } else { - return vec4(in.color, alpha_factor); + let alpha_factor = 1.0 - smoothstep(in.radius - buffer, in.radius + buffer, dist); + if (dist > in.radius + buffer) { + discard; + } else { + return vec4(in.fill_color, alpha_factor); + } } } diff --git a/sg2d-wgpu/src/marks/polygon_symbol.wgsl b/sg2d-wgpu/src/marks/polygon_symbol.wgsl index 682ae0c..f2c988f 100644 --- a/sg2d-wgpu/src/marks/polygon_symbol.wgsl +++ b/sg2d-wgpu/src/marks/polygon_symbol.wgsl @@ -51,7 +51,7 @@ fn vs_main( out.color = instance.stroke_color; // Compute scaled stroke width. - // The 0.1 here is the widget that lyon used to compute the stroke tesselation + // The 0.1 here is the width that lyon used to compute the stroke tesselation let scaled_stroke_width = 0.1 * size_scale; // Adjust vertex along normal to achieve desired line width diff --git a/sg2d-wgpu/src/marks/symbol.rs b/sg2d-wgpu/src/marks/symbol.rs index 1025d59..3b4ad65 100644 --- a/sg2d-wgpu/src/marks/symbol.rs +++ b/sg2d-wgpu/src/marks/symbol.rs @@ -98,7 +98,7 @@ impl SymbolShader { ) -> Result { Ok(match shape { SymbolShape::Circle => { - let r = 0.6; + let r = if has_stroke { 0.9 } else { 0.6 }; let normal: [f32; 2] = [0.0, 0.0]; let kind = FILL_KIND; Self { @@ -137,7 +137,7 @@ impl SymbolShader { // Tesselate fill if has_fill { let mut fill_tessellator = FillTessellator::new(); - let fill_options = FillOptions::default(); + let fill_options = FillOptions::default().with_tolerance(0.01); fill_tessellator.tessellate_path(path, &fill_options, &mut builder)?; } diff --git a/sg2d-wgpu/tests/test_image_baselines.rs b/sg2d-wgpu/tests/test_image_baselines.rs index 3bea36c..0844cd1 100644 --- a/sg2d-wgpu/tests/test_image_baselines.rs +++ b/sg2d-wgpu/tests/test_image_baselines.rs @@ -29,6 +29,7 @@ mod test_image_baselines { case("symbol", "binned_scatter_path", 0.001), case("symbol", "binned_scatter_path_star", 0.001), case("symbol", "binned_scatter_cross_stroke", 0.001), + case("symbol", "binned_scatter_circle_stroke", 0.001), case("rule", "wide_rule_axes", 0.0001), case("text", "bar_axis_labels", 0.01) )] From 1a718130b7df9adce1f825d27d4eeeddbdb58804 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Sat, 6 Jan 2024 18:19:55 -0500 Subject: [PATCH 07/11] Handle symbols with no fill --- ...ed_scatter_circle_stroke_no_fill.dims.json | 6 + .../binned_scatter_circle_stroke_no_fill.png | Bin 0 -> 47943 bytes ...nned_scatter_circle_stroke_no_fill.sg.json | 542 ++++++++++++++++++ ...scatter_path_star_stroke_no_fill.dims.json | 6 + ...inned_scatter_path_star_stroke_no_fill.png | Bin 0 -> 23164 bytes ...d_scatter_path_star_stroke_no_fill.sg.json | 542 ++++++++++++++++++ ...nned_scatter_circle_stroke_no_fill.vg.json | 122 ++++ ...d_scatter_path_star_stroke_no_fill.vg.json | 122 ++++ sg2d-vega/src/marks/symbol.rs | 8 +- sg2d-wgpu/src/marks/circle.wgsl | 18 +- sg2d-wgpu/src/marks/polygon_symbol.wgsl | 8 +- sg2d-wgpu/src/marks/symbol.rs | 8 +- sg2d-wgpu/tests/test_image_baselines.rs | 2 + sg2d/src/marks/symbol.rs | 12 +- 14 files changed, 1371 insertions(+), 25 deletions(-) create mode 100644 sg2d-vega-test-data/vega-scenegraphs/symbol/binned_scatter_circle_stroke_no_fill.dims.json create mode 100644 sg2d-vega-test-data/vega-scenegraphs/symbol/binned_scatter_circle_stroke_no_fill.png create mode 100644 sg2d-vega-test-data/vega-scenegraphs/symbol/binned_scatter_circle_stroke_no_fill.sg.json create mode 100644 sg2d-vega-test-data/vega-scenegraphs/symbol/binned_scatter_path_star_stroke_no_fill.dims.json create mode 100644 sg2d-vega-test-data/vega-scenegraphs/symbol/binned_scatter_path_star_stroke_no_fill.png create mode 100644 sg2d-vega-test-data/vega-scenegraphs/symbol/binned_scatter_path_star_stroke_no_fill.sg.json create mode 100644 sg2d-vega-test-data/vega-specs/symbol/binned_scatter_circle_stroke_no_fill.vg.json create mode 100644 sg2d-vega-test-data/vega-specs/symbol/binned_scatter_path_star_stroke_no_fill.vg.json diff --git a/sg2d-vega-test-data/vega-scenegraphs/symbol/binned_scatter_circle_stroke_no_fill.dims.json b/sg2d-vega-test-data/vega-scenegraphs/symbol/binned_scatter_circle_stroke_no_fill.dims.json new file mode 100644 index 0000000..1ec583a --- /dev/null +++ b/sg2d-vega-test-data/vega-scenegraphs/symbol/binned_scatter_circle_stroke_no_fill.dims.json @@ -0,0 +1,6 @@ +{ + "width": 410, + "height": 410, + "origin_x": 5, + "origin_y": 5 +} \ No newline at end of file diff --git a/sg2d-vega-test-data/vega-scenegraphs/symbol/binned_scatter_circle_stroke_no_fill.png b/sg2d-vega-test-data/vega-scenegraphs/symbol/binned_scatter_circle_stroke_no_fill.png new file mode 100644 index 0000000000000000000000000000000000000000..f3daa0bfde55b85c686c01f8b97360df90a68ced GIT binary patch literal 47943 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 z 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 literal 0 HcmV?d00001 diff --git a/sg2d-vega-test-data/vega-scenegraphs/symbol/binned_scatter_circle_stroke_no_fill.sg.json b/sg2d-vega-test-data/vega-scenegraphs/symbol/binned_scatter_circle_stroke_no_fill.sg.json new file mode 100644 index 0000000..3f4720a --- /dev/null +++ b/sg2d-vega-test-data/vega-scenegraphs/symbol/binned_scatter_circle_stroke_no_fill.sg.json @@ -0,0 +1,542 @@ +{ + "marktype": "group", + "name": "root", + "role": "frame", + "interactive": true, + "clip": false, + "items": [ + { + "items": [ + { + "marktype": "symbol", + "name": "marks", + "role": "mark", + "interactive": true, + "clip": false, + "items": [ + { + "x": 111.11111111111111, + "y": 140, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 43.23353293413174, + "shape": "circle" + }, + { + "x": 200, + "y": 300, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 873.3173652694611, + "shape": "circle" + }, + { + "x": 288.88888888888886, + "y": 60.00000000000001, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 1444, + "shape": "circle" + }, + { + "x": 333.33333333333337, + "y": 20.000000000000018, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 925.1976047904193, + "shape": "circle" + }, + { + "x": 244.44444444444446, + "y": 60.00000000000001, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 674.4431137724551, + "shape": "circle" + }, + { + "x": 66.66666666666666, + "y": 20.000000000000018, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 25.940119760479043, + "shape": "circle" + }, + { + "x": 288.88888888888886, + "y": 179.99999999999997, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 250.75449101796409, + "shape": "circle" + }, + { + "x": 200, + "y": 260, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 864.6706586826347, + "shape": "circle" + }, + { + "x": 288.88888888888886, + "y": 100, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 856.0239520958085, + "shape": "circle" + }, + { + "x": 111.11111111111111, + "y": 340, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 198.874251497006, + "shape": "circle" + }, + { + "x": 288.88888888888886, + "y": 20.000000000000018, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 1132.7185628742513, + "shape": "circle" + }, + { + "x": 244.44444444444446, + "y": 340, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 250.75449101796409, + "shape": "circle" + }, + { + "x": 244.44444444444446, + "y": 179.99999999999997, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 1132.7185628742513, + "shape": "circle" + }, + { + "x": 155.55555555555557, + "y": 340, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 657.1497005988024, + "shape": "circle" + }, + { + "x": 244.44444444444446, + "y": 220.00000000000003, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 1089.4850299401196, + "shape": "circle" + }, + { + "x": 244.44444444444446, + "y": 300, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 518.8023952095808, + "shape": "circle" + }, + { + "x": 200, + "y": 179.99999999999997, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 380.4550898203593, + "shape": "circle" + }, + { + "x": 111.11111111111111, + "y": 100, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 17.293413173652695, + "shape": "circle" + }, + { + "x": 244.44444444444446, + "y": 20.000000000000018, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 207.52095808383234, + "shape": "circle" + }, + { + "x": 200, + "y": 140, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 233.46107784431138, + "shape": "circle" + }, + { + "x": 200, + "y": 100, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 69.17365269461078, + "shape": "circle" + }, + { + "x": 244.44444444444446, + "y": 140, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 1124.0718562874251, + "shape": "circle" + }, + { + "x": 288.88888888888886, + "y": 140, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 734.9700598802395, + "shape": "circle" + }, + { + "x": 244.44444444444446, + "y": 260, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 622.5628742514971, + "shape": "circle" + }, + { + "x": 200, + "y": 60.00000000000001, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 86.46706586826348, + "shape": "circle" + }, + { + "x": 111.11111111111111, + "y": 20.000000000000018, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 17.293413173652695, + "shape": "circle" + }, + { + "x": 111.11111111111111, + "y": 300, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 95.11377245508983, + "shape": "circle" + }, + { + "x": 155.55555555555557, + "y": 220.00000000000003, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 77.82035928143713, + "shape": "circle" + }, + { + "x": 200, + "y": 340, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 786.8502994011975, + "shape": "circle" + }, + { + "x": 200, + "y": 220.00000000000003, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 613.9161676646706, + "shape": "circle" + }, + { + "x": 155.55555555555557, + "y": 179.99999999999997, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 34.58682634730539, + "shape": "circle" + }, + { + "x": 333.33333333333337, + "y": 100, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 121.05389221556885, + "shape": "circle" + }, + { + "x": 244.44444444444446, + "y": 100, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 916.5508982035929, + "shape": "circle" + }, + { + "x": 333.33333333333337, + "y": 260, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 8.646706586826348, + "shape": "circle" + }, + { + "x": 333.33333333333337, + "y": 60.00000000000001, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 311.28143712574854, + "shape": "circle" + }, + { + "x": 155.55555555555557, + "y": 100, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 17.293413173652695, + "shape": "circle" + }, + { + "x": 200, + "y": 20.000000000000018, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 69.17365269461078, + "shape": "circle" + }, + { + "x": 155.55555555555557, + "y": 300, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 345.8682634730539, + "shape": "circle" + }, + { + "x": 155.55555555555557, + "y": 380, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 371.8083832335329, + "shape": "circle" + }, + { + "x": 200, + "y": 380, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 250.75449101796409, + "shape": "circle" + }, + { + "x": 377.77777777777777, + "y": 20.000000000000018, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 8.646706586826348, + "shape": "circle" + }, + { + "x": 155.55555555555557, + "y": 260, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 190.22754491017966, + "shape": "circle" + }, + { + "x": 288.88888888888886, + "y": 220.00000000000003, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 138.34730538922156, + "shape": "circle" + }, + { + "x": 111.11111111111111, + "y": 380, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 155.64071856287427, + "shape": "circle" + }, + { + "x": 66.66666666666666, + "y": 340, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 69.17365269461078, + "shape": "circle" + }, + { + "x": 377.77777777777777, + "y": 60.00000000000001, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 17.293413173652695, + "shape": "circle" + }, + { + "x": 155.55555555555557, + "y": 20.000000000000018, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 17.293413173652695, + "shape": "circle" + }, + { + "x": 66.66666666666666, + "y": 140, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 25.940119760479043, + "shape": "circle" + }, + { + "x": 288.88888888888886, + "y": 300, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 51.880239520958085, + "shape": "circle" + }, + { + "x": 333.33333333333337, + "y": 340, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 8.646706586826348, + "shape": "circle" + }, + { + "x": 66.66666666666666, + "y": 380, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 121.05389221556885, + "shape": "circle" + }, + { + "x": 155.55555555555557, + "y": 140, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 17.293413173652695, + "shape": "circle" + }, + { + "x": 288.88888888888886, + "y": 260, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 121.05389221556885, + "shape": "circle" + }, + { + "x": 333.33333333333337, + "y": 140, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 17.293413173652695, + "shape": "circle" + }, + { + "x": 288.88888888888886, + "y": 340, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 17.293413173652695, + "shape": "circle" + }, + { + "x": 22.22222222222222, + "y": 380, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 25.940119760479043, + "shape": "circle" + }, + { + "x": 244.44444444444446, + "y": 380, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 25.940119760479043, + "shape": "circle" + }, + { + "x": 155.55555555555557, + "y": 60.00000000000001, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 8.646706586826348, + "shape": "circle" + }, + { + "x": 333.33333333333337, + "y": 220.00000000000003, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 8.646706586826348, + "shape": "circle" + }, + { + "x": 111.11111111111111, + "y": 260, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 8.646706586826348, + "shape": "circle" + }, + { + "x": 333.33333333333337, + "y": 179.99999999999997, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 8.646706586826348, + "shape": "circle" + }, + { + "x": 66.66666666666666, + "y": 300, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 8.646706586826348, + "shape": "circle" + }, + { + "x": 66.66666666666666, + "y": 260, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 8.646706586826348, + "shape": "circle" + }, + { + "x": 66.66666666666666, + "y": 60.00000000000001, + "stroke": "seagreen", + "strokeWidth": 3, + "size": 8.646706586826348, + "shape": "circle" + } + ], + "zindex": 0 + } + ], + "x": 0, + "y": 0, + "width": 400, + "height": 400, + "fill": "transparent", + "stroke": "transparent" + } + ], + "zindex": 0 +} \ No newline at end of file diff --git a/sg2d-vega-test-data/vega-scenegraphs/symbol/binned_scatter_path_star_stroke_no_fill.dims.json b/sg2d-vega-test-data/vega-scenegraphs/symbol/binned_scatter_path_star_stroke_no_fill.dims.json new file mode 100644 index 0000000..88f95a5 --- /dev/null +++ b/sg2d-vega-test-data/vega-scenegraphs/symbol/binned_scatter_path_star_stroke_no_fill.dims.json @@ -0,0 +1,6 @@ +{ + "width": 210, + "height": 211, + "origin_x": 5, + "origin_y": 6 +} \ No newline at end of file diff --git a/sg2d-vega-test-data/vega-scenegraphs/symbol/binned_scatter_path_star_stroke_no_fill.png b/sg2d-vega-test-data/vega-scenegraphs/symbol/binned_scatter_path_star_stroke_no_fill.png new file mode 100644 index 0000000000000000000000000000000000000000..ac42ef40301223d3d69aef2d1ec62a30e419d5ba GIT binary patch literal 23164 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 { // Init vector for each encoding channel let mut x = Vec::::new(); let mut y = Vec::::new(); - let mut fill = Vec::<[f32; 3]>::new(); + let mut fill = Vec::<[f32; 4]>::new(); let mut size = Vec::::new(); - let mut stroke = Vec::<[f32; 3]>::new(); + let mut stroke = Vec::<[f32; 4]>::new(); let mut stroke_width = Vec::::new(); // For each item, append explicit values to corresponding vector @@ -71,7 +71,7 @@ impl VegaMarkContainer { if let Some(c) = &item.fill { let c = csscolorparser::parse(c)?; - fill.push([c.r as f32, c.g as f32, c.b as f32]) + fill.push([c.r as f32, c.g as f32, c.b as f32, 1.0]) } if let Some(s) = item.size { @@ -80,7 +80,7 @@ impl VegaMarkContainer { if let Some(c) = &item.stroke { let c = csscolorparser::parse(c)?; - stroke.push([c.r as f32, c.g as f32, c.b as f32]) + stroke.push([c.r as f32, c.g as f32, c.b as f32, 1.0]) } if let Some(s) = item.stroke_width { diff --git a/sg2d-wgpu/src/marks/circle.wgsl b/sg2d-wgpu/src/marks/circle.wgsl index 8cbdc21..249458d 100644 --- a/sg2d-wgpu/src/marks/circle.wgsl +++ b/sg2d-wgpu/src/marks/circle.wgsl @@ -15,8 +15,8 @@ struct VertexInput { struct InstanceInput { @location(3) position: vec2, - @location(4) fill_color: vec3, - @location(5) stroke_color: vec3, + @location(4) fill_color: vec4, + @location(5) stroke_color: vec4, @location(6) stroke_width: f32, @location(7) size: f32, }; @@ -25,9 +25,9 @@ struct VertexOutput { @builtin(position) clip_position: vec4, @location(1) center: vec2, @location(2) radius: f32, - @location(3) fill_color: vec3, - @location(4) stroke_width: f32, - @location(5) stroke_color: vec3, + @location(3) fill_color: vec4, + @location(4) stroke_color: vec4, + @location(5) stroke_width: f32, }; @@ -76,14 +76,18 @@ fn fs_main( } else { let alpha_factor = 1.0 - smoothstep(outer_radius - buffer, outer_radius + buffer, dist); let mix_factor = 1.0 - smoothstep(inner_radius - buffer, inner_radius + buffer, dist); - return vec4(mix(in.stroke_color, in.fill_color, mix_factor), alpha_factor); + var mixed_color: vec4 = mix(in.stroke_color, in.fill_color, mix_factor); + mixed_color[3] *= alpha_factor; + return mixed_color; } } else { let alpha_factor = 1.0 - smoothstep(in.radius - buffer, in.radius + buffer, dist); + var mixed_color: vec4 = in.fill_color; + mixed_color[3] *= alpha_factor; if (dist > in.radius + buffer) { discard; } else { - return vec4(in.fill_color, alpha_factor); + return mixed_color; } } } diff --git a/sg2d-wgpu/src/marks/polygon_symbol.wgsl b/sg2d-wgpu/src/marks/polygon_symbol.wgsl index f2c988f..28635a8 100644 --- a/sg2d-wgpu/src/marks/polygon_symbol.wgsl +++ b/sg2d-wgpu/src/marks/polygon_symbol.wgsl @@ -15,15 +15,15 @@ struct VertexInput { struct InstanceInput { @location(3) position: vec2, - @location(4) fill_color: vec3, - @location(5) stroke_color: vec3, + @location(4) fill_color: vec4, + @location(5) stroke_color: vec4, @location(6) stroke_width: f32, @location(7) size: f32, }; struct VertexOutput { @builtin(position) clip_position: vec4, - @location(0) color: vec3, + @location(0) color: vec4, }; @@ -72,5 +72,5 @@ fn vs_main( @fragment fn fs_main(in: VertexOutput) -> @location(0) vec4 { - return vec4(in.color, 1.0); + return in.color; } diff --git a/sg2d-wgpu/src/marks/symbol.rs b/sg2d-wgpu/src/marks/symbol.rs index 3b4ad65..205c8cf 100644 --- a/sg2d-wgpu/src/marks/symbol.rs +++ b/sg2d-wgpu/src/marks/symbol.rs @@ -46,8 +46,8 @@ impl SymbolVertex { #[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)] pub struct SymbolInstance { pub position: [f32; 2], - pub fill_color: [f32; 3], - pub stroke_color: [f32; 3], + pub fill_color: [f32; 4], + pub stroke_color: [f32; 4], pub stroke_width: f32, pub size: f32, } @@ -56,8 +56,8 @@ pub struct SymbolInstance { // the largest shader index used in VERTEX_ATTRIBUTES above const INSTANCE_ATTRIBUTES: [wgpu::VertexAttribute; 5] = wgpu::vertex_attr_array![ 3 => Float32x2, // position - 4 => Float32x3, // fill_color - 5 => Float32x3, // stroke_color + 4 => Float32x4, // fill_color + 5 => Float32x4, // stroke_color 6 => Float32, // stroke_width 7 => Float32, // size ]; diff --git a/sg2d-wgpu/tests/test_image_baselines.rs b/sg2d-wgpu/tests/test_image_baselines.rs index 0844cd1..6264cf6 100644 --- a/sg2d-wgpu/tests/test_image_baselines.rs +++ b/sg2d-wgpu/tests/test_image_baselines.rs @@ -30,6 +30,8 @@ mod test_image_baselines { case("symbol", "binned_scatter_path_star", 0.001), case("symbol", "binned_scatter_cross_stroke", 0.001), case("symbol", "binned_scatter_circle_stroke", 0.001), + case("symbol", "binned_scatter_circle_stroke_no_fill", 0.001), + case("symbol", "binned_scatter_path_star_stroke_no_fill", 0.001), case("rule", "wide_rule_axes", 0.0001), case("text", "bar_axis_labels", 0.01) )] diff --git a/sg2d/src/marks/symbol.rs b/sg2d/src/marks/symbol.rs index be3d5fa..c93393b 100644 --- a/sg2d/src/marks/symbol.rs +++ b/sg2d/src/marks/symbol.rs @@ -11,9 +11,9 @@ pub struct SymbolMark { pub len: u32, pub x: EncodingValue, pub y: EncodingValue, - pub fill: EncodingValue<[f32; 3]>, + pub fill: EncodingValue<[f32; 4]>, pub size: EncodingValue, - pub stroke: EncodingValue<[f32; 3]>, + pub stroke: EncodingValue<[f32; 4]>, } impl SymbolMark { @@ -25,14 +25,14 @@ impl SymbolMark { self.y.as_iter(self.len as usize) } - pub fn fill_iter(&self) -> Box + '_> { + pub fn fill_iter(&self) -> Box + '_> { self.fill.as_iter(self.len as usize) } pub fn size_iter(&self) -> Box + '_> { self.size.as_iter(self.len as usize) } - pub fn stroke_iter(&self) -> Box + '_> { + pub fn stroke_iter(&self) -> Box + '_> { self.stroke.as_iter(self.len as usize) } } @@ -48,11 +48,11 @@ impl Default for SymbolMark { x: EncodingValue::Scalar { value: 0.0 }, y: EncodingValue::Scalar { value: 0.0 }, fill: EncodingValue::Scalar { - value: [0.0, 0.0, 0.0], + value: [0.0, 0.0, 0.0, 0.0], }, size: EncodingValue::Scalar { value: 20.0 }, stroke: EncodingValue::Scalar { - value: [0.0, 0.0, 0.0], + value: [0.0, 0.0, 0.0, 0.0], }, } } From aaff4b1fa9819f6d184baf3690a7dcbf8c11275d Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Sat, 6 Jan 2024 18:56:57 -0500 Subject: [PATCH 08/11] Handle stroke and fill opacity in symbols --- .../scatter_transparent_stroke.dims.json | 6 + .../symbol/scatter_transparent_stroke.png | Bin 0 -> 108100 bytes .../symbol/scatter_transparent_stroke.sg.json | 4734 +++++++++++++++++ .../scatter_transparent_stroke_star.dims.json | 6 + .../scatter_transparent_stroke_star.png | Bin 0 -> 108368 bytes .../scatter_transparent_stroke_star.sg.json | 4734 +++++++++++++++++ .../symbol/scatter_transparent_stroke.vg.json | 70 + .../scatter_transparent_stroke_star.vg.json | 71 + sg2d-vega/src/marks/symbol.rs | 12 +- sg2d-wgpu/tests/test_image_baselines.rs | 2 + 10 files changed, 9633 insertions(+), 2 deletions(-) create mode 100644 sg2d-vega-test-data/vega-scenegraphs/symbol/scatter_transparent_stroke.dims.json create mode 100644 sg2d-vega-test-data/vega-scenegraphs/symbol/scatter_transparent_stroke.png create mode 100644 sg2d-vega-test-data/vega-scenegraphs/symbol/scatter_transparent_stroke.sg.json create mode 100644 sg2d-vega-test-data/vega-scenegraphs/symbol/scatter_transparent_stroke_star.dims.json create mode 100644 sg2d-vega-test-data/vega-scenegraphs/symbol/scatter_transparent_stroke_star.png create mode 100644 sg2d-vega-test-data/vega-scenegraphs/symbol/scatter_transparent_stroke_star.sg.json create mode 100644 sg2d-vega-test-data/vega-specs/symbol/scatter_transparent_stroke.vg.json create mode 100644 sg2d-vega-test-data/vega-specs/symbol/scatter_transparent_stroke_star.vg.json diff --git a/sg2d-vega-test-data/vega-scenegraphs/symbol/scatter_transparent_stroke.dims.json b/sg2d-vega-test-data/vega-scenegraphs/symbol/scatter_transparent_stroke.dims.json new file mode 100644 index 0000000..ce14245 --- /dev/null +++ b/sg2d-vega-test-data/vega-scenegraphs/symbol/scatter_transparent_stroke.dims.json @@ -0,0 +1,6 @@ +{ + "width": 510, + "height": 510, + "origin_x": 5, + "origin_y": 5 +} \ No newline at end of file diff --git a/sg2d-vega-test-data/vega-scenegraphs/symbol/scatter_transparent_stroke.png b/sg2d-vega-test-data/vega-scenegraphs/symbol/scatter_transparent_stroke.png new file mode 100644 index 0000000000000000000000000000000000000000..370aa6edba7067d05cf9a6041d9ed61759fad646 GIT binary patch literal 108100 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�wDyw}ptB{1rra{+WdM{+ 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
c3 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

p3jE6AF&jdf1y;=OA8n(KUvx=?C^2{P58C5 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

l2W6TDj;{vg=G%h7N=X+ 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�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 W?(xE5?h5{!JaNkFdtRIK@&5rjEj`iz literal 0 HcmV?d00001 diff --git a/sg2d-vega-test-data/vega-scenegraphs/symbol/scatter_transparent_stroke_star.sg.json b/sg2d-vega-test-data/vega-scenegraphs/symbol/scatter_transparent_stroke_star.sg.json new file mode 100644 index 0000000..7120b1b --- /dev/null +++ b/sg2d-vega-test-data/vega-scenegraphs/symbol/scatter_transparent_stroke_star.sg.json @@ -0,0 +1,4734 @@ +{ + "marktype": "group", + "name": "root", + "role": "frame", + "interactive": true, + "clip": false, + "items": [ + { + "items": [ + { + "marktype": "symbol", + "name": "marks", + "role": "mark", + "interactive": true, + "clip": false, + "items": [ + { + "x": 270.8333333333333, + "y": 320, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 174.6774193548387, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 130; Miles_per_Gallon: 18; Acceleration: 12", + "ariaRoleDescription": "point" + }, + { + "x": 343.75, + "y": 350, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 167.39919354838707, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 165; Miles_per_Gallon: 15; Acceleration: 11.5", + "ariaRoleDescription": "point" + }, + { + "x": 312.5, + "y": 320, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 160.1209677419355, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 150; Miles_per_Gallon: 18; Acceleration: 11", + "ariaRoleDescription": "point" + }, + { + "x": 312.5, + "y": 339.99999999999994, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 174.6774193548387, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 150; Miles_per_Gallon: 16; Acceleration: 12", + "ariaRoleDescription": "point" + }, + { + "x": 291.6666666666667, + "y": 329.99999999999994, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 152.84274193548387, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 140; Miles_per_Gallon: 17; Acceleration: 10.5", + "ariaRoleDescription": "point" + }, + { + "x": 412.5, + "y": 350, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 145.56451612903226, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 198; Miles_per_Gallon: 15; Acceleration: 10", + "ariaRoleDescription": "point" + }, + { + "x": 458.3333333333333, + "y": 360, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 131.00806451612902, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 220; Miles_per_Gallon: 14; Acceleration: 9", + "ariaRoleDescription": "point" + }, + { + "x": 447.9166666666667, + "y": 360, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 123.72983870967741, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 215; Miles_per_Gallon: 14; Acceleration: 8.5", + "ariaRoleDescription": "point" + }, + { + "x": 468.75, + "y": 360, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 145.56451612903226, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 225; Miles_per_Gallon: 14; Acceleration: 10", + "ariaRoleDescription": "point" + }, + { + "x": 395.8333333333333, + "y": 350, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 123.72983870967741, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 190; Miles_per_Gallon: 15; Acceleration: 8.5", + "ariaRoleDescription": "point" + }, + { + "x": 354.1666666666667, + "y": 350, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 145.56451612903226, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 170; Miles_per_Gallon: 15; Acceleration: 10", + "ariaRoleDescription": "point" + }, + { + "x": 333.3333333333333, + "y": 360, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 116.45161290322581, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 160; Miles_per_Gallon: 14; Acceleration: 8", + "ariaRoleDescription": "point" + }, + { + "x": 312.5, + "y": 350, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 138.28629032258064, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 150; Miles_per_Gallon: 15; Acceleration: 9.5", + "ariaRoleDescription": "point" + }, + { + "x": 468.75, + "y": 360, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 145.56451612903226, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 225; Miles_per_Gallon: 14; Acceleration: 10", + "ariaRoleDescription": "point" + }, + { + "x": 197.91666666666666, + "y": 260, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 218.34677419354838, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 95; Miles_per_Gallon: 24; Acceleration: 15", + "ariaRoleDescription": "point" + }, + { + "x": 197.91666666666666, + "y": 280, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 225.625, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 95; Miles_per_Gallon: 22; Acceleration: 15.5", + "ariaRoleDescription": "point" + }, + { + "x": 202.08333333333334, + "y": 320, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 225.625, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 97; Miles_per_Gallon: 18; Acceleration: 15.5", + "ariaRoleDescription": "point" + }, + { + "x": 177.08333333333334, + "y": 290.00000000000006, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 232.90322580645162, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 85; Miles_per_Gallon: 21; Acceleration: 16", + "ariaRoleDescription": "point" + }, + { + "x": 183.33333333333331, + "y": 229.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 211.0685483870968, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 88; Miles_per_Gallon: 27; Acceleration: 14.5", + "ariaRoleDescription": "point" + }, + { + "x": 95.83333333333334, + "y": 240, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 298.4072580645161, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 46; Miles_per_Gallon: 26; Acceleration: 20.5", + "ariaRoleDescription": "point" + }, + { + "x": 181.25, + "y": 250, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 254.73790322580643, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 87; Miles_per_Gallon: 25; Acceleration: 17.5", + "ariaRoleDescription": "point" + }, + { + "x": 187.5, + "y": 260, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 211.0685483870968, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 90; Miles_per_Gallon: 24; Acceleration: 14.5", + "ariaRoleDescription": "point" + }, + { + "x": 197.91666666666666, + "y": 250, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 254.73790322580643, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 95; Miles_per_Gallon: 25; Acceleration: 17.5", + "ariaRoleDescription": "point" + }, + { + "x": 235.41666666666666, + "y": 240, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 181.95564516129033, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 113; Miles_per_Gallon: 26; Acceleration: 12.5", + "ariaRoleDescription": "point" + }, + { + "x": 187.5, + "y": 290.00000000000006, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 218.34677419354838, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 90; Miles_per_Gallon: 21; Acceleration: 15", + "ariaRoleDescription": "point" + }, + { + "x": 447.9166666666667, + "y": 400, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 203.79032258064515, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 215; Miles_per_Gallon: 10; Acceleration: 14", + "ariaRoleDescription": "point" + }, + { + "x": 416.6666666666667, + "y": 400, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 218.34677419354838, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 200; Miles_per_Gallon: 10; Acceleration: 15", + "ariaRoleDescription": "point" + }, + { + "x": 437.5, + "y": 390, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 196.51209677419354, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 210; Miles_per_Gallon: 11; Acceleration: 13.5", + "ariaRoleDescription": "point" + }, + { + "x": 402.08333333333337, + "y": 410.00000000000006, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 269.2943548387097, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 193; Miles_per_Gallon: 9; Acceleration: 18.5", + "ariaRoleDescription": "point" + }, + { + "x": 183.33333333333331, + "y": 229.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 211.0685483870968, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 88; Miles_per_Gallon: 27; Acceleration: 14.5", + "ariaRoleDescription": "point" + }, + { + "x": 187.5, + "y": 219.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 225.625, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 90; Miles_per_Gallon: 28; Acceleration: 15.5", + "ariaRoleDescription": "point" + }, + { + "x": 197.91666666666666, + "y": 250, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 203.79032258064515, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 95; Miles_per_Gallon: 25; Acceleration: 14", + "ariaRoleDescription": "point" + }, + { + "x": 208.33333333333334, + "y": 310, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 189.23387096774192, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 100; Miles_per_Gallon: 19; Acceleration: 13", + "ariaRoleDescription": "point" + }, + { + "x": 218.75, + "y": 339.99999999999994, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 225.625, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 105; Miles_per_Gallon: 16; Acceleration: 15.5", + "ariaRoleDescription": "point" + }, + { + "x": 208.33333333333334, + "y": 329.99999999999994, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 225.625, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 100; Miles_per_Gallon: 17; Acceleration: 15.5", + "ariaRoleDescription": "point" + }, + { + "x": 183.33333333333331, + "y": 310, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 225.625, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 88; Miles_per_Gallon: 19; Acceleration: 15.5", + "ariaRoleDescription": "point" + }, + { + "x": 208.33333333333334, + "y": 320, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 225.625, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 100; Miles_per_Gallon: 18; Acceleration: 15.5", + "ariaRoleDescription": "point" + }, + { + "x": 343.75, + "y": 360, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 174.6774193548387, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 165; Miles_per_Gallon: 14; Acceleration: 12", + "ariaRoleDescription": "point" + }, + { + "x": 364.5833333333333, + "y": 360, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 167.39919354838707, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 175; Miles_per_Gallon: 14; Acceleration: 11.5", + "ariaRoleDescription": "point" + }, + { + "x": 318.75, + "y": 360, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 196.51209677419354, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 153; Miles_per_Gallon: 14; Acceleration: 13.5", + "ariaRoleDescription": "point" + }, + { + "x": 312.5, + "y": 360, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 189.23387096774192, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 150; Miles_per_Gallon: 14; Acceleration: 13", + "ariaRoleDescription": "point" + }, + { + "x": 375, + "y": 380, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 167.39919354838707, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 180; Miles_per_Gallon: 12; Acceleration: 11.5", + "ariaRoleDescription": "point" + }, + { + "x": 354.1666666666667, + "y": 370, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 174.6774193548387, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 170; Miles_per_Gallon: 13; Acceleration: 12", + "ariaRoleDescription": "point" + }, + { + "x": 364.5833333333333, + "y": 370, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 174.6774193548387, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 175; Miles_per_Gallon: 13; Acceleration: 12", + "ariaRoleDescription": "point" + }, + { + "x": 229.16666666666666, + "y": 320, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 196.51209677419354, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 110; Miles_per_Gallon: 18; Acceleration: 13.5", + "ariaRoleDescription": "point" + }, + { + "x": 150, + "y": 280, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 276.5725806451613, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 72; Miles_per_Gallon: 22; Acceleration: 19", + "ariaRoleDescription": "point" + }, + { + "x": 208.33333333333334, + "y": 310, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 218.34677419354838, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 100; Miles_per_Gallon: 19; Acceleration: 15", + "ariaRoleDescription": "point" + }, + { + "x": 183.33333333333331, + "y": 320, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 211.0685483870968, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 88; Miles_per_Gallon: 18; Acceleration: 14.5", + "ariaRoleDescription": "point" + }, + { + "x": 179.16666666666666, + "y": 270, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 203.79032258064515, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 86; Miles_per_Gallon: 23; Acceleration: 14", + "ariaRoleDescription": "point" + }, + { + "x": 187.5, + "y": 219.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 203.79032258064515, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 90; Miles_per_Gallon: 28; Acceleration: 14", + "ariaRoleDescription": "point" + }, + { + "x": 145.83333333333334, + "y": 200, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 283.85080645161287, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 70; Miles_per_Gallon: 30; Acceleration: 19.5", + "ariaRoleDescription": "point" + }, + { + "x": 158.33333333333331, + "y": 200, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 211.0685483870968, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 76; Miles_per_Gallon: 30; Acceleration: 14.5", + "ariaRoleDescription": "point" + }, + { + "x": 135.41666666666666, + "y": 190, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 276.5725806451613, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 65; Miles_per_Gallon: 31; Acceleration: 19", + "ariaRoleDescription": "point" + }, + { + "x": 143.75, + "y": 150.00000000000003, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 262.01612903225805, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 69; Miles_per_Gallon: 35; Acceleration: 18", + "ariaRoleDescription": "point" + }, + { + "x": 125, + "y": 229.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 276.5725806451613, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 60; Miles_per_Gallon: 27; Acceleration: 19", + "ariaRoleDescription": "point" + }, + { + "x": 145.83333333333334, + "y": 240, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 298.4072580645161, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 70; Miles_per_Gallon: 26; Acceleration: 20.5", + "ariaRoleDescription": "point" + }, + { + "x": 197.91666666666666, + "y": 260, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 225.625, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 95; Miles_per_Gallon: 24; Acceleration: 15.5", + "ariaRoleDescription": "point" + }, + { + "x": 166.66666666666666, + "y": 250, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 247.45967741935482, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 80; Miles_per_Gallon: 25; Acceleration: 17", + "ariaRoleDescription": "point" + }, + { + "x": 112.5, + "y": 270, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 342.0766129032258, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 54; Miles_per_Gallon: 23; Acceleration: 23.5", + "ariaRoleDescription": "point" + }, + { + "x": 187.5, + "y": 300, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 283.85080645161287, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 90; Miles_per_Gallon: 20; Acceleration: 19.5", + "ariaRoleDescription": "point" + }, + { + "x": 179.16666666666666, + "y": 290.00000000000006, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 240.1814516129032, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 86; Miles_per_Gallon: 21; Acceleration: 16.5", + "ariaRoleDescription": "point" + }, + { + "x": 343.75, + "y": 370, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 174.6774193548387, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 165; Miles_per_Gallon: 13; Acceleration: 12", + "ariaRoleDescription": "point" + }, + { + "x": 364.5833333333333, + "y": 360, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 174.6774193548387, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 175; Miles_per_Gallon: 14; Acceleration: 12", + "ariaRoleDescription": "point" + }, + { + "x": 312.5, + "y": 350, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 196.51209677419354, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 150; Miles_per_Gallon: 15; Acceleration: 13.5", + "ariaRoleDescription": "point" + }, + { + "x": 318.75, + "y": 360, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 189.23387096774192, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 153; Miles_per_Gallon: 14; Acceleration: 13", + "ariaRoleDescription": "point" + }, + { + "x": 312.5, + "y": 329.99999999999994, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 167.39919354838707, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 150; Miles_per_Gallon: 17; Acceleration: 11.5", + "ariaRoleDescription": "point" + }, + { + "x": 433.33333333333337, + "y": 390, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 160.1209677419355, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 208; Miles_per_Gallon: 11; Acceleration: 11", + "ariaRoleDescription": "point" + }, + { + "x": 322.9166666666667, + "y": 370, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 196.51209677419354, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 155; Miles_per_Gallon: 13; Acceleration: 13.5", + "ariaRoleDescription": "point" + }, + { + "x": 333.3333333333333, + "y": 380, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 196.51209677419354, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 160; Miles_per_Gallon: 12; Acceleration: 13.5", + "ariaRoleDescription": "point" + }, + { + "x": 395.8333333333333, + "y": 370, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 181.95564516129033, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 190; Miles_per_Gallon: 13; Acceleration: 12.5", + "ariaRoleDescription": "point" + }, + { + "x": 202.08333333333334, + "y": 310, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 196.51209677419354, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 97; Miles_per_Gallon: 19; Acceleration: 13.5", + "ariaRoleDescription": "point" + }, + { + "x": 312.5, + "y": 350, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 181.95564516129033, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 150; Miles_per_Gallon: 15; Acceleration: 12.5", + "ariaRoleDescription": "point" + }, + { + "x": 270.8333333333333, + "y": 370, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 203.79032258064515, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 130; Miles_per_Gallon: 13; Acceleration: 14", + "ariaRoleDescription": "point" + }, + { + "x": 291.6666666666667, + "y": 370, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 232.90322580645162, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 140; Miles_per_Gallon: 13; Acceleration: 16", + "ariaRoleDescription": "point" + }, + { + "x": 312.5, + "y": 360, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 203.79032258064515, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 150; Miles_per_Gallon: 14; Acceleration: 14", + "ariaRoleDescription": "point" + }, + { + "x": 233.33333333333334, + "y": 320, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 211.0685483870968, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 112; Miles_per_Gallon: 18; Acceleration: 14.5", + "ariaRoleDescription": "point" + }, + { + "x": 158.33333333333331, + "y": 280, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 262.01612903225805, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 76; Miles_per_Gallon: 22; Acceleration: 18", + "ariaRoleDescription": "point" + }, + { + "x": 181.25, + "y": 290.00000000000006, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 283.85080645161287, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 87; Miles_per_Gallon: 21; Acceleration: 19.5", + "ariaRoleDescription": "point" + }, + { + "x": 143.75, + "y": 240, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 262.01612903225805, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 69; Miles_per_Gallon: 26; Acceleration: 18", + "ariaRoleDescription": "point" + }, + { + "x": 179.16666666666666, + "y": 280, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 232.90322580645162, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 86; Miles_per_Gallon: 22; Acceleration: 16", + "ariaRoleDescription": "point" + }, + { + "x": 191.66666666666669, + "y": 219.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 247.45967741935482, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 92; Miles_per_Gallon: 28; Acceleration: 17", + "ariaRoleDescription": "point" + }, + { + "x": 202.08333333333334, + "y": 270, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 211.0685483870968, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 97; Miles_per_Gallon: 23; Acceleration: 14.5", + "ariaRoleDescription": "point" + }, + { + "x": 166.66666666666666, + "y": 219.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 218.34677419354838, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 80; Miles_per_Gallon: 28; Acceleration: 15", + "ariaRoleDescription": "point" + }, + { + "x": 183.33333333333331, + "y": 229.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 240.1814516129032, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 88; Miles_per_Gallon: 27; Acceleration: 16.5", + "ariaRoleDescription": "point" + }, + { + "x": 364.5833333333333, + "y": 370, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 189.23387096774192, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 175; Miles_per_Gallon: 13; Acceleration: 13", + "ariaRoleDescription": "point" + }, + { + "x": 312.5, + "y": 360, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 167.39919354838707, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 150; Miles_per_Gallon: 14; Acceleration: 11.5", + "ariaRoleDescription": "point" + }, + { + "x": 302.0833333333333, + "y": 370, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 189.23387096774192, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 145; Miles_per_Gallon: 13; Acceleration: 13", + "ariaRoleDescription": "point" + }, + { + "x": 285.41666666666663, + "y": 360, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 211.0685483870968, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 137; Miles_per_Gallon: 14; Acceleration: 14.5", + "ariaRoleDescription": "point" + }, + { + "x": 312.5, + "y": 350, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 181.95564516129033, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 150; Miles_per_Gallon: 15; Acceleration: 12.5", + "ariaRoleDescription": "point" + }, + { + "x": 412.5, + "y": 380, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 167.39919354838707, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 198; Miles_per_Gallon: 12; Acceleration: 11.5", + "ariaRoleDescription": "point" + }, + { + "x": 312.5, + "y": 370, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 174.6774193548387, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 150; Miles_per_Gallon: 13; Acceleration: 12", + "ariaRoleDescription": "point" + }, + { + "x": 329.1666666666667, + "y": 370, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 189.23387096774192, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 158; Miles_per_Gallon: 13; Acceleration: 13", + "ariaRoleDescription": "point" + }, + { + "x": 312.5, + "y": 360, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 211.0685483870968, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 150; Miles_per_Gallon: 14; Acceleration: 14.5", + "ariaRoleDescription": "point" + }, + { + "x": 447.9166666666667, + "y": 370, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 160.1209677419355, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 215; Miles_per_Gallon: 13; Acceleration: 11", + "ariaRoleDescription": "point" + }, + { + "x": 468.75, + "y": 380, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 160.1209677419355, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 225; Miles_per_Gallon: 12; Acceleration: 11", + "ariaRoleDescription": "point" + }, + { + "x": 364.5833333333333, + "y": 370, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 160.1209677419355, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 175; Miles_per_Gallon: 13; Acceleration: 11", + "ariaRoleDescription": "point" + }, + { + "x": 218.75, + "y": 320, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 240.1814516129032, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 105; Miles_per_Gallon: 18; Acceleration: 16.5", + "ariaRoleDescription": "point" + }, + { + "x": 208.33333333333334, + "y": 339.99999999999994, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 262.01612903225805, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 100; Miles_per_Gallon: 16; Acceleration: 18", + "ariaRoleDescription": "point" + }, + { + "x": 208.33333333333334, + "y": 320, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 232.90322580645162, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 100; Miles_per_Gallon: 18; Acceleration: 16", + "ariaRoleDescription": "point" + }, + { + "x": 183.33333333333331, + "y": 320, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 240.1814516129032, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 88; Miles_per_Gallon: 18; Acceleration: 16.5", + "ariaRoleDescription": "point" + }, + { + "x": 197.91666666666666, + "y": 270, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 232.90322580645162, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 95; Miles_per_Gallon: 23; Acceleration: 16", + "ariaRoleDescription": "point" + }, + { + "x": 95.83333333333334, + "y": 240, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 305.68548387096774, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 46; Miles_per_Gallon: 26; Acceleration: 21", + "ariaRoleDescription": "point" + }, + { + "x": 312.5, + "y": 390, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 203.79032258064515, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 150; Miles_per_Gallon: 11; Acceleration: 14", + "ariaRoleDescription": "point" + }, + { + "x": 347.91666666666663, + "y": 380, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 181.95564516129033, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 167; Miles_per_Gallon: 12; Acceleration: 12.5", + "ariaRoleDescription": "point" + }, + { + "x": 354.1666666666667, + "y": 370, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 189.23387096774192, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 170; Miles_per_Gallon: 13; Acceleration: 13", + "ariaRoleDescription": "point" + }, + { + "x": 375, + "y": 380, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 181.95564516129033, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 180; Miles_per_Gallon: 12; Acceleration: 12.5", + "ariaRoleDescription": "point" + }, + { + "x": 208.33333333333334, + "y": 320, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 218.34677419354838, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 100; Miles_per_Gallon: 18; Acceleration: 15", + "ariaRoleDescription": "point" + }, + { + "x": 183.33333333333331, + "y": 300, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 276.5725806451613, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 88; Miles_per_Gallon: 20; Acceleration: 19", + "ariaRoleDescription": "point" + }, + { + "x": 150, + "y": 290.00000000000006, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 283.85080645161287, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 72; Miles_per_Gallon: 21; Acceleration: 19.5", + "ariaRoleDescription": "point" + }, + { + "x": 195.83333333333334, + "y": 280, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 240.1814516129032, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 94; Miles_per_Gallon: 22; Acceleration: 16.5", + "ariaRoleDescription": "point" + }, + { + "x": 187.5, + "y": 320, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 196.51209677419354, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 90; Miles_per_Gallon: 18; Acceleration: 13.5", + "ariaRoleDescription": "point" + }, + { + "x": 177.08333333333334, + "y": 310, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 269.2943548387097, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 85; Miles_per_Gallon: 19; Acceleration: 18.5", + "ariaRoleDescription": "point" + }, + { + "x": 222.91666666666669, + "y": 290.00000000000006, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 203.79032258064515, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 107; Miles_per_Gallon: 21; Acceleration: 14", + "ariaRoleDescription": "point" + }, + { + "x": 187.5, + "y": 240, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 225.625, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 90; Miles_per_Gallon: 26; Acceleration: 15.5", + "ariaRoleDescription": "point" + }, + { + "x": 302.0833333333333, + "y": 350, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 189.23387096774192, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 145; Miles_per_Gallon: 15; Acceleration: 13", + "ariaRoleDescription": "point" + }, + { + "x": 479.1666666666667, + "y": 339.99999999999994, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 138.28629032258064, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 230; Miles_per_Gallon: 16; Acceleration: 9.5", + "ariaRoleDescription": "point" + }, + { + "x": 102.08333333333333, + "y": 210.00000000000003, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 283.85080645161287, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 49; Miles_per_Gallon: 29; Acceleration: 19.5", + "ariaRoleDescription": "point" + }, + { + "x": 156.25, + "y": 260, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 225.625, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 75; Miles_per_Gallon: 24; Acceleration: 15.5", + "ariaRoleDescription": "point" + }, + { + "x": 189.58333333333331, + "y": 300, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 203.79032258064515, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 91; Miles_per_Gallon: 20; Acceleration: 14", + "ariaRoleDescription": "point" + }, + { + "x": 233.33333333333334, + "y": 310, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 225.625, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 112; Miles_per_Gallon: 19; Acceleration: 15.5", + "ariaRoleDescription": "point" + }, + { + "x": 312.5, + "y": 350, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 160.1209677419355, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 150; Miles_per_Gallon: 15; Acceleration: 11", + "ariaRoleDescription": "point" + }, + { + "x": 229.16666666666666, + "y": 260, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 203.79032258064515, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 110; Miles_per_Gallon: 24; Acceleration: 14", + "ariaRoleDescription": "point" + }, + { + "x": 254.16666666666666, + "y": 300, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 196.51209677419354, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 122; Miles_per_Gallon: 20; Acceleration: 13.5", + "ariaRoleDescription": "point" + }, + { + "x": 375, + "y": 390, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 160.1209677419355, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 180; Miles_per_Gallon: 11; Acceleration: 11", + "ariaRoleDescription": "point" + }, + { + "x": 197.91666666666666, + "y": 300, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 240.1814516129032, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 95; Miles_per_Gallon: 20; Acceleration: 16.5", + "ariaRoleDescription": "point" + }, + { + "x": 208.33333333333334, + "y": 310, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 232.90322580645162, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 100; Miles_per_Gallon: 19; Acceleration: 16", + "ariaRoleDescription": "point" + }, + { + "x": 208.33333333333334, + "y": 350, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 247.45967741935482, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 100; Miles_per_Gallon: 15; Acceleration: 17", + "ariaRoleDescription": "point" + }, + { + "x": 139.58333333333334, + "y": 190, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 276.5725806451613, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 67; Miles_per_Gallon: 31; Acceleration: 19", + "ariaRoleDescription": "point" + }, + { + "x": 166.66666666666666, + "y": 240, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 240.1814516129032, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 80; Miles_per_Gallon: 26; Acceleration: 16.5", + "ariaRoleDescription": "point" + }, + { + "x": 135.41666666666666, + "y": 180, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 305.68548387096774, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 65; Miles_per_Gallon: 32; Acceleration: 21", + "ariaRoleDescription": "point" + }, + { + "x": 156.25, + "y": 250, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 247.45967741935482, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 75; Miles_per_Gallon: 25; Acceleration: 17", + "ariaRoleDescription": "point" + }, + { + "x": 208.33333333333334, + "y": 339.99999999999994, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 247.45967741935482, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 100; Miles_per_Gallon: 16; Acceleration: 17", + "ariaRoleDescription": "point" + }, + { + "x": 229.16666666666666, + "y": 339.99999999999994, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 262.01612903225805, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 110; Miles_per_Gallon: 16; Acceleration: 18", + "ariaRoleDescription": "point" + }, + { + "x": 218.75, + "y": 320, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 240.1814516129032, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 105; Miles_per_Gallon: 18; Acceleration: 16.5", + "ariaRoleDescription": "point" + }, + { + "x": 291.6666666666667, + "y": 339.99999999999994, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 203.79032258064515, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 140; Miles_per_Gallon: 16; Acceleration: 14", + "ariaRoleDescription": "point" + }, + { + "x": 312.5, + "y": 370, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 211.0685483870968, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 150; Miles_per_Gallon: 13; Acceleration: 14.5", + "ariaRoleDescription": "point" + }, + { + "x": 312.5, + "y": 360, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 196.51209677419354, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 150; Miles_per_Gallon: 14; Acceleration: 13.5", + "ariaRoleDescription": "point" + }, + { + "x": 291.6666666666667, + "y": 360, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 232.90322580645162, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 140; Miles_per_Gallon: 14; Acceleration: 16", + "ariaRoleDescription": "point" + }, + { + "x": 312.5, + "y": 360, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 225.625, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 150; Miles_per_Gallon: 14; Acceleration: 15.5", + "ariaRoleDescription": "point" + }, + { + "x": 172.91666666666666, + "y": 210.00000000000003, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 240.1814516129032, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 83; Miles_per_Gallon: 29; Acceleration: 16.5", + "ariaRoleDescription": "point" + }, + { + "x": 139.58333333333334, + "y": 240, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 225.625, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 67; Miles_per_Gallon: 26; Acceleration: 15.5", + "ariaRoleDescription": "point" + }, + { + "x": 162.5, + "y": 240, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 211.0685483870968, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 78; Miles_per_Gallon: 26; Acceleration: 14.5", + "ariaRoleDescription": "point" + }, + { + "x": 108.33333333333334, + "y": 190, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 240.1814516129032, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 52; Miles_per_Gallon: 31; Acceleration: 16.5", + "ariaRoleDescription": "point" + }, + { + "x": 127.08333333333333, + "y": 180, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 276.5725806451613, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 61; Miles_per_Gallon: 32; Acceleration: 19", + "ariaRoleDescription": "point" + }, + { + "x": 156.25, + "y": 219.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 211.0685483870968, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 75; Miles_per_Gallon: 28; Acceleration: 14.5", + "ariaRoleDescription": "point" + }, + { + "x": 156.25, + "y": 260, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 225.625, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 75; Miles_per_Gallon: 24; Acceleration: 15.5", + "ariaRoleDescription": "point" + }, + { + "x": 156.25, + "y": 240, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 203.79032258064515, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 75; Miles_per_Gallon: 26; Acceleration: 14", + "ariaRoleDescription": "point" + }, + { + "x": 202.08333333333334, + "y": 260, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 218.34677419354838, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 97; Miles_per_Gallon: 24; Acceleration: 15", + "ariaRoleDescription": "point" + }, + { + "x": 193.75, + "y": 240, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 225.625, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 93; Miles_per_Gallon: 26; Acceleration: 15.5", + "ariaRoleDescription": "point" + }, + { + "x": 139.58333333333334, + "y": 190, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 232.90322580645162, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 67; Miles_per_Gallon: 31; Acceleration: 16", + "ariaRoleDescription": "point" + }, + { + "x": 197.91666666666666, + "y": 310, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 232.90322580645162, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 95; Miles_per_Gallon: 19; Acceleration: 16", + "ariaRoleDescription": "point" + }, + { + "x": 218.75, + "y": 320, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 232.90322580645162, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 105; Miles_per_Gallon: 18; Acceleration: 16", + "ariaRoleDescription": "point" + }, + { + "x": 150, + "y": 350, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 305.68548387096774, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 72; Miles_per_Gallon: 15; Acceleration: 21", + "ariaRoleDescription": "point" + }, + { + "x": 150, + "y": 350, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 283.85080645161287, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 72; Miles_per_Gallon: 15; Acceleration: 19.5", + "ariaRoleDescription": "point" + }, + { + "x": 354.1666666666667, + "y": 339.99999999999994, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 167.39919354838707, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 170; Miles_per_Gallon: 16; Acceleration: 11.5", + "ariaRoleDescription": "point" + }, + { + "x": 302.0833333333333, + "y": 350, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 203.79032258064515, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 145; Miles_per_Gallon: 15; Acceleration: 14", + "ariaRoleDescription": "point" + }, + { + "x": 312.5, + "y": 339.99999999999994, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 211.0685483870968, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 150; Miles_per_Gallon: 16; Acceleration: 14.5", + "ariaRoleDescription": "point" + }, + { + "x": 308.33333333333337, + "y": 360, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 196.51209677419354, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 148; Miles_per_Gallon: 14; Acceleration: 13.5", + "ariaRoleDescription": "point" + }, + { + "x": 229.16666666666666, + "y": 329.99999999999994, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 305.68548387096774, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 110; Miles_per_Gallon: 17; Acceleration: 21", + "ariaRoleDescription": "point" + }, + { + "x": 218.75, + "y": 339.99999999999994, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 269.2943548387097, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 105; Miles_per_Gallon: 16; Acceleration: 18.5", + "ariaRoleDescription": "point" + }, + { + "x": 229.16666666666666, + "y": 350, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 276.5725806451613, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 110; Miles_per_Gallon: 15; Acceleration: 19", + "ariaRoleDescription": "point" + }, + { + "x": 197.91666666666666, + "y": 320, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 276.5725806451613, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 95; Miles_per_Gallon: 18; Acceleration: 19", + "ariaRoleDescription": "point" + }, + { + "x": 229.16666666666666, + "y": 290.00000000000006, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 218.34677419354838, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 110; Miles_per_Gallon: 21; Acceleration: 15", + "ariaRoleDescription": "point" + }, + { + "x": 229.16666666666666, + "y": 300, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 196.51209677419354, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 110; Miles_per_Gallon: 20; Acceleration: 13.5", + "ariaRoleDescription": "point" + }, + { + "x": 268.75, + "y": 370, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 174.6774193548387, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 129; Miles_per_Gallon: 13; Acceleration: 12", + "ariaRoleDescription": "point" + }, + { + "x": 156.25, + "y": 210.00000000000003, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 232.90322580645162, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 75; Miles_per_Gallon: 29; Acceleration: 16", + "ariaRoleDescription": "point" + }, + { + "x": 172.91666666666666, + "y": 270, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 247.45967741935482, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 83; Miles_per_Gallon: 23; Acceleration: 17", + "ariaRoleDescription": "point" + }, + { + "x": 208.33333333333334, + "y": 300, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 232.90322580645162, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 100; Miles_per_Gallon: 20; Acceleration: 16", + "ariaRoleDescription": "point" + }, + { + "x": 162.5, + "y": 270, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 269.2943548387097, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 78; Miles_per_Gallon: 23; Acceleration: 18.5", + "ariaRoleDescription": "point" + }, + { + "x": 200, + "y": 260, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 196.51209677419354, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 96; Miles_per_Gallon: 24; Acceleration: 13.5", + "ariaRoleDescription": "point" + }, + { + "x": 147.91666666666666, + "y": 250, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 240.1814516129032, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 71; Miles_per_Gallon: 25; Acceleration: 16.5", + "ariaRoleDescription": "point" + }, + { + "x": 202.08333333333334, + "y": 260, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 247.45967741935482, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 97; Miles_per_Gallon: 24; Acceleration: 17", + "ariaRoleDescription": "point" + }, + { + "x": 202.08333333333334, + "y": 320, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 211.0685483870968, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 97; Miles_per_Gallon: 18; Acceleration: 14.5", + "ariaRoleDescription": "point" + }, + { + "x": 145.83333333333334, + "y": 210.00000000000003, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 203.79032258064515, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 70; Miles_per_Gallon: 29; Acceleration: 14", + "ariaRoleDescription": "point" + }, + { + "x": 187.5, + "y": 310, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 247.45967741935482, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 90; Miles_per_Gallon: 19; Acceleration: 17", + "ariaRoleDescription": "point" + }, + { + "x": 197.91666666666666, + "y": 270, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 218.34677419354838, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 95; Miles_per_Gallon: 23; Acceleration: 15", + "ariaRoleDescription": "point" + }, + { + "x": 183.33333333333331, + "y": 270, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 247.45967741935482, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 88; Miles_per_Gallon: 23; Acceleration: 17", + "ariaRoleDescription": "point" + }, + { + "x": 204.16666666666666, + "y": 280, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 211.0685483870968, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 98; Miles_per_Gallon: 22; Acceleration: 14.5", + "ariaRoleDescription": "point" + }, + { + "x": 239.58333333333334, + "y": 250, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 196.51209677419354, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 115; Miles_per_Gallon: 25; Acceleration: 13.5", + "ariaRoleDescription": "point" + }, + { + "x": 110.41666666666666, + "y": 169.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 254.73790322580643, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 53; Miles_per_Gallon: 33; Acceleration: 17.5", + "ariaRoleDescription": "point" + }, + { + "x": 179.16666666666666, + "y": 219.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 225.625, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 86; Miles_per_Gallon: 28; Acceleration: 15.5", + "ariaRoleDescription": "point" + }, + { + "x": 168.75, + "y": 250, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 246.00403225806448, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 81; Miles_per_Gallon: 25; Acceleration: 16.9", + "ariaRoleDescription": "point" + }, + { + "x": 191.66666666666669, + "y": 250, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 216.89112903225808, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 92; Miles_per_Gallon: 25; Acceleration: 14.9", + "ariaRoleDescription": "point" + }, + { + "x": 164.58333333333334, + "y": 240, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 257.6491935483871, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 79; Miles_per_Gallon: 26; Acceleration: 17.7", + "ariaRoleDescription": "point" + }, + { + "x": 172.91666666666666, + "y": 229.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 222.71370967741936, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 83; Miles_per_Gallon: 27; Acceleration: 15.3", + "ariaRoleDescription": "point" + }, + { + "x": 291.6666666666667, + "y": 325, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 189.23387096774192, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 140; Miles_per_Gallon: 17.5; Acceleration: 13", + "ariaRoleDescription": "point" + }, + { + "x": 312.5, + "y": 339.99999999999994, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 189.23387096774192, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 150; Miles_per_Gallon: 16; Acceleration: 13", + "ariaRoleDescription": "point" + }, + { + "x": 250, + "y": 345, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 202.33467741935482, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 120; Miles_per_Gallon: 15.5; Acceleration: 13.9", + "ariaRoleDescription": "point" + }, + { + "x": 316.66666666666663, + "y": 355, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 186.32258064516128, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 152; Miles_per_Gallon: 14.5; Acceleration: 12.8", + "ariaRoleDescription": "point" + }, + { + "x": 208.33333333333334, + "y": 280, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 224.16935483870967, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 100; Miles_per_Gallon: 22; Acceleration: 15.4", + "ariaRoleDescription": "point" + }, + { + "x": 218.75, + "y": 280, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 211.0685483870968, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 105; Miles_per_Gallon: 22; Acceleration: 14.5", + "ariaRoleDescription": "point" + }, + { + "x": 168.75, + "y": 260, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 256.19354838709677, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 81; Miles_per_Gallon: 24; Acceleration: 17.6", + "ariaRoleDescription": "point" + }, + { + "x": 187.5, + "y": 275, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 256.19354838709677, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 90; Miles_per_Gallon: 22.5; Acceleration: 17.6", + "ariaRoleDescription": "point" + }, + { + "x": 108.33333333333334, + "y": 210.00000000000003, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 323.1532258064516, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 52; Miles_per_Gallon: 29; Acceleration: 22.2", + "ariaRoleDescription": "point" + }, + { + "x": 125, + "y": 255, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 321.6975806451613, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 60; Miles_per_Gallon: 24.5; Acceleration: 22.1", + "ariaRoleDescription": "point" + }, + { + "x": 145.83333333333334, + "y": 210.00000000000003, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 206.7016129032258, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 70; Miles_per_Gallon: 29; Acceleration: 14.2", + "ariaRoleDescription": "point" + }, + { + "x": 110.41666666666666, + "y": 169.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 253.2822580645161, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 53; Miles_per_Gallon: 33; Acceleration: 17.4", + "ariaRoleDescription": "point" + }, + { + "x": 208.33333333333334, + "y": 300, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 257.6491935483871, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 100; Miles_per_Gallon: 20; Acceleration: 17.7", + "ariaRoleDescription": "point" + }, + { + "x": 162.5, + "y": 320, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 305.68548387096774, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 78; Miles_per_Gallon: 18; Acceleration: 21", + "ariaRoleDescription": "point" + }, + { + "x": 229.16666666666666, + "y": 315, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 235.81451612903226, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 110; Miles_per_Gallon: 18.5; Acceleration: 16.2", + "ariaRoleDescription": "point" + }, + { + "x": 197.91666666666666, + "y": 325, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 259.10483870967744, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 95; Miles_per_Gallon: 17.5; Acceleration: 17.8", + "ariaRoleDescription": "point" + }, + { + "x": 147.91666666666666, + "y": 205.00000000000003, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 177.58870967741933, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 71; Miles_per_Gallon: 29.5; Acceleration: 12.2", + "ariaRoleDescription": "point" + }, + { + "x": 145.83333333333334, + "y": 180, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 247.45967741935482, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 70; Miles_per_Gallon: 32; Acceleration: 17", + "ariaRoleDescription": "point" + }, + { + "x": 156.25, + "y": 219.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 238.7258064516129, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 75; Miles_per_Gallon: 28; Acceleration: 16.4", + "ariaRoleDescription": "point" + }, + { + "x": 150, + "y": 235, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 197.96774193548384, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 72; Miles_per_Gallon: 26.5; Acceleration: 13.6", + "ariaRoleDescription": "point" + }, + { + "x": 212.5, + "y": 300, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 228.53629032258064, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 102; Miles_per_Gallon: 20; Acceleration: 15.7", + "ariaRoleDescription": "point" + }, + { + "x": 312.5, + "y": 370, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 192.14516129032256, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 150; Miles_per_Gallon: 13; Acceleration: 13.2", + "ariaRoleDescription": "point" + }, + { + "x": 183.33333333333331, + "y": 310, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 318.7862903225806, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 88; Miles_per_Gallon: 19; Acceleration: 21.9", + "ariaRoleDescription": "point" + }, + { + "x": 225, + "y": 310, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 225.625, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 108; Miles_per_Gallon: 19; Acceleration: 15.5", + "ariaRoleDescription": "point" + }, + { + "x": 250, + "y": 334.99999999999994, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 243.09274193548384, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 120; Miles_per_Gallon: 16.5; Acceleration: 16.7", + "ariaRoleDescription": "point" + }, + { + "x": 375, + "y": 334.99999999999994, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 176.13306451612902, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 180; Miles_per_Gallon: 16.5; Acceleration: 12.1", + "ariaRoleDescription": "point" + }, + { + "x": 302.0833333333333, + "y": 370, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 174.6774193548387, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 145; Miles_per_Gallon: 13; Acceleration: 12", + "ariaRoleDescription": "point" + }, + { + "x": 270.8333333333333, + "y": 370, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 218.34677419354838, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 130; Miles_per_Gallon: 13; Acceleration: 15", + "ariaRoleDescription": "point" + }, + { + "x": 312.5, + "y": 370, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 203.79032258064515, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 150; Miles_per_Gallon: 13; Acceleration: 14", + "ariaRoleDescription": "point" + }, + { + "x": 141.66666666666666, + "y": 185, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 269.2943548387097, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 68; Miles_per_Gallon: 31.5; Acceleration: 18.5", + "ariaRoleDescription": "point" + }, + { + "x": 166.66666666666666, + "y": 200, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 215.43548387096774, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 80; Miles_per_Gallon: 30; Acceleration: 14.8", + "ariaRoleDescription": "point" + }, + { + "x": 120.83333333333333, + "y": 140, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 270.75, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 58; Miles_per_Gallon: 36; Acceleration: 18.6", + "ariaRoleDescription": "point" + }, + { + "x": 200, + "y": 245, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 225.625, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 96; Miles_per_Gallon: 25.5; Acceleration: 15.5", + "ariaRoleDescription": "point" + }, + { + "x": 145.83333333333334, + "y": 164.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 244.5483870967742, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 70; Miles_per_Gallon: 33.5; Acceleration: 16.8", + "ariaRoleDescription": "point" + }, + { + "x": 302.0833333333333, + "y": 325, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 181.95564516129033, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 145; Miles_per_Gallon: 17.5; Acceleration: 12.5", + "ariaRoleDescription": "point" + }, + { + "x": 229.16666666666666, + "y": 329.99999999999994, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 276.5725806451613, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 110; Miles_per_Gallon: 17; Acceleration: 19", + "ariaRoleDescription": "point" + }, + { + "x": 302.0833333333333, + "y": 345, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 199.42338709677418, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 145; Miles_per_Gallon: 15.5; Acceleration: 13.7", + "ariaRoleDescription": "point" + }, + { + "x": 270.8333333333333, + "y": 350, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 216.89112903225808, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 130; Miles_per_Gallon: 15; Acceleration: 14.9", + "ariaRoleDescription": "point" + }, + { + "x": 229.16666666666666, + "y": 325, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 238.7258064516129, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 110; Miles_per_Gallon: 17.5; Acceleration: 16.4", + "ariaRoleDescription": "point" + }, + { + "x": 218.75, + "y": 295.00000000000006, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 246.00403225806448, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 105; Miles_per_Gallon: 20.5; Acceleration: 16.9", + "ariaRoleDescription": "point" + }, + { + "x": 208.33333333333334, + "y": 310, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 257.6491935483871, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 100; Miles_per_Gallon: 19; Acceleration: 17.7", + "ariaRoleDescription": "point" + }, + { + "x": 204.16666666666666, + "y": 315, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 276.5725806451613, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 98; Miles_per_Gallon: 18.5; Acceleration: 19", + "ariaRoleDescription": "point" + }, + { + "x": 375, + "y": 339.99999999999994, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 161.5766129032258, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 180; Miles_per_Gallon: 16; Acceleration: 11.1", + "ariaRoleDescription": "point" + }, + { + "x": 354.1666666666667, + "y": 345, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 165.94354838709677, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 170; Miles_per_Gallon: 15.5; Acceleration: 11.4", + "ariaRoleDescription": "point" + }, + { + "x": 395.8333333333333, + "y": 345, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 177.58870967741933, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 190; Miles_per_Gallon: 15.5; Acceleration: 12.2", + "ariaRoleDescription": "point" + }, + { + "x": 310.4166666666667, + "y": 339.99999999999994, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 211.0685483870968, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 149; Miles_per_Gallon: 16; Acceleration: 14.5", + "ariaRoleDescription": "point" + }, + { + "x": 162.5, + "y": 210.00000000000003, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 211.0685483870968, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 78; Miles_per_Gallon: 29; Acceleration: 14.5", + "ariaRoleDescription": "point" + }, + { + "x": 183.33333333333331, + "y": 255, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 232.90322580645162, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 88; Miles_per_Gallon: 24.5; Acceleration: 16", + "ariaRoleDescription": "point" + }, + { + "x": 156.25, + "y": 240, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 264.92741935483866, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 75; Miles_per_Gallon: 26; Acceleration: 18.2", + "ariaRoleDescription": "point" + }, + { + "x": 185.41666666666669, + "y": 245, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 229.99193548387098, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 89; Miles_per_Gallon: 25.5; Acceleration: 15.8", + "ariaRoleDescription": "point" + }, + { + "x": 131.25, + "y": 195, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 247.45967741935482, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 63; Miles_per_Gallon: 30.5; Acceleration: 17", + "ariaRoleDescription": "point" + }, + { + "x": 172.91666666666666, + "y": 164.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 231.44758064516128, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 83; Miles_per_Gallon: 33.5; Acceleration: 15.9", + "ariaRoleDescription": "point" + }, + { + "x": 139.58333333333334, + "y": 200, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 238.7258064516129, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 67; Miles_per_Gallon: 30; Acceleration: 16.4", + "ariaRoleDescription": "point" + }, + { + "x": 162.5, + "y": 195, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 205.24596774193546, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 78; Miles_per_Gallon: 30.5; Acceleration: 14.1", + "ariaRoleDescription": "point" + }, + { + "x": 202.08333333333334, + "y": 280, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 211.0685483870968, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 97; Miles_per_Gallon: 22; Acceleration: 14.5", + "ariaRoleDescription": "point" + }, + { + "x": 229.16666666666666, + "y": 285.00000000000006, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 186.32258064516128, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 110; Miles_per_Gallon: 21.5; Acceleration: 12.8", + "ariaRoleDescription": "point" + }, + { + "x": 229.16666666666666, + "y": 285.00000000000006, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 196.51209677419354, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 110; Miles_per_Gallon: 21.5; Acceleration: 13.5", + "ariaRoleDescription": "point" + }, + { + "x": 100, + "y": 69, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 312.96370967741933, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 48; Miles_per_Gallon: 43.1; Acceleration: 21.5", + "ariaRoleDescription": "point" + }, + { + "x": 137.5, + "y": 139, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 209.61290322580646, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 66; Miles_per_Gallon: 36.1; Acceleration: 14.4", + "ariaRoleDescription": "point" + }, + { + "x": 108.33333333333334, + "y": 172.00000000000003, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 282.39516129032256, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 52; Miles_per_Gallon: 32.8; Acceleration: 19.4", + "ariaRoleDescription": "point" + }, + { + "x": 145.83333333333334, + "y": 106.00000000000004, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 270.75, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 70; Miles_per_Gallon: 39.4; Acceleration: 18.6", + "ariaRoleDescription": "point" + }, + { + "x": 125, + "y": 139, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 238.7258064516129, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 60; Miles_per_Gallon: 36.1; Acceleration: 16.4", + "ariaRoleDescription": "point" + }, + { + "x": 229.16666666666666, + "y": 301.00000000000006, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 225.625, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 110; Miles_per_Gallon: 19.9; Acceleration: 15.5", + "ariaRoleDescription": "point" + }, + { + "x": 291.6666666666667, + "y": 306.00000000000006, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 192.14516129032256, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 140; Miles_per_Gallon: 19.4; Acceleration: 13.2", + "ariaRoleDescription": "point" + }, + { + "x": 289.58333333333337, + "y": 298.00000000000006, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 186.32258064516128, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 139; Miles_per_Gallon: 20.2; Acceleration: 12.8", + "ariaRoleDescription": "point" + }, + { + "x": 218.75, + "y": 308, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 279.48387096774195, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 105; Miles_per_Gallon: 19.2; Acceleration: 19.2", + "ariaRoleDescription": "point" + }, + { + "x": 197.91666666666666, + "y": 295.00000000000006, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 264.92741935483866, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 95; Miles_per_Gallon: 20.5; Acceleration: 18.2", + "ariaRoleDescription": "point" + }, + { + "x": 177.08333333333334, + "y": 298.00000000000006, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 229.99193548387098, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 85; Miles_per_Gallon: 20.2; Acceleration: 15.8", + "ariaRoleDescription": "point" + }, + { + "x": 183.33333333333331, + "y": 249, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 224.16935483870967, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 88; Miles_per_Gallon: 25.1; Acceleration: 15.4", + "ariaRoleDescription": "point" + }, + { + "x": 208.33333333333334, + "y": 295.00000000000006, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 250.37096774193546, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 100; Miles_per_Gallon: 20.5; Acceleration: 17.2", + "ariaRoleDescription": "point" + }, + { + "x": 187.5, + "y": 306.00000000000006, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 250.37096774193546, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 90; Miles_per_Gallon: 19.4; Acceleration: 17.2", + "ariaRoleDescription": "point" + }, + { + "x": 218.75, + "y": 294, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 229.99193548387098, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 105; Miles_per_Gallon: 20.6; Acceleration: 15.8", + "ariaRoleDescription": "point" + }, + { + "x": 177.08333333333334, + "y": 292, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 243.09274193548384, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 85; Miles_per_Gallon: 20.8; Acceleration: 16.7", + "ariaRoleDescription": "point" + }, + { + "x": 229.16666666666666, + "y": 313.99999999999994, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 272.2056451612903, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 110; Miles_per_Gallon: 18.6; Acceleration: 18.7", + "ariaRoleDescription": "point" + }, + { + "x": 250, + "y": 318.99999999999994, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 219.80241935483872, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 120; Miles_per_Gallon: 18.1; Acceleration: 15.1", + "ariaRoleDescription": "point" + }, + { + "x": 302.0833333333333, + "y": 308, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 192.14516129032256, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 145; Miles_per_Gallon: 19.2; Acceleration: 13.2", + "ariaRoleDescription": "point" + }, + { + "x": 343.75, + "y": 323, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 195.0564516129032, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 165; Miles_per_Gallon: 17.7; Acceleration: 13.4", + "ariaRoleDescription": "point" + }, + { + "x": 289.58333333333337, + "y": 318.99999999999994, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 163.0322580645161, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 139; Miles_per_Gallon: 18.1; Acceleration: 11.2", + "ariaRoleDescription": "point" + }, + { + "x": 291.6666666666667, + "y": 325, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 199.42338709677418, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 140; Miles_per_Gallon: 17.5; Acceleration: 13.7", + "ariaRoleDescription": "point" + }, + { + "x": 141.66666666666666, + "y": 200, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 240.1814516129032, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 68; Miles_per_Gallon: 30; Acceleration: 16.5", + "ariaRoleDescription": "point" + }, + { + "x": 197.91666666666666, + "y": 224.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 206.7016129032258, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 95; Miles_per_Gallon: 27.5; Acceleration: 14.2", + "ariaRoleDescription": "point" + }, + { + "x": 202.08333333333334, + "y": 227.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 213.97983870967738, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 97; Miles_per_Gallon: 27.2; Acceleration: 14.7", + "ariaRoleDescription": "point" + }, + { + "x": 156.25, + "y": 191, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 211.0685483870968, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 75; Miles_per_Gallon: 30.9; Acceleration: 14.5", + "ariaRoleDescription": "point" + }, + { + "x": 197.91666666666666, + "y": 289, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 215.43548387096774, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 95; Miles_per_Gallon: 21.1; Acceleration: 14.8", + "ariaRoleDescription": "point" + }, + { + "x": 218.75, + "y": 268, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 243.09274193548384, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 105; Miles_per_Gallon: 23.2; Acceleration: 16.7", + "ariaRoleDescription": "point" + }, + { + "x": 177.08333333333334, + "y": 262, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 256.19354838709677, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 85; Miles_per_Gallon: 23.8; Acceleration: 17.6", + "ariaRoleDescription": "point" + }, + { + "x": 202.08333333333334, + "y": 261, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 216.89112903225808, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 97; Miles_per_Gallon: 23.9; Acceleration: 14.9", + "ariaRoleDescription": "point" + }, + { + "x": 214.58333333333331, + "y": 297, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 231.44758064516128, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 103; Miles_per_Gallon: 20.3; Acceleration: 15.9", + "ariaRoleDescription": "point" + }, + { + "x": 260.4166666666667, + "y": 329.99999999999994, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 197.96774193548384, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 125; Miles_per_Gallon: 17; Acceleration: 13.6", + "ariaRoleDescription": "point" + }, + { + "x": 239.58333333333334, + "y": 284, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 228.53629032258064, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 115; Miles_per_Gallon: 21.6; Acceleration: 15.7", + "ariaRoleDescription": "point" + }, + { + "x": 277.08333333333337, + "y": 337.99999999999994, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 229.99193548387098, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 133; Miles_per_Gallon: 16.2; Acceleration: 15.8", + "ariaRoleDescription": "point" + }, + { + "x": 147.91666666666666, + "y": 185, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 216.89112903225808, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 71; Miles_per_Gallon: 31.5; Acceleration: 14.9", + "ariaRoleDescription": "point" + }, + { + "x": 141.66666666666666, + "y": 205.00000000000003, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 241.63709677419357, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 68; Miles_per_Gallon: 29.5; Acceleration: 16.6", + "ariaRoleDescription": "point" + }, + { + "x": 239.58333333333334, + "y": 285.00000000000006, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 224.16935483870967, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 115; Miles_per_Gallon: 21.5; Acceleration: 15.4", + "ariaRoleDescription": "point" + }, + { + "x": 177.08333333333334, + "y": 302, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 264.92741935483866, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 85; Miles_per_Gallon: 19.8; Acceleration: 18.2", + "ariaRoleDescription": "point" + }, + { + "x": 183.33333333333331, + "y": 277, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 251.82661290322582, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 88; Miles_per_Gallon: 22.3; Acceleration: 17.3", + "ariaRoleDescription": "point" + }, + { + "x": 187.5, + "y": 298.00000000000006, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 264.92741935483866, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 90; Miles_per_Gallon: 20.2; Acceleration: 18.2", + "ariaRoleDescription": "point" + }, + { + "x": 229.16666666666666, + "y": 294, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 241.63709677419357, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 110; Miles_per_Gallon: 20.6; Acceleration: 16.6", + "ariaRoleDescription": "point" + }, + { + "x": 270.8333333333333, + "y": 329.99999999999994, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 224.16935483870967, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 130; Miles_per_Gallon: 17; Acceleration: 15.4", + "ariaRoleDescription": "point" + }, + { + "x": 268.75, + "y": 323.99999999999994, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 195.0564516129032, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 129; Miles_per_Gallon: 17.6; Acceleration: 13.4", + "ariaRoleDescription": "point" + }, + { + "x": 287.5, + "y": 334.99999999999994, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 192.14516129032256, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 138; Miles_per_Gallon: 16.5; Acceleration: 13.2", + "ariaRoleDescription": "point" + }, + { + "x": 281.25, + "y": 318, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 221.258064516129, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 135; Miles_per_Gallon: 18.2; Acceleration: 15.2", + "ariaRoleDescription": "point" + }, + { + "x": 322.9166666666667, + "y": 331, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 216.89112903225808, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 155; Miles_per_Gallon: 16.9; Acceleration: 14.9", + "ariaRoleDescription": "point" + }, + { + "x": 295.8333333333333, + "y": 345, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 208.15725806451616, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 142; Miles_per_Gallon: 15.5; Acceleration: 14.3", + "ariaRoleDescription": "point" + }, + { + "x": 260.4166666666667, + "y": 308, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 218.34677419354838, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 125; Miles_per_Gallon: 19.2; Acceleration: 15", + "ariaRoleDescription": "point" + }, + { + "x": 312.5, + "y": 315, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 189.23387096774192, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 150; Miles_per_Gallon: 18.5; Acceleration: 13", + "ariaRoleDescription": "point" + }, + { + "x": 147.91666666666666, + "y": 181, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 203.79032258064515, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 71; Miles_per_Gallon: 31.9; Acceleration: 14", + "ariaRoleDescription": "point" + }, + { + "x": 135.41666666666666, + "y": 158.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 221.258064516129, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 65; Miles_per_Gallon: 34.1; Acceleration: 15.2", + "ariaRoleDescription": "point" + }, + { + "x": 166.66666666666666, + "y": 142.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 209.61290322580646, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 80; Miles_per_Gallon: 35.7; Acceleration: 14.4", + "ariaRoleDescription": "point" + }, + { + "x": 166.66666666666666, + "y": 226.00000000000003, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 218.34677419354838, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 80; Miles_per_Gallon: 27.4; Acceleration: 15", + "ariaRoleDescription": "point" + }, + { + "x": 160.41666666666669, + "y": 246, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 292.5846774193549, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 77; Miles_per_Gallon: 25.4; Acceleration: 20.1", + "ariaRoleDescription": "point" + }, + { + "x": 260.4166666666667, + "y": 270, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 253.2822580645161, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 125; Miles_per_Gallon: 23; Acceleration: 17.4", + "ariaRoleDescription": "point" + }, + { + "x": 147.91666666666666, + "y": 227.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 361, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 71; Miles_per_Gallon: 27.2; Acceleration: 24.8", + "ariaRoleDescription": "point" + }, + { + "x": 187.5, + "y": 261, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 323.1532258064516, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 90; Miles_per_Gallon: 23.9; Acceleration: 22.2", + "ariaRoleDescription": "point" + }, + { + "x": 145.83333333333334, + "y": 157.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 192.14516129032256, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 70; Miles_per_Gallon: 34.2; Acceleration: 13.2", + "ariaRoleDescription": "point" + }, + { + "x": 145.83333333333334, + "y": 155.00000000000003, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 216.89112903225808, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 70; Miles_per_Gallon: 34.5; Acceleration: 14.9", + "ariaRoleDescription": "point" + }, + { + "x": 135.41666666666666, + "y": 182, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 279.48387096774195, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 65; Miles_per_Gallon: 31.8; Acceleration: 19.2", + "ariaRoleDescription": "point" + }, + { + "x": 143.75, + "y": 127, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 213.97983870967738, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 69; Miles_per_Gallon: 37.3; Acceleration: 14.7", + "ariaRoleDescription": "point" + }, + { + "x": 187.5, + "y": 216.00000000000003, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 232.90322580645162, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 90; Miles_per_Gallon: 28.4; Acceleration: 16", + "ariaRoleDescription": "point" + }, + { + "x": 239.58333333333334, + "y": 211.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 164.48790322580646, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 115; Miles_per_Gallon: 28.8; Acceleration: 11.3", + "ariaRoleDescription": "point" + }, + { + "x": 239.58333333333334, + "y": 231.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 187.77822580645162, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 115; Miles_per_Gallon: 26.8; Acceleration: 12.9", + "ariaRoleDescription": "point" + }, + { + "x": 187.5, + "y": 164.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 192.14516129032256, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 90; Miles_per_Gallon: 33.5; Acceleration: 13.2", + "ariaRoleDescription": "point" + }, + { + "x": 158.33333333333331, + "y": 85.00000000000001, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 213.97983870967738, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 76; Miles_per_Gallon: 41.5; Acceleration: 14.7", + "ariaRoleDescription": "point" + }, + { + "x": 125, + "y": 119, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 273.66129032258067, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 60; Miles_per_Gallon: 38.1; Acceleration: 18.8", + "ariaRoleDescription": "point" + }, + { + "x": 145.83333333333334, + "y": 179, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 225.625, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 70; Miles_per_Gallon: 32.1; Acceleration: 15.5", + "ariaRoleDescription": "point" + }, + { + "x": 135.41666666666666, + "y": 127.99999999999994, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 238.7258064516129, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 65; Miles_per_Gallon: 37.2; Acceleration: 16.4", + "ariaRoleDescription": "point" + }, + { + "x": 187.5, + "y": 219.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 240.1814516129032, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 90; Miles_per_Gallon: 28; Acceleration: 16.5", + "ariaRoleDescription": "point" + }, + { + "x": 183.33333333333331, + "y": 236, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 263.4717741935484, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 88; Miles_per_Gallon: 26.4; Acceleration: 18.1", + "ariaRoleDescription": "point" + }, + { + "x": 187.5, + "y": 257, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 292.5846774193549, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 90; Miles_per_Gallon: 24.3; Acceleration: 20.1", + "ariaRoleDescription": "point" + }, + { + "x": 187.5, + "y": 309, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 272.2056451612903, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 90; Miles_per_Gallon: 19.1; Acceleration: 18.7", + "ariaRoleDescription": "point" + }, + { + "x": 162.5, + "y": 157.00000000000003, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 229.99193548387098, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 78; Miles_per_Gallon: 34.3; Acceleration: 15.8", + "ariaRoleDescription": "point" + }, + { + "x": 187.5, + "y": 202, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 225.625, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 90; Miles_per_Gallon: 29.8; Acceleration: 15.5", + "ariaRoleDescription": "point" + }, + { + "x": 156.25, + "y": 187, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 254.73790322580643, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 75; Miles_per_Gallon: 31.3; Acceleration: 17.5", + "ariaRoleDescription": "point" + }, + { + "x": 191.66666666666669, + "y": 130, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 218.34677419354838, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 92; Miles_per_Gallon: 37; Acceleration: 15", + "ariaRoleDescription": "point" + }, + { + "x": 156.25, + "y": 178, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 221.258064516129, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 75; Miles_per_Gallon: 32.2; Acceleration: 15.2", + "ariaRoleDescription": "point" + }, + { + "x": 135.41666666666666, + "y": 33.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 260.5604838709677, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 65; Miles_per_Gallon: 46.6; Acceleration: 17.9", + "ariaRoleDescription": "point" + }, + { + "x": 218.75, + "y": 221.00000000000003, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 209.61290322580646, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 105; Miles_per_Gallon: 27.9; Acceleration: 14.4", + "ariaRoleDescription": "point" + }, + { + "x": 135.41666666666666, + "y": 92.00000000000003, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 279.48387096774195, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 65; Miles_per_Gallon: 40.8; Acceleration: 19.2", + "ariaRoleDescription": "point" + }, + { + "x": 100, + "y": 57.00000000000005, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 315.875, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 48; Miles_per_Gallon: 44.3; Acceleration: 21.7", + "ariaRoleDescription": "point" + }, + { + "x": 100, + "y": 66, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 344.9879032258064, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 48; Miles_per_Gallon: 43.4; Acceleration: 23.7", + "ariaRoleDescription": "point" + }, + { + "x": 139.58333333333334, + "y": 136, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 289.67338709677415, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 67; Miles_per_Gallon: 36.4; Acceleration: 19.9", + "ariaRoleDescription": "point" + }, + { + "x": 139.58333333333334, + "y": 200, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 317.3306451612903, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 67; Miles_per_Gallon: 30; Acceleration: 21.8", + "ariaRoleDescription": "point" + }, + { + "x": 139.58333333333334, + "y": 53.99999999999999, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 200.87903225806454, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 67; Miles_per_Gallon: 44.6; Acceleration: 13.8", + "ariaRoleDescription": "point" + }, + { + "x": 139.58333333333334, + "y": 162.00000000000003, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 262.01612903225805, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 67; Miles_per_Gallon: 33.8; Acceleration: 18", + "ariaRoleDescription": "point" + }, + { + "x": 129.16666666666669, + "y": 202, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 222.71370967741936, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 62; Miles_per_Gallon: 29.8; Acceleration: 15.3", + "ariaRoleDescription": "point" + }, + { + "x": 275, + "y": 173, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 165.94354838709677, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 132; Miles_per_Gallon: 32.7; Acceleration: 11.4", + "ariaRoleDescription": "point" + }, + { + "x": 208.33333333333334, + "y": 263, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 181.95564516129033, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 100; Miles_per_Gallon: 23.7; Acceleration: 12.5", + "ariaRoleDescription": "point" + }, + { + "x": 183.33333333333331, + "y": 150.00000000000003, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 219.80241935483872, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 88; Miles_per_Gallon: 35; Acceleration: 15.1", + "ariaRoleDescription": "point" + }, + { + "x": 150, + "y": 176, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 247.45967741935482, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 72; Miles_per_Gallon: 32.4; Acceleration: 17", + "ariaRoleDescription": "point" + }, + { + "x": 175, + "y": 227.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 228.53629032258064, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 84; Miles_per_Gallon: 27.2; Acceleration: 15.7", + "ariaRoleDescription": "point" + }, + { + "x": 175, + "y": 234, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 238.7258064516129, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 84; Miles_per_Gallon: 26.6; Acceleration: 16.4", + "ariaRoleDescription": "point" + }, + { + "x": 191.66666666666669, + "y": 242, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 209.61290322580646, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 92; Miles_per_Gallon: 25.8; Acceleration: 14.4", + "ariaRoleDescription": "point" + }, + { + "x": 229.16666666666666, + "y": 265, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 183.41129032258064, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 110; Miles_per_Gallon: 23.5; Acceleration: 12.6", + "ariaRoleDescription": "point" + }, + { + "x": 175, + "y": 200, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 187.77822580645162, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 84; Miles_per_Gallon: 30; Acceleration: 12.9", + "ariaRoleDescription": "point" + }, + { + "x": 120.83333333333333, + "y": 108.99999999999999, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 246.00403225806448, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 58; Miles_per_Gallon: 39.1; Acceleration: 16.9", + "ariaRoleDescription": "point" + }, + { + "x": 133.33333333333334, + "y": 109.99999999999999, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 238.7258064516129, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 64; Miles_per_Gallon: 39; Acceleration: 16.4", + "ariaRoleDescription": "point" + }, + { + "x": 125, + "y": 148.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 234.35887096774198, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 60; Miles_per_Gallon: 35.1; Acceleration: 16.1", + "ariaRoleDescription": "point" + }, + { + "x": 139.58333333333334, + "y": 177.00000000000006, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 259.10483870967744, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 67; Miles_per_Gallon: 32.3; Acceleration: 17.8", + "ariaRoleDescription": "point" + }, + { + "x": 135.41666666666666, + "y": 130, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 282.39516129032256, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 65; Miles_per_Gallon: 37; Acceleration: 19.4", + "ariaRoleDescription": "point" + }, + { + "x": 129.16666666666669, + "y": 123, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 251.82661290322582, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 62; Miles_per_Gallon: 37.7; Acceleration: 17.3", + "ariaRoleDescription": "point" + }, + { + "x": 141.66666666666666, + "y": 158.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 232.90322580645162, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 68; Miles_per_Gallon: 34.1; Acceleration: 16", + "ariaRoleDescription": "point" + }, + { + "x": 131.25, + "y": 152.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 216.89112903225808, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 63; Miles_per_Gallon: 34.7; Acceleration: 14.9", + "ariaRoleDescription": "point" + }, + { + "x": 135.41666666666666, + "y": 156.00000000000003, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 235.81451612903226, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 65; Miles_per_Gallon: 34.4; Acceleration: 16.2", + "ariaRoleDescription": "point" + }, + { + "x": 135.41666666666666, + "y": 201, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 301.31854838709677, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 65; Miles_per_Gallon: 29.9; Acceleration: 20.7", + "ariaRoleDescription": "point" + }, + { + "x": 154.16666666666669, + "y": 169.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 206.7016129032258, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 74; Miles_per_Gallon: 33; Acceleration: 14.2", + "ariaRoleDescription": "point" + }, + { + "x": 156.25, + "y": 162.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 209.61290322580646, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 75; Miles_per_Gallon: 33.7; Acceleration: 14.4", + "ariaRoleDescription": "point" + }, + { + "x": 156.25, + "y": 176, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 244.5483870967742, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 75; Miles_per_Gallon: 32.4; Acceleration: 16.8", + "ariaRoleDescription": "point" + }, + { + "x": 208.33333333333334, + "y": 171.00000000000003, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 215.43548387096774, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 100; Miles_per_Gallon: 32.9; Acceleration: 14.8", + "ariaRoleDescription": "point" + }, + { + "x": 154.16666666666669, + "y": 184, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 266.383064516129, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 74; Miles_per_Gallon: 31.6; Acceleration: 18.3", + "ariaRoleDescription": "point" + }, + { + "x": 166.66666666666666, + "y": 218.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 296.9516129032258, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 80; Miles_per_Gallon: 28.1; Acceleration: 20.4", + "ariaRoleDescription": "point" + }, + { + "x": 158.33333333333331, + "y": 193, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 285.30645161290323, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 76; Miles_per_Gallon: 30.7; Acceleration: 19.6", + "ariaRoleDescription": "point" + }, + { + "x": 241.66666666666666, + "y": 246, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 183.41129032258064, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 116; Miles_per_Gallon: 25.4; Acceleration: 12.6", + "ariaRoleDescription": "point" + }, + { + "x": 250, + "y": 258, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 200.87903225806454, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 120; Miles_per_Gallon: 24.2; Acceleration: 13.8", + "ariaRoleDescription": "point" + }, + { + "x": 229.16666666666666, + "y": 276, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 229.99193548387098, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 110; Miles_per_Gallon: 22.4; Acceleration: 15.8", + "ariaRoleDescription": "point" + }, + { + "x": 218.75, + "y": 234, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 276.5725806451613, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 105; Miles_per_Gallon: 26.6; Acceleration: 19", + "ariaRoleDescription": "point" + }, + { + "x": 183.33333333333331, + "y": 298.00000000000006, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 248.91532258064518, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 88; Miles_per_Gallon: 20.2; Acceleration: 17.1", + "ariaRoleDescription": "point" + }, + { + "x": 177.08333333333334, + "y": 323.99999999999994, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 241.63709677419357, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 85; Miles_per_Gallon: 17.6; Acceleration: 16.6", + "ariaRoleDescription": "point" + }, + { + "x": 183.33333333333331, + "y": 219.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 285.30645161290323, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 88; Miles_per_Gallon: 28; Acceleration: 19.6", + "ariaRoleDescription": "point" + }, + { + "x": 183.33333333333331, + "y": 229.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 270.75, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 88; Miles_per_Gallon: 27; Acceleration: 18.6", + "ariaRoleDescription": "point" + }, + { + "x": 183.33333333333331, + "y": 159.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 262.01612903225805, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 88; Miles_per_Gallon: 34; Acceleration: 18", + "ariaRoleDescription": "point" + }, + { + "x": 177.08333333333334, + "y": 190, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 235.81451612903226, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 85; Miles_per_Gallon: 31; Acceleration: 16.2", + "ariaRoleDescription": "point" + }, + { + "x": 175, + "y": 210.00000000000003, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 232.90322580645162, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 84; Miles_per_Gallon: 29; Acceleration: 16", + "ariaRoleDescription": "point" + }, + { + "x": 187.5, + "y": 229.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 262.01612903225805, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 90; Miles_per_Gallon: 27; Acceleration: 18", + "ariaRoleDescription": "point" + }, + { + "x": 191.66666666666669, + "y": 260, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 238.7258064516129, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 92; Miles_per_Gallon: 24; Acceleration: 16.4", + "ariaRoleDescription": "point" + }, + { + "x": 154.16666666666669, + "y": 140, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 222.71370967741936, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 74; Miles_per_Gallon: 36; Acceleration: 15.3", + "ariaRoleDescription": "point" + }, + { + "x": 141.66666666666666, + "y": 130, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 264.92741935483866, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 68; Miles_per_Gallon: 37; Acceleration: 18.2", + "ariaRoleDescription": "point" + }, + { + "x": 141.66666666666666, + "y": 190, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 256.19354838709677, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 68; Miles_per_Gallon: 31; Acceleration: 17.6", + "ariaRoleDescription": "point" + }, + { + "x": 131.25, + "y": 120, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 213.97983870967738, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 63; Miles_per_Gallon: 38; Acceleration: 14.7", + "ariaRoleDescription": "point" + }, + { + "x": 145.83333333333334, + "y": 140, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 251.82661290322582, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 70; Miles_per_Gallon: 36; Acceleration: 17.3", + "ariaRoleDescription": "point" + }, + { + "x": 183.33333333333331, + "y": 140, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 211.0685483870968, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 88; Miles_per_Gallon: 36; Acceleration: 14.5", + "ariaRoleDescription": "point" + }, + { + "x": 156.25, + "y": 140, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 211.0685483870968, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 75; Miles_per_Gallon: 36; Acceleration: 14.5", + "ariaRoleDescription": "point" + }, + { + "x": 145.83333333333334, + "y": 159.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 246.00403225806448, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 70; Miles_per_Gallon: 34; Acceleration: 16.9", + "ariaRoleDescription": "point" + }, + { + "x": 139.58333333333334, + "y": 120, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 218.34677419354838, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 67; Miles_per_Gallon: 38; Acceleration: 15", + "ariaRoleDescription": "point" + }, + { + "x": 139.58333333333334, + "y": 180, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 228.53629032258064, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 67; Miles_per_Gallon: 32; Acceleration: 15.7", + "ariaRoleDescription": "point" + }, + { + "x": 139.58333333333334, + "y": 120, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 235.81451612903226, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 67; Miles_per_Gallon: 38; Acceleration: 16.2", + "ariaRoleDescription": "point" + }, + { + "x": 229.16666666666666, + "y": 250, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 238.7258064516129, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 110; Miles_per_Gallon: 25; Acceleration: 16.4", + "ariaRoleDescription": "point" + }, + { + "x": 177.08333333333334, + "y": 120, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 247.45967741935482, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 85; Miles_per_Gallon: 38; Acceleration: 17", + "ariaRoleDescription": "point" + }, + { + "x": 191.66666666666669, + "y": 240, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 211.0685483870968, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 92; Miles_per_Gallon: 26; Acceleration: 14.5", + "ariaRoleDescription": "point" + }, + { + "x": 233.33333333333334, + "y": 280, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 213.97983870967738, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 112; Miles_per_Gallon: 22; Acceleration: 14.7", + "ariaRoleDescription": "point" + }, + { + "x": 200, + "y": 180, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 202.33467741935482, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 96; Miles_per_Gallon: 32; Acceleration: 13.9", + "ariaRoleDescription": "point" + }, + { + "x": 175, + "y": 140, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 189.23387096774192, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 84; Miles_per_Gallon: 36; Acceleration: 13", + "ariaRoleDescription": "point" + }, + { + "x": 187.5, + "y": 229.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 251.82661290322582, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 90; Miles_per_Gallon: 27; Acceleration: 17.3", + "ariaRoleDescription": "point" + }, + { + "x": 179.16666666666666, + "y": 229.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 227.08064516129033, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 86; Miles_per_Gallon: 27; Acceleration: 15.6", + "ariaRoleDescription": "point" + }, + { + "x": 108.33333333333334, + "y": 60, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 358.08870967741933, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 52; Miles_per_Gallon: 44; Acceleration: 24.6", + "ariaRoleDescription": "point" + }, + { + "x": 175, + "y": 180, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 168.8548387096774, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 84; Miles_per_Gallon: 32; Acceleration: 11.6", + "ariaRoleDescription": "point" + }, + { + "x": 164.58333333333334, + "y": 219.99999999999997, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 270.75, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 79; Miles_per_Gallon: 28; Acceleration: 18.6", + "ariaRoleDescription": "point" + }, + { + "x": 170.83333333333334, + "y": 190, + "fill": "darkcyan", + "opacity": 0.5, + "stroke": "crimson", + "strokeWidth": 2, + "size": 282.39516129032256, + "shape": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z", + "description": "Horsepower: 82; Miles_per_Gallon: 31; Acceleration: 19.4", + "ariaRoleDescription": "point" + } + ], + "zindex": 0 + } + ], + "x": 0, + "y": 0, + "width": 500, + "height": 500, + "fill": "transparent", + "stroke": "transparent" + } + ], + "zindex": 0 +} \ No newline at end of file diff --git a/sg2d-vega-test-data/vega-specs/symbol/scatter_transparent_stroke.vg.json b/sg2d-vega-test-data/vega-specs/symbol/scatter_transparent_stroke.vg.json new file mode 100644 index 0000000..2295256 --- /dev/null +++ b/sg2d-vega-test-data/vega-specs/symbol/scatter_transparent_stroke.vg.json @@ -0,0 +1,70 @@ +{ + "$schema": "https://vega.github.io/schema/vega/v5.json", + "description": "A bubbleplot showing horsepower on x, miles per gallons on y, and binned acceleration on size.", + "background": "white", + "padding": 5, + "width": 500, + "height": 500, + "style": "cell", + "config": {"style": {"cell": {"stroke": "transparent"}}}, + "data": [ + { + "name": "source_0", + "url": "data/cars.json", + "format": {"type": "json"}, + "transform": [ + { + "type": "filter", + "expr": "isValid(datum[\"Horsepower\"]) && isFinite(+datum[\"Horsepower\"]) && isValid(datum[\"Miles_per_Gallon\"]) && isFinite(+datum[\"Miles_per_Gallon\"]) && isValid(datum[\"Acceleration\"]) && isFinite(+datum[\"Acceleration\"])" + } + ] + } + ], + "marks": [ + { + "name": "marks", + "type": "symbol", + "style": ["point"], + "from": {"data": "source_0"}, + "encode": { + "update": { + "opacity": {"value": 0.5}, + "fill": {"value": "darkcyan"}, + "stroke": {"value": "crimson"}, + "ariaRoleDescription": {"value": "point"}, + "description": { + "signal": "\"Horsepower: \" + (format(datum[\"Horsepower\"], \"\")) + \"; Miles_per_Gallon: \" + (format(datum[\"Miles_per_Gallon\"], \"\")) + \"; Acceleration: \" + (format(datum[\"Acceleration\"], \"\"))" + }, + "x": {"scale": "x", "field": "Horsepower"}, + "y": {"scale": "y", "field": "Miles_per_Gallon"}, + "size": {"scale": "size", "field": "Acceleration"} + } + } + } + ], + "scales": [ + { + "name": "x", + "type": "linear", + "domain": {"data": "source_0", "field": "Horsepower"}, + "range": [0, {"signal": "width"}], + "nice": true, + "zero": true + }, + { + "name": "y", + "type": "linear", + "domain": {"data": "source_0", "field": "Miles_per_Gallon"}, + "range": [{"signal": "height"}, 0], + "nice": true, + "zero": true + }, + { + "name": "size", + "type": "linear", + "domain": {"data": "source_0", "field": "Acceleration"}, + "range": [0, 361], + "zero": true + } + ] +} \ No newline at end of file diff --git a/sg2d-vega-test-data/vega-specs/symbol/scatter_transparent_stroke_star.vg.json b/sg2d-vega-test-data/vega-specs/symbol/scatter_transparent_stroke_star.vg.json new file mode 100644 index 0000000..8605cbf --- /dev/null +++ b/sg2d-vega-test-data/vega-specs/symbol/scatter_transparent_stroke_star.vg.json @@ -0,0 +1,71 @@ +{ + "$schema": "https://vega.github.io/schema/vega/v5.json", + "description": "A bubbleplot showing horsepower on x, miles per gallons on y, and binned acceleration on size.", + "background": "white", + "padding": 5, + "width": 500, + "height": 500, + "style": "cell", + "config": {"style": {"cell": {"stroke": "transparent"}}}, + "data": [ + { + "name": "source_0", + "url": "data/cars.json", + "format": {"type": "json"}, + "transform": [ + { + "type": "filter", + "expr": "isValid(datum[\"Horsepower\"]) && isFinite(+datum[\"Horsepower\"]) && isValid(datum[\"Miles_per_Gallon\"]) && isFinite(+datum[\"Miles_per_Gallon\"]) && isValid(datum[\"Acceleration\"]) && isFinite(+datum[\"Acceleration\"])" + } + ] + } + ], + "marks": [ + { + "name": "marks", + "type": "symbol", + "style": ["point"], + "from": {"data": "source_0"}, + "encode": { + "update": { + "opacity": {"value": 0.5}, + "fill": {"value": "darkcyan"}, + "stroke": {"value": "crimson"}, + "ariaRoleDescription": {"value": "point"}, + "description": { + "signal": "\"Horsepower: \" + (format(datum[\"Horsepower\"], \"\")) + \"; Miles_per_Gallon: \" + (format(datum[\"Miles_per_Gallon\"], \"\")) + \"; Acceleration: \" + (format(datum[\"Acceleration\"], \"\"))" + }, + "x": {"scale": "x", "field": "Horsepower"}, + "y": {"scale": "y", "field": "Miles_per_Gallon"}, + "size": {"scale": "size", "field": "Acceleration"}, + "shape": {"value": "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6.8L0,.5Z"} + } + } + } + ], + "scales": [ + { + "name": "x", + "type": "linear", + "domain": {"data": "source_0", "field": "Horsepower"}, + "range": [0, {"signal": "width"}], + "nice": true, + "zero": true + }, + { + "name": "y", + "type": "linear", + "domain": {"data": "source_0", "field": "Miles_per_Gallon"}, + "range": [{"signal": "height"}, 0], + "nice": true, + "zero": true + }, + { + "name": "size", + "type": "linear", + "domain": {"data": "source_0", "field": "Acceleration"}, + "range": [0, 361], + "zero": true + } + ] +} \ No newline at end of file diff --git a/sg2d-vega/src/marks/symbol.rs b/sg2d-vega/src/marks/symbol.rs index 30191cd..ba9439c 100644 --- a/sg2d-vega/src/marks/symbol.rs +++ b/sg2d-vega/src/marks/symbol.rs @@ -15,11 +15,13 @@ pub struct VegaSymbolItem { pub x: f32, pub y: f32, pub fill: Option, + pub opacity: Option, pub fill_opacity: Option, pub size: Option, pub shape: Option, pub stroke: Option, pub stroke_width: Option, + pub stroke_opacity: Option, } impl VegaMarkItem for VegaSymbolItem {} @@ -71,7 +73,10 @@ impl VegaMarkContainer { if let Some(c) = &item.fill { let c = csscolorparser::parse(c)?; - fill.push([c.r as f32, c.g as f32, c.b as f32, 1.0]) + let fill_opacity = item.fill_opacity.unwrap_or_else( + || item.opacity.unwrap_or(1.0) + ); + fill.push([c.r as f32, c.g as f32, c.b as f32, fill_opacity]) } if let Some(s) = item.size { @@ -80,7 +85,10 @@ impl VegaMarkContainer { if let Some(c) = &item.stroke { let c = csscolorparser::parse(c)?; - stroke.push([c.r as f32, c.g as f32, c.b as f32, 1.0]) + let stroke_opacity = item.fill_opacity.unwrap_or_else( + || item.opacity.unwrap_or(1.0) + ); + stroke.push([c.r as f32, c.g as f32, c.b as f32, stroke_opacity]) } if let Some(s) = item.stroke_width { diff --git a/sg2d-wgpu/tests/test_image_baselines.rs b/sg2d-wgpu/tests/test_image_baselines.rs index 6264cf6..7e8fe74 100644 --- a/sg2d-wgpu/tests/test_image_baselines.rs +++ b/sg2d-wgpu/tests/test_image_baselines.rs @@ -32,6 +32,8 @@ mod test_image_baselines { case("symbol", "binned_scatter_circle_stroke", 0.001), case("symbol", "binned_scatter_circle_stroke_no_fill", 0.001), case("symbol", "binned_scatter_path_star_stroke_no_fill", 0.001), + case("symbol", "scatter_transparent_stroke", 0.001), + case("symbol", "scatter_transparent_stroke_star", 0.005), case("rule", "wide_rule_axes", 0.0001), case("text", "bar_axis_labels", 0.01) )] From c83ebe10e67eded4d9061feff6ae74c453a335ae Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Sat, 6 Jan 2024 19:02:41 -0500 Subject: [PATCH 09/11] fmt --- sg2d-vega/src/marks/symbol.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/sg2d-vega/src/marks/symbol.rs b/sg2d-vega/src/marks/symbol.rs index ba9439c..d26916e 100644 --- a/sg2d-vega/src/marks/symbol.rs +++ b/sg2d-vega/src/marks/symbol.rs @@ -73,9 +73,9 @@ impl VegaMarkContainer { if let Some(c) = &item.fill { let c = csscolorparser::parse(c)?; - let fill_opacity = item.fill_opacity.unwrap_or_else( - || item.opacity.unwrap_or(1.0) - ); + let fill_opacity = item + .fill_opacity + .unwrap_or_else(|| item.opacity.unwrap_or(1.0)); fill.push([c.r as f32, c.g as f32, c.b as f32, fill_opacity]) } @@ -85,9 +85,9 @@ impl VegaMarkContainer { if let Some(c) = &item.stroke { let c = csscolorparser::parse(c)?; - let stroke_opacity = item.fill_opacity.unwrap_or_else( - || item.opacity.unwrap_or(1.0) - ); + let stroke_opacity = item + .fill_opacity + .unwrap_or_else(|| item.opacity.unwrap_or(1.0)); stroke.push([c.r as f32, c.g as f32, c.b as f32, stroke_opacity]) } From e28278a3f8fbe2641d025be7d6ac2287d79bbb01 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Sat, 6 Jan 2024 19:10:18 -0500 Subject: [PATCH 10/11] fix warnings --- sg2d-wgpu/src/marks/symbol.rs | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/sg2d-wgpu/src/marks/symbol.rs b/sg2d-wgpu/src/marks/symbol.rs index 205c8cf..4519bc1 100644 --- a/sg2d-wgpu/src/marks/symbol.rs +++ b/sg2d-wgpu/src/marks/symbol.rs @@ -1,17 +1,11 @@ use crate::error::Sg2dWgpuError; use crate::marks::mark::MarkShader; use itertools::izip; -use lyon::lyon_tessellation::geometry_builder::Positions; use lyon::lyon_tessellation::{ - BuffersBuilder, FillGeometryBuilder, FillVertex, FillVertexConstructor, GeometryBuilderError, - StrokeVertex, StrokeVertexConstructor, VertexId, -}; -use lyon::tessellation::geometry_builder::{simple_builder, VertexBuffers}; -use lyon::tessellation::math::Point; -use lyon::tessellation::{ - FillBuilder, FillOptions, FillTessellator, GeometryBuilder, StrokeGeometryBuilder, - StrokeOptions, StrokeTessellator, + BuffersBuilder, FillVertex, FillVertexConstructor, StrokeVertex, StrokeVertexConstructor, }; +use lyon::tessellation::geometry_builder::VertexBuffers; +use lyon::tessellation::{FillOptions, FillTessellator, StrokeOptions, StrokeTessellator}; use sg2d::marks::symbol::{SymbolMark, SymbolShape}; use wgpu::VertexBufferLayout; From 58098ec9cceba8b36db9f1cded411a91f5910295 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Sat, 6 Jan 2024 19:13:14 -0500 Subject: [PATCH 11/11] fix warnings --- sg2d-vega/src/marks/symbol.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sg2d-vega/src/marks/symbol.rs b/sg2d-vega/src/marks/symbol.rs index d26916e..ae6d5fe 100644 --- a/sg2d-vega/src/marks/symbol.rs +++ b/sg2d-vega/src/marks/symbol.rs @@ -39,7 +39,7 @@ impl VegaMarkContainer { // Only include stroke_width if there is a stroke color let stroke_width = if first_has_stroke { - first.and_then(|item| item.stroke_width.clone()) + first.and_then(|item| item.stroke_width) } else { None };