From c0c9ebf2cb75f19886a84200bb53cde83ad4e929 Mon Sep 17 00:00:00 2001 From: Ece Ozalp Date: Mon, 17 Jan 2022 21:19:58 -0500 Subject: [PATCH 01/28] lint yml added --- .github/workflows/lint.yml | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 .github/workflows/lint.yml diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 0000000..698102e --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,34 @@ +# This is a basic workflow to help you get started with Actions +name: DEV CI + +# Controls when the workflow will run +on: + pull_request: + branches: [ dev ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "format" + format-lint: + # The type of runner that the job will run on + runs-on: ubuntu-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v2 + + # Install dependencies + - name: Install + run: npm install + + # Format project + - name: Format project + run: npm run format + + # Lint project + - name: Lint project + run: npm run lint \ No newline at end of file From 106c289b62146ca7b4f9e057240d48915c94e296 Mon Sep 17 00:00:00 2001 From: Robert Crocker Date: Thu, 27 Jan 2022 01:28:13 -0300 Subject: [PATCH 02/28] The tooltip trys to the dodge the edge of the screen. --- src/charts/PieChart/PieChart.tsx | 2 + src/components/Tooltip.tsx | 93 +++++++++++++++++++++++++------ src/hooks/useWindowDimensions.tsx | 26 +++++++++ 3 files changed, 105 insertions(+), 16 deletions(-) create mode 100644 src/hooks/useWindowDimensions.tsx diff --git a/src/charts/PieChart/PieChart.tsx b/src/charts/PieChart/PieChart.tsx index aac50b8..6841755 100644 --- a/src/charts/PieChart/PieChart.tsx +++ b/src/charts/PieChart/PieChart.tsx @@ -217,6 +217,8 @@ export default function PieChart({ const [tooltip, setTooltip] = useState(false); + console.log('TOOLTIP DATA ', tooltip); + return (
{tooltip && ( diff --git a/src/components/Tooltip.tsx b/src/components/Tooltip.tsx index a0a7a94..ca2bb7f 100644 --- a/src/components/Tooltip.tsx +++ b/src/components/Tooltip.tsx @@ -1,16 +1,17 @@ import React from 'react'; +import useWindowDimensions from '../hooks/useWindowDimensions'; import { TooltipProps } from '../../types'; const Tooltip = ({ chartType, data, - xAccessor, - yAccessor, x, y, xKey, yKey, }: TooltipProps): JSX.Element => { + const { height, width } = useWindowDimensions(); + // ******************** // TOOLTIP STYLES // ******************** @@ -20,6 +21,65 @@ const Tooltip = ({ const triangleSize = 12; const shadowElevationHigh = `0 0 10px 0 rgba(80, 80, 80, 0.2)`; + // If the tooltip is too close to the top of the screen we will position the + // tooltip below the cursor. + let contentTranslation = ''; + let triangleTranslation = ''; + let triangleBorderTranslation = ''; + // The tooltip is too close to the top of the screen + let moveTooltip: { vertical: string; horizontal: string } = { + vertical: 'none', + horizontal: 'none', + }; + if (y < 60) { + moveTooltip = { ...moveTooltip, vertical: 'down' }; + } + + if (x < 70) { + moveTooltip = { ...moveTooltip, horizontal: 'right' }; + } else if (width - x < 70) { + moveTooltip = { ...moveTooltip, horizontal: 'left' }; + } + + let contentYTranslation = ''; + let triangeYTranslation = ''; + let triangeBorderYTranslation = ''; + switch (moveTooltip.vertical) { + case 'down': + contentYTranslation = `calc(10% + ${triangleSize}px)`; + triangeYTranslation = `calc(102% + ${triangleSize / 2}px)`; + triangeBorderYTranslation = `calc(100% + ${triangleSize / 2}px)`; + break; + case 'none': + contentYTranslation = `calc(-100% - ${triangleSize}px)`; + triangeYTranslation = `calc(-102% - ${triangleSize / 2}px)`; + triangeBorderYTranslation = `calc(-100% - ${triangleSize / 2}px)`; + } + + let contentXTranslation = ''; + let triangeXTranslation = ''; + let triangeBorderXTranslation = ''; + switch (moveTooltip.horizontal) { + case 'right': + contentXTranslation = `-20%`; + triangeXTranslation = `-50%`; + triangeBorderXTranslation = `-50%`; + break; + case 'left': + contentXTranslation = `-80%`; + triangeXTranslation = `-50%`; + triangeBorderXTranslation = `-50%`; + break; + case 'none': + contentXTranslation = `-50%`; + triangeXTranslation = `-50%`; + triangeBorderXTranslation = `-50%`; + } + + contentTranslation = `translate(${contentXTranslation}, ${contentYTranslation})`; + triangleTranslation = `translate(${triangeXTranslation}, ${triangeYTranslation}) rotate(45deg)`; + triangleBorderTranslation = `translate(${triangeBorderXTranslation}, ${triangeBorderYTranslation}) rotate(45deg)`; + const tooltipWrapperStyle: React.CSSProperties | undefined = { left: x, top: y, @@ -36,10 +96,11 @@ const Tooltip = ({ margin: '4px 4px', padding: '0.6em 1em', borderRadius: '4px', - minWidth: '220px', - transform: `translate(-50%, calc(-100% - ${triangleSize}px)`, + minWidth: '140px', + maxWidth: '240px', + transform: contentTranslation, background: backgroundColor, - textAlign: 'left', + textAlign: 'center', lineHeight: '1.4em', fontSize: '1em', border: `1px solid ${boarderColor}`, @@ -47,8 +108,7 @@ const Tooltip = ({ transition: 'all 0.1s ease-out', boxShadow: shadowElevationHigh, pointerEvents: 'none', - whiteSpace: 'normal', - wordBreak: 'break-all', + // wordBreak: 'break-all', }; const triangleStyle: React.CSSProperties | undefined = { @@ -57,11 +117,10 @@ const Tooltip = ({ width: `${triangleSize}px`, height: `${triangleSize}px`, background: backgroundColor, - transform: `translate(-50%, calc(-102% - ${ - triangleSize / 2 - }px)) rotate(45deg)`, + transform: triangleTranslation, transformOrigin: 'center center', zIndex: '10', + transition: 'all 0.1s ease-out', pointerEvents: 'none', }; @@ -71,12 +130,11 @@ const Tooltip = ({ width: `${triangleSize}px`, height: `${triangleSize}px`, background: boarderColor, - transform: `translate(-50%, calc(-100% - ${ - triangleSize / 2 - }px)) rotate(45deg)`, + transform: triangleBorderTranslation, transformOrigin: 'center center', boxShadow: shadowElevationHigh, zIndex: '8', + transition: 'all 0.1s ease-out', pointerEvents: 'none', }; @@ -95,9 +153,12 @@ const Tooltip = ({ return (
- {xKey} {xValString} -
- {yKey} {yValString} +
+ {xKey} {xValString} +
+
+ {yKey} {yValString} +
diff --git a/src/hooks/useWindowDimensions.tsx b/src/hooks/useWindowDimensions.tsx new file mode 100644 index 0000000..a2dc8de --- /dev/null +++ b/src/hooks/useWindowDimensions.tsx @@ -0,0 +1,26 @@ +import { useState, useEffect } from 'react'; + +function getWindowDimensions() { + const { innerWidth: width, innerHeight: height } = window; + return { + width, + height, + }; +} + +export default function useWindowDimensions() { + const [windowDimensions, setWindowDimensions] = useState( + getWindowDimensions() + ); + + useEffect(() => { + function handleResize() { + setWindowDimensions(getWindowDimensions()); + } + + window.addEventListener('resize', handleResize); + return () => window.removeEventListener('resize', handleResize); + }, []); + + return windowDimensions; +} From 70bf04660e7d6878c78492bada3fb74c4d31ef1a Mon Sep 17 00:00:00 2001 From: Robert Crocker Date: Thu, 27 Jan 2022 10:10:01 -0300 Subject: [PATCH 03/28] Finished refactoring the tooltip to add information that helps up keep it on screen. --- src/charts/AreaChart/AreaChart.tsx | 8 ++++++-- src/charts/BarChart/BarChart.tsx | 8 ++++++-- src/charts/LineChart/LineChart.tsx | 8 ++++++-- src/charts/PieChart/PieChart.tsx | 9 ++++++--- src/charts/ScatterPlot/ScatterPlot.tsx | 7 +++++-- src/components/Arc.tsx | 27 +++++++++++++++++--------- src/components/Tooltip.tsx | 22 ++++++++++----------- types.ts | 7 +++++-- 8 files changed, 63 insertions(+), 33 deletions(-) diff --git a/src/charts/AreaChart/AreaChart.tsx b/src/charts/AreaChart/AreaChart.tsx index e335a86..a4c00e5 100644 --- a/src/charts/AreaChart/AreaChart.tsx +++ b/src/charts/AreaChart/AreaChart.tsx @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/restrict-plus-operands */ /** App.js */ import React, { useState, useMemo } from 'react'; /*eslint import/namespace: ['error', { allowComputed: true }]*/ @@ -220,8 +221,11 @@ export default function AreaChart({ {tooltip && ( diff --git a/src/charts/BarChart/BarChart.tsx b/src/charts/BarChart/BarChart.tsx index 67b3ea0..2ea9b13 100644 --- a/src/charts/BarChart/BarChart.tsx +++ b/src/charts/BarChart/BarChart.tsx @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/restrict-plus-operands */ /** App.js */ import React, { useState, useMemo } from 'react'; /*eslint import/namespace: ['error', { allowComputed: true }]*/ @@ -202,8 +203,11 @@ export default function BarChart({ diff --git a/src/charts/LineChart/LineChart.tsx b/src/charts/LineChart/LineChart.tsx index 466f4cf..bbfa54b 100644 --- a/src/charts/LineChart/LineChart.tsx +++ b/src/charts/LineChart/LineChart.tsx @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/restrict-plus-operands */ /** App.js */ import React, { useState, useMemo } from 'react'; import { useResponsive } from '../../hooks/useResponsive'; @@ -204,8 +205,11 @@ export default function LineChart({ {tooltip && ( diff --git a/src/charts/PieChart/PieChart.tsx b/src/charts/PieChart/PieChart.tsx index 6841755..ab4d842 100644 --- a/src/charts/PieChart/PieChart.tsx +++ b/src/charts/PieChart/PieChart.tsx @@ -224,9 +224,12 @@ export default function PieChart({ {tooltip && ( diff --git a/src/charts/ScatterPlot/ScatterPlot.tsx b/src/charts/ScatterPlot/ScatterPlot.tsx index cb65259..9d1600c 100644 --- a/src/charts/ScatterPlot/ScatterPlot.tsx +++ b/src/charts/ScatterPlot/ScatterPlot.tsx @@ -186,8 +186,11 @@ export default function ScatterPlot({ diff --git a/src/components/Arc.tsx b/src/components/Arc.tsx index 94f79b4..1a565e4 100644 --- a/src/components/Arc.tsx +++ b/src/components/Arc.tsx @@ -2,6 +2,7 @@ import React from 'react'; import * as d3 from 'd3'; import { ArcProps } from '../../types'; +import useWindowDimensions from '../hooks/useWindowDimensions'; export const Arc = React.memo( ({ @@ -14,19 +15,27 @@ export const Arc = React.memo( d, setTooltip, }: ArcProps): JSX.Element => { - let cellCenter = { - cx: 0, - cy: 0, - tooltipData: data, + const { width } = useWindowDimensions(); + + let tooltipState = { + cursorX: 0, + cursorY: 0, + distanceFromTop: 0, + distanceFromRight: 0, + distanceFromLeft: 0, + data, }; const onMouseMove = (e: any) => { if (setTooltip) { - cellCenter = { - cx: e.pageX, - cy: e.pageY, - tooltipData: data, + tooltipState = { + cursorX: e.pageX, + cursorY: e.pageY, + distanceFromTop: e.clientY, + distanceFromRight: width - e.clientX, + distanceFromLeft: e.clientX, + data, }; - setTooltip(cellCenter); + setTooltip(tooltipState); } }; diff --git a/src/components/Tooltip.tsx b/src/components/Tooltip.tsx index ca2bb7f..54ba5e5 100644 --- a/src/components/Tooltip.tsx +++ b/src/components/Tooltip.tsx @@ -5,8 +5,8 @@ import { TooltipProps } from '../../types'; const Tooltip = ({ chartType, data, - x, - y, + cursorX, + cursorY, xKey, yKey, }: TooltipProps): JSX.Element => { @@ -31,13 +31,13 @@ const Tooltip = ({ vertical: 'none', horizontal: 'none', }; - if (y < 60) { + if (cursorY < 60) { moveTooltip = { ...moveTooltip, vertical: 'down' }; } - if (x < 70) { + if (cursorX < 70) { moveTooltip = { ...moveTooltip, horizontal: 'right' }; - } else if (width - x < 70) { + } else if (width - cursorX < 70) { moveTooltip = { ...moveTooltip, horizontal: 'left' }; } @@ -81,8 +81,8 @@ const Tooltip = ({ triangleBorderTranslation = `translate(${triangeBorderXTranslation}, ${triangeBorderYTranslation}) rotate(45deg)`; const tooltipWrapperStyle: React.CSSProperties | undefined = { - left: x, - top: y, + left: cursorX, + top: cursorY, transform: 'translate(-50%, -50%)', position: 'absolute', pointerEvents: 'none', @@ -138,14 +138,14 @@ const Tooltip = ({ pointerEvents: 'none', }; - let xValString = data.tooltipData[xKey as string]; - if (data.tooltipData[xKey as string] instanceof Date) { + let xValString = data[xKey as string]; + if (data[xKey as string] instanceof Date) { // eslint-disable-next-line @typescript-eslint/restrict-template-expressions xValString = `${xValString.getFullYear()}.${xValString.getMonth()}.${xValString.getDay()}`; } - let yValString = data.tooltipData[yKey as string]; - if (!isNaN(data.tooltipData[yKey as string])) { + let yValString = data[yKey as string]; + if (!isNaN(data[yKey as string])) { // eslint-disable-next-line @typescript-eslint/restrict-template-expressions yValString = `${Math.round(yValString * 100) / 100}`; } diff --git a/types.ts b/types.ts index 1028ff4..96e8bad 100644 --- a/types.ts +++ b/types.ts @@ -273,8 +273,11 @@ export interface TooltipProps { data: any; xAccessor?: xAccessorFunc; yAccessor?: yAccessorFunc; - x: number; - y: number; + cursorX: number; + cursorY: number; + distanceFromTop: number; + distanceFromRight: number; + distanceFromLeft: number; xKey?: string; yKey?: string; } From 73f3119ad25c142af941af0e7e6553981c685afc Mon Sep 17 00:00:00 2001 From: Robert Crocker Date: Thu, 27 Jan 2022 10:23:42 -0300 Subject: [PATCH 04/28] Debugged the surprising result I was getting from the refactor. --- src/App.tsx | 2 -- src/charts/PieChart/PieChart.tsx | 2 +- src/components/Arc.tsx | 4 ++-- src/components/Tooltip.tsx | 12 ++++++------ 4 files changed, 9 insertions(+), 11 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 89a8d49..48a68bd 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -20,9 +20,7 @@ function App() { data={fruit} label="label" value="value" - legend="top-right" outerRadius={240} - legendLabel="fruit" pieLabel={true} /> (false); - console.log('TOOLTIP DATA ', tooltip); + console.table('TOOLTIP DATA ', tooltip); return (
diff --git a/src/components/Arc.tsx b/src/components/Arc.tsx index 1a565e4..f97b616 100644 --- a/src/components/Arc.tsx +++ b/src/components/Arc.tsx @@ -31,8 +31,8 @@ export const Arc = React.memo( cursorX: e.pageX, cursorY: e.pageY, distanceFromTop: e.clientY, - distanceFromRight: width - e.clientX, - distanceFromLeft: e.clientX, + distanceFromRight: width - e.pageX, + distanceFromLeft: e.pageX, data, }; setTooltip(tooltipState); diff --git a/src/components/Tooltip.tsx b/src/components/Tooltip.tsx index 54ba5e5..6abccef 100644 --- a/src/components/Tooltip.tsx +++ b/src/components/Tooltip.tsx @@ -1,5 +1,4 @@ import React from 'react'; -import useWindowDimensions from '../hooks/useWindowDimensions'; import { TooltipProps } from '../../types'; const Tooltip = ({ @@ -7,11 +6,12 @@ const Tooltip = ({ data, cursorX, cursorY, + distanceFromTop, + distanceFromRight, + distanceFromLeft, xKey, yKey, }: TooltipProps): JSX.Element => { - const { height, width } = useWindowDimensions(); - // ******************** // TOOLTIP STYLES // ******************** @@ -31,13 +31,13 @@ const Tooltip = ({ vertical: 'none', horizontal: 'none', }; - if (cursorY < 60) { + if (distanceFromTop < 60) { moveTooltip = { ...moveTooltip, vertical: 'down' }; } - if (cursorX < 70) { + if (distanceFromLeft < 70) { moveTooltip = { ...moveTooltip, horizontal: 'right' }; - } else if (width - cursorX < 70) { + } else if (distanceFromRight < 70) { moveTooltip = { ...moveTooltip, horizontal: 'left' }; } From 49b6cbe4908dcf8c069e7781b96d241776f8f246 Mon Sep 17 00:00:00 2001 From: Robert Crocker Date: Thu, 27 Jan 2022 12:01:11 -0300 Subject: [PATCH 05/28] Ran formatter and finished debugging the bar chart tooltip horizontal position. --- src/App.tsx | 3 +- src/charts/BarChart/BarChart.tsx | 10 +++++- src/charts/PieChart/PieChart.tsx | 2 -- src/components/Rectangle.tsx | 57 +++++++++++++++++++++++++++----- src/components/Tooltip.tsx | 4 +++ types.ts | 1 + 6 files changed, 63 insertions(+), 14 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 48a68bd..ecf0df4 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -30,10 +30,9 @@ function App() { xKey="date" yKey="value" xAxis="bottom" - yAxis="right" + yAxis="left" yGrid={true} xAxisLabel="Date" - yAxisLabel="Value" legend={'bottom'} /> @@ -314,6 +318,10 @@ export default function BarChart({ // draw rect from 0 mark to +value Math.abs(yScale(0) - yScale(yAccessor(d))) } + margin={{ + marginTop: margin.top, + marginLeft: margin.left, + }} fill={colorScale(yKey)} setTooltip={setTooltip} /> diff --git a/src/charts/PieChart/PieChart.tsx b/src/charts/PieChart/PieChart.tsx index 82a3bb0..90b0e2d 100644 --- a/src/charts/PieChart/PieChart.tsx +++ b/src/charts/PieChart/PieChart.tsx @@ -217,8 +217,6 @@ export default function PieChart({ const [tooltip, setTooltip] = useState(false); - console.table('TOOLTIP DATA ', tooltip); - return (
{tooltip && ( diff --git a/src/components/Rectangle.tsx b/src/components/Rectangle.tsx index ff46aa1..43cd638 100644 --- a/src/components/Rectangle.tsx +++ b/src/components/Rectangle.tsx @@ -1,5 +1,7 @@ +/* eslint-disable @typescript-eslint/restrict-plus-operands */ import React from 'react'; import { RectangleProps } from '../../types'; +import useWindowDimensions from '../hooks/useWindowDimensions'; import styled from 'styled-components'; const Bar = styled.rect` @@ -14,23 +16,60 @@ export const Rectangle = React.memo( y, width, height, + margin, fill, setTooltip, }: RectangleProps): JSX.Element => { - let cellCenter = { - cx: 0, - cy: 0, - tooltipData: data, + const clientWidth = useWindowDimensions().width; + + let tooltipState = { + cursorX: 0, + cursorY: 0, + distanceFromTop: 0, + distanceFromRight: 0, + distanceFromLeft: 0, + data, }; const mouseOver = (e: any) => { + // When the cursor enter the rectangle from the left we need to add half + // of the bar width to the cursor position to calculate the distance from + // right hand side of the page. When the cursor enters the bar from the + // right side of the bar we need to substract half of the bar width. + const cursorXPosition = + e.pageX - + e.nativeEvent.layerX + + e.nativeEvent.layerX - + margin.marginLeft; + const rectMidPoint = (x ?? 0) + width / 2; if (setTooltip) { - cellCenter = { - cx: e.pageX - e.nativeEvent.offsetX + (x ?? 0), - cy: e.pageY - e.nativeEvent.offsetY + (y ?? 0), - tooltipData: data, + if (cursorXPosition <= rectMidPoint) { + tooltipState.distanceFromRight = + clientWidth - + (e.pageX - + e.nativeEvent.layerX + + margin.marginLeft + + (x ?? 0) + + width / 2); + } else { + tooltipState.distanceFromRight = + clientWidth - + (e.pageX - + e.nativeEvent.layerX + + margin.marginLeft + + (x ?? 0) - + width / 2); + } + + tooltipState = { + cursorX: e.pageX - e.nativeEvent.layerX + (x ?? 0), + cursorY: e.pageY - e.nativeEvent.layerY + (y ?? 0), + distanceFromTop: e.clientY, + distanceFromRight: tooltipState.distanceFromRight, + distanceFromLeft: e.pageX, + data, }; - setTooltip(cellCenter); + setTooltip(tooltipState); } }; diff --git a/src/components/Tooltip.tsx b/src/components/Tooltip.tsx index 6abccef..0823a26 100644 --- a/src/components/Tooltip.tsx +++ b/src/components/Tooltip.tsx @@ -41,6 +41,10 @@ const Tooltip = ({ moveTooltip = { ...moveTooltip, horizontal: 'left' }; } + // console.log('Tooltip distance from top ', distanceFromTop); + // console.log('Tooltip distance from right ', distanceFromRight); + // console.log('Tooltip distance from left ', distanceFromLeft); + let contentYTranslation = ''; let triangeYTranslation = ''; let triangeBorderYTranslation = ''; diff --git a/types.ts b/types.ts index 96e8bad..38fda95 100644 --- a/types.ts +++ b/types.ts @@ -296,6 +296,7 @@ export interface RectangleProps { y: number; width: number; height: number; + margin: { marginTop: number; marginLeft: number }; fill: string; setTooltip?: React.Dispatch; } From c317b03c370cf5f4d74de3bf411986981b84e871 Mon Sep 17 00:00:00 2001 From: Robert Crocker Date: Thu, 27 Jan 2022 18:18:51 -0300 Subject: [PATCH 06/28] Committing to share branch with Dmitri. --- src/components/Tooltip.tsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/components/Tooltip.tsx b/src/components/Tooltip.tsx index 0823a26..57973da 100644 --- a/src/components/Tooltip.tsx +++ b/src/components/Tooltip.tsx @@ -31,6 +31,7 @@ const Tooltip = ({ vertical: 'none', horizontal: 'none', }; + if (distanceFromTop < 60) { moveTooltip = { ...moveTooltip, vertical: 'down' }; } @@ -41,9 +42,9 @@ const Tooltip = ({ moveTooltip = { ...moveTooltip, horizontal: 'left' }; } - // console.log('Tooltip distance from top ', distanceFromTop); - // console.log('Tooltip distance from right ', distanceFromRight); - // console.log('Tooltip distance from left ', distanceFromLeft); + console.log('Tooltip distance from top ', distanceFromTop); + console.log('Tooltip distance from right ', distanceFromRight); + console.log('Tooltip distance from left ', distanceFromLeft); let contentYTranslation = ''; let triangeYTranslation = ''; From adf4546a607be1b60969d1efb30c7377730fd804 Mon Sep 17 00:00:00 2001 From: Eric Mulhern <83984184+eric-mulhern@users.noreply.github.com> Date: Thu, 27 Jan 2022 16:43:23 -0500 Subject: [PATCH 07/28] Update .npmrc removed sensitive data --- .npmrc | 1 - 1 file changed, 1 deletion(-) diff --git a/.npmrc b/.npmrc index 898adae..71071b2 100644 --- a/.npmrc +++ b/.npmrc @@ -1,3 +1,2 @@ @oslabs-beta:registry=https://npm.pkg.github.com -npm.pkg.github.com/:_authToken=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 \ No newline at end of file From d7d2c91ccba1c3afa3ec72864f467aaab7c7c634 Mon Sep 17 00:00:00 2001 From: Robert Crocker Date: Thu, 27 Jan 2022 18:48:36 -0300 Subject: [PATCH 08/28] Calculated distance from the right in the bar chart for the tooltip Co-authored-by: Dmytro Iershov idmytro@yahoo.com --- src/components/Rectangle.tsx | 27 ++++----------------------- src/components/Tooltip.tsx | 6 +++--- 2 files changed, 7 insertions(+), 26 deletions(-) diff --git a/src/components/Rectangle.tsx b/src/components/Rectangle.tsx index 43cd638..b9e1ab4 100644 --- a/src/components/Rectangle.tsx +++ b/src/components/Rectangle.tsx @@ -36,36 +36,17 @@ export const Rectangle = React.memo( // of the bar width to the cursor position to calculate the distance from // right hand side of the page. When the cursor enters the bar from the // right side of the bar we need to substract half of the bar width. - const cursorXPosition = - e.pageX - - e.nativeEvent.layerX + - e.nativeEvent.layerX - - margin.marginLeft; + const offsetFromLeft = e.pageX - e.nativeEvent.layerX + const cursorXPosition = offsetFromLeft + e.nativeEvent.layerX - margin.marginLeft; const rectMidPoint = (x ?? 0) + width / 2; + if (setTooltip) { - if (cursorXPosition <= rectMidPoint) { - tooltipState.distanceFromRight = - clientWidth - - (e.pageX - - e.nativeEvent.layerX + - margin.marginLeft + - (x ?? 0) + - width / 2); - } else { - tooltipState.distanceFromRight = - clientWidth - - (e.pageX - - e.nativeEvent.layerX + - margin.marginLeft + - (x ?? 0) - - width / 2); - } tooltipState = { cursorX: e.pageX - e.nativeEvent.layerX + (x ?? 0), cursorY: e.pageY - e.nativeEvent.layerY + (y ?? 0), distanceFromTop: e.clientY, - distanceFromRight: tooltipState.distanceFromRight, + distanceFromRight: clientWidth - (offsetFromLeft + margin.marginLeft + rectMidPoint), distanceFromLeft: e.pageX, data, }; diff --git a/src/components/Tooltip.tsx b/src/components/Tooltip.tsx index 57973da..fb7126e 100644 --- a/src/components/Tooltip.tsx +++ b/src/components/Tooltip.tsx @@ -42,9 +42,9 @@ const Tooltip = ({ moveTooltip = { ...moveTooltip, horizontal: 'left' }; } - console.log('Tooltip distance from top ', distanceFromTop); - console.log('Tooltip distance from right ', distanceFromRight); - console.log('Tooltip distance from left ', distanceFromLeft); + // console.log('Tooltip distance from top ', distanceFromTop); + // console.log('Tooltip distance from right ', distanceFromRight); + // console.log('Tooltip distance from left ', distanceFromLeft); let contentYTranslation = ''; let triangeYTranslation = ''; From e1181e4b1742910a86dc4c5f73b39e9575424852 Mon Sep 17 00:00:00 2001 From: Robert Crocker Date: Thu, 27 Jan 2022 18:53:33 -0300 Subject: [PATCH 09/28] Got the tooltip on the left working inside of the chart. Dmytro Iershov idmytro@yahoo.com --- src/App.tsx | 2 +- src/components/Rectangle.tsx | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index ecf0df4..ee27ed7 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -30,7 +30,7 @@ function App() { xKey="date" yKey="value" xAxis="bottom" - yAxis="left" + yAxis={false} yGrid={true} xAxisLabel="Date" legend={'bottom'} diff --git a/src/components/Rectangle.tsx b/src/components/Rectangle.tsx index b9e1ab4..d730b14 100644 --- a/src/components/Rectangle.tsx +++ b/src/components/Rectangle.tsx @@ -47,9 +47,10 @@ export const Rectangle = React.memo( cursorY: e.pageY - e.nativeEvent.layerY + (y ?? 0), distanceFromTop: e.clientY, distanceFromRight: clientWidth - (offsetFromLeft + margin.marginLeft + rectMidPoint), - distanceFromLeft: e.pageX, + distanceFromLeft: offsetFromLeft + margin.marginLeft + rectMidPoint, data, }; + console.log('TOOLTIP STATE ', tooltipState.distanceFromLeft); setTooltip(tooltipState); } }; From 5fe0599af222f1280bde4b03a24f034f0fd86798 Mon Sep 17 00:00:00 2001 From: Robert Crocker Date: Thu, 27 Jan 2022 19:00:28 -0300 Subject: [PATCH 10/28] The tooltip flips when it is too close to the top of the screen. Dmytro Iershov idmytro@yahoo.com --- src/components/Rectangle.tsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/components/Rectangle.tsx b/src/components/Rectangle.tsx index d730b14..cab77c5 100644 --- a/src/components/Rectangle.tsx +++ b/src/components/Rectangle.tsx @@ -37,20 +37,23 @@ export const Rectangle = React.memo( // right hand side of the page. When the cursor enters the bar from the // right side of the bar we need to substract half of the bar width. const offsetFromLeft = e.pageX - e.nativeEvent.layerX + const offsetFromTop = e.clientY - e.nativeEvent.layerY const cursorXPosition = offsetFromLeft + e.nativeEvent.layerX - margin.marginLeft; + const cursorYPosition = offsetFromTop + e.nativeEvent.layerY - margin.marginTop; const rectMidPoint = (x ?? 0) + width / 2; + const rectTop = (y ?? 0); if (setTooltip) { tooltipState = { cursorX: e.pageX - e.nativeEvent.layerX + (x ?? 0), cursorY: e.pageY - e.nativeEvent.layerY + (y ?? 0), - distanceFromTop: e.clientY, + distanceFromTop: offsetFromTop + margin.marginTop + rectTop, distanceFromRight: clientWidth - (offsetFromLeft + margin.marginLeft + rectMidPoint), distanceFromLeft: offsetFromLeft + margin.marginLeft + rectMidPoint, data, }; - console.log('TOOLTIP STATE ', tooltipState.distanceFromLeft); + console.log('TOOLTIP STATE ', tooltipState.distanceFromTop); setTooltip(tooltipState); } }; From e9998747d9ef408eac920839dac6ec5c41ce1586 Mon Sep 17 00:00:00 2001 From: Robert Crocker Date: Thu, 27 Jan 2022 21:44:12 -0300 Subject: [PATCH 11/28] The tooltip works for the line and scatter now. --- src/App.tsx | 5 +-- src/charts/LineChart/LineChart.tsx | 3 +- src/charts/ScatterPlot/ScatterPlot.tsx | 4 +- src/components/Rectangle.tsx | 2 +- src/components/VoronoiCell.tsx | 62 ++++++++++++++++++++------ src/components/VoronoiWrapper.tsx | 4 ++ types.ts | 4 +- 7 files changed, 63 insertions(+), 21 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index ee27ed7..9d2b1fe 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -55,12 +55,9 @@ function App() { xDataType="date" yKey="value" xAxis="bottom" - yAxis="left" + yAxis={false} yGrid={true} xAxisLabel="Date" - yAxisLabel="Value" - legend={'right'} - legendLabel="Markets" /> {tooltip && ( )} diff --git a/src/charts/ScatterPlot/ScatterPlot.tsx b/src/charts/ScatterPlot/ScatterPlot.tsx index 9d1600c..1c09e89 100644 --- a/src/charts/ScatterPlot/ScatterPlot.tsx +++ b/src/charts/ScatterPlot/ScatterPlot.tsx @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/restrict-plus-operands */ /** App.js */ import React, { useState, useMemo } from 'react'; @@ -185,7 +186,7 @@ export default function ScatterPlot({ {tooltip && ( )} diff --git a/src/components/Rectangle.tsx b/src/components/Rectangle.tsx index cab77c5..2797187 100644 --- a/src/components/Rectangle.tsx +++ b/src/components/Rectangle.tsx @@ -53,7 +53,7 @@ export const Rectangle = React.memo( distanceFromLeft: offsetFromLeft + margin.marginLeft + rectMidPoint, data, }; - console.log('TOOLTIP STATE ', tooltipState.distanceFromTop); + setTooltip(tooltipState); } }; diff --git a/src/components/VoronoiCell.tsx b/src/components/VoronoiCell.tsx index 7a50e4b..14c03a2 100644 --- a/src/components/VoronoiCell.tsx +++ b/src/components/VoronoiCell.tsx @@ -1,5 +1,7 @@ -import React from 'react'; +/* eslint-disable @typescript-eslint/restrict-plus-operands */ +import React, { useState, useEffect } from 'react'; import { VoronoiProps } from '../../types'; +import useWindowDimensions from '../hooks/useWindowDimensions'; export const VoronoiCell = ({ fill, @@ -9,23 +11,57 @@ export const VoronoiCell = ({ cellCenter, setTooltip, data, + margin, }: VoronoiProps): JSX.Element => { + const { width, height } = useWindowDimensions(); + const [scrollPosition, setScrollPosition] = useState(0); + + const handleScroll = () => { + const position = window.pageYOffset; + setScrollPosition(position); + }; + + useEffect(() => { + window.addEventListener('scroll', handleScroll, { passive: true }); + + return () => { + window.removeEventListener('scroll', handleScroll); + }; + }, []); + + const tooltipState = { + cursorX: 0, + cursorY: 0, + distanceFromTop: 0, + distanceFromRight: 0, + distanceFromLeft: 0, + data, + }; + const onMouseMove = (e: any) => { - if (cellCenter) { - cellCenter.cy = - e.nativeEvent.pageY - e.nativeEvent.offsetY + cellCenter.cy; - cellCenter.cx = - e.nativeEvent.pageX - e.nativeEvent.offsetX + cellCenter.cx; - } - setTooltip ? setTooltip(cellCenter) : null; + const tooltipState = { + cursorX: e.nativeEvent.pageX - e.nativeEvent.layerX + cellCenter.cx, + cursorY: e.nativeEvent.pageY - e.nativeEvent.layerY + cellCenter.cy, + distanceFromTop: 0, + distanceFromRight: 0, + distanceFromLeft: 0, + data, + }; + + tooltipState.distanceFromTop = + tooltipState.cursorY + margin.top - scrollPosition; + tooltipState.distanceFromRight = width - tooltipState.cursorX; + tooltipState.distanceFromLeft = tooltipState.cursorX; + + setTooltip ? setTooltip(tooltipState) : null; }; const onMouseOut = (e: any) => { - if (cellCenter) { - cellCenter.cy = - cellCenter.cy - e.nativeEvent.pageY + e.nativeEvent.offsetY; - cellCenter.cx = - cellCenter.cx - e.nativeEvent.pageX + e.nativeEvent.offsetX; + if (tooltipState) { + tooltipState.cursorY = + tooltipState.cursorY - e.nativeEvent.pageY + e.nativeEvent.offsetY; + tooltipState.cursorX = + tooltipState.cursorX - e.nativeEvent.pageX + e.nativeEvent.offsetX; } setTooltip ? setTooltip(false) : null; }; diff --git a/src/components/VoronoiWrapper.tsx b/src/components/VoronoiWrapper.tsx index d706b05..120b986 100644 --- a/src/components/VoronoiWrapper.tsx +++ b/src/components/VoronoiWrapper.tsx @@ -1,6 +1,7 @@ import React from 'react'; import { Data, VoronoiBody } from '../../types'; import { VoronoiCell } from './VoronoiCell'; +import useWindowDimensions from '../hooks/useWindowDimensions'; export const VoronoiWrapper = React.memo( ({ @@ -11,7 +12,9 @@ export const VoronoiWrapper = React.memo( xAccessor, yAccessor, setTooltip, + margin }: VoronoiBody): JSX.Element => { + const {width, height} = useWindowDimensions(); return ( {data.map((element: Data, i: number) => ( @@ -26,6 +29,7 @@ export const VoronoiWrapper = React.memo( cy: yScale(yAccessor(element)), tooltipData: element, }} + margin={margin} setTooltip={setTooltip} data={element} /> diff --git a/types.ts b/types.ts index 38fda95..fce4432 100644 --- a/types.ts +++ b/types.ts @@ -327,7 +327,7 @@ export interface VoronoiProps { stroke: string; opacity: number; d: string | undefined; - cellCenter?: { cx: number; cy: number; tooltipData: Data }; + cellCenter: { cx: number; cy: number; tooltipData: Data }; data?: any; setTooltip?: React.Dispatch; } @@ -387,6 +387,7 @@ export interface VoronoiProps { stroke: string; opacity: number; d: string | undefined; + margin: Margin; } export interface VoronoiBody { data: Data; @@ -396,5 +397,6 @@ export interface VoronoiBody { xAccessor: xAccessorFunc; yAccessor: yAccessorFunc; setTooltip: React.Dispatch | undefined; + margin: Margin; } export type GroupAccessorFunc = (d: any) => number | Date; From ca6b84ac299b62c31eb64b0dea3c0822064886d1 Mon Sep 17 00:00:00 2001 From: Robert Crocker Date: Thu, 27 Jan 2022 22:50:44 -0300 Subject: [PATCH 12/28] The tooltip is now fully functioning in the Area Chart. --- src/App.tsx | 10 ++++-- src/charts/AreaChart/AreaChart.tsx | 2 +- src/components/ListeningRect.tsx | 50 +++++++++++++++++++++++++----- src/components/VoronoiCell.tsx | 2 +- types.ts | 1 + 5 files changed, 54 insertions(+), 11 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 9d2b1fe..89a8d49 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -20,7 +20,9 @@ function App() { data={fruit} label="label" value="value" + legend="top-right" outerRadius={240} + legendLabel="fruit" pieLabel={true} /> {tooltip && ( ; }) { + const clientWidth = useWindowDimensions().width; const anchor = useRef(null); + + const [scrollPosition, setScrollPosition] = useState(0); + + const handleScroll = () => { + const position = window.pageYOffset; + setScrollPosition(position); + }; + + useEffect(() => { + window.addEventListener('scroll', handleScroll, { passive: true }); + + return () => { + window.removeEventListener('scroll', handleScroll); + }; + }, []); const cellCenter = { cx: 0, cy: 0, tooltipData: {} }; + const tooltipState = { + cursorX: 0, + cursorY: 0, + distanceFromTop: 0, + distanceFromRight: 0, + distanceFromLeft: 0, + data, + }; function onMouseMove(e: any) { const mousePosition = d3.pointer(e); @@ -68,7 +94,7 @@ export default function ListeningRect({ const closestDataPoint = data[closestXIndex]; closestXValue = xAccessor(closestDataPoint); - cellCenter.cx = + tooltipState.cursorX = e.nativeEvent.pageX - e.nativeEvent.layerX + xScale(closestXValue); } @@ -94,17 +120,27 @@ export default function ListeningRect({ const closestKey = layers[closestYIndex].key; if (typeof closestXIndex === 'number') { closestYValue = layers[closestYIndex][closestXIndex][1]; - cellCenter.cy = e.pageY - e.nativeEvent.layerY + yScale(closestYValue); + tooltipState.cursorY = + e.pageY - e.nativeEvent.layerY + yScale(closestYValue); + + // console.log('TOOLTIP ', tooltipState); - cellCenter.tooltipData = { + tooltipState.data = { [xKey]: closestXValue, [yKey]: closestYValue, }; } } + tooltipState.distanceFromTop = + tooltipState.cursorY + margin.top - scrollPosition; + tooltipState.distanceFromRight = width - tooltipState.cursorX; + tooltipState.distanceFromLeft = tooltipState.cursorX; + + console.log('DIST FROM TOP ', tooltipState.distanceFromTop); + if (setTooltip) { - setTooltip(cellCenter); + setTooltip(tooltipState); } } const rectWidth = width - margin.right - margin.left; diff --git a/src/components/VoronoiCell.tsx b/src/components/VoronoiCell.tsx index 14c03a2..7fb3487 100644 --- a/src/components/VoronoiCell.tsx +++ b/src/components/VoronoiCell.tsx @@ -13,7 +13,7 @@ export const VoronoiCell = ({ data, margin, }: VoronoiProps): JSX.Element => { - const { width, height } = useWindowDimensions(); + const { width } = useWindowDimensions(); const [scrollPosition, setScrollPosition] = useState(0); const handleScroll = () => { diff --git a/types.ts b/types.ts index fce4432..80dede8 100644 --- a/types.ts +++ b/types.ts @@ -322,6 +322,7 @@ export interface ArcProps { setTooltip?: React.Dispatch; } +// eslint-disable-next-line import/export export interface VoronoiProps { fill: string; stroke: string; From eec12a6cd86df64fef858fb59a7b454831c1984c Mon Sep 17 00:00:00 2001 From: Robert Crocker Date: Thu, 27 Jan 2022 22:51:11 -0300 Subject: [PATCH 13/28] Ran npm formatter. --- src/components/Rectangle.tsx | 16 +++++++++------- src/components/VoronoiWrapper.tsx | 4 ++-- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/components/Rectangle.tsx b/src/components/Rectangle.tsx index 2797187..2fbf120 100644 --- a/src/components/Rectangle.tsx +++ b/src/components/Rectangle.tsx @@ -36,20 +36,22 @@ export const Rectangle = React.memo( // of the bar width to the cursor position to calculate the distance from // right hand side of the page. When the cursor enters the bar from the // right side of the bar we need to substract half of the bar width. - const offsetFromLeft = e.pageX - e.nativeEvent.layerX - const offsetFromTop = e.clientY - e.nativeEvent.layerY - const cursorXPosition = offsetFromLeft + e.nativeEvent.layerX - margin.marginLeft; - const cursorYPosition = offsetFromTop + e.nativeEvent.layerY - margin.marginTop; + const offsetFromLeft = e.pageX - e.nativeEvent.layerX; + const offsetFromTop = e.clientY - e.nativeEvent.layerY; + const cursorXPosition = + offsetFromLeft + e.nativeEvent.layerX - margin.marginLeft; + const cursorYPosition = + offsetFromTop + e.nativeEvent.layerY - margin.marginTop; const rectMidPoint = (x ?? 0) + width / 2; - const rectTop = (y ?? 0); + const rectTop = y ?? 0; if (setTooltip) { - tooltipState = { cursorX: e.pageX - e.nativeEvent.layerX + (x ?? 0), cursorY: e.pageY - e.nativeEvent.layerY + (y ?? 0), distanceFromTop: offsetFromTop + margin.marginTop + rectTop, - distanceFromRight: clientWidth - (offsetFromLeft + margin.marginLeft + rectMidPoint), + distanceFromRight: + clientWidth - (offsetFromLeft + margin.marginLeft + rectMidPoint), distanceFromLeft: offsetFromLeft + margin.marginLeft + rectMidPoint, data, }; diff --git a/src/components/VoronoiWrapper.tsx b/src/components/VoronoiWrapper.tsx index 120b986..40bc739 100644 --- a/src/components/VoronoiWrapper.tsx +++ b/src/components/VoronoiWrapper.tsx @@ -12,9 +12,9 @@ export const VoronoiWrapper = React.memo( xAccessor, yAccessor, setTooltip, - margin + margin, }: VoronoiBody): JSX.Element => { - const {width, height} = useWindowDimensions(); + const { width, height } = useWindowDimensions(); return ( {data.map((element: Data, i: number) => ( From 9a0c1fd0cb398895d28b703b6784e9f867acbdff Mon Sep 17 00:00:00 2001 From: Robert Crocker Date: Fri, 28 Jan 2022 00:03:58 -0300 Subject: [PATCH 14/28] Fixed the positioning error on the stacked bar and area chart. --- src/App.tsx | 50 ++++++++++---------------------- src/components/ListeningRect.tsx | 13 +++++---- src/components/Tooltip.tsx | 12 +++----- 3 files changed, 26 insertions(+), 49 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 89a8d49..dd1c2d4 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -8,6 +8,7 @@ import PieChart from './charts/PieChart/PieChart'; import portfolio from '../data/portfolio.json'; import penguins from '../data/penguins.json'; import fruit from '../data/fruit.json'; +import skinny_fruit from '../data/skinny_fruit.json'; import GlobalStyle from './styles/globals'; import { Container } from './styles/componentStyles'; @@ -16,23 +17,15 @@ function App() { return ( - - - - ); diff --git a/src/components/ListeningRect.tsx b/src/components/ListeningRect.tsx index 2e400db..c8c5ce1 100644 --- a/src/components/ListeningRect.tsx +++ b/src/components/ListeningRect.tsx @@ -123,8 +123,6 @@ export default function ListeningRect({ tooltipState.cursorY = e.pageY - e.nativeEvent.layerY + yScale(closestYValue); - // console.log('TOOLTIP ', tooltipState); - tooltipState.data = { [xKey]: closestXValue, [yKey]: closestYValue, @@ -132,12 +130,15 @@ export default function ListeningRect({ } } + console.log( + 'DIST FROM LEFT ', + margin.left - margin.right - tooltipState.cursorX + ); tooltipState.distanceFromTop = tooltipState.cursorY + margin.top - scrollPosition; - tooltipState.distanceFromRight = width - tooltipState.cursorX; - tooltipState.distanceFromLeft = tooltipState.cursorX; - - console.log('DIST FROM TOP ', tooltipState.distanceFromTop); + tooltipState.distanceFromRight = + width - (margin.left + tooltipState.cursorX); + tooltipState.distanceFromLeft = margin.left + tooltipState.cursorX; if (setTooltip) { setTooltip(tooltipState); diff --git a/src/components/Tooltip.tsx b/src/components/Tooltip.tsx index fb7126e..f48b4f1 100644 --- a/src/components/Tooltip.tsx +++ b/src/components/Tooltip.tsx @@ -42,21 +42,17 @@ const Tooltip = ({ moveTooltip = { ...moveTooltip, horizontal: 'left' }; } - // console.log('Tooltip distance from top ', distanceFromTop); - // console.log('Tooltip distance from right ', distanceFromRight); - // console.log('Tooltip distance from left ', distanceFromLeft); - let contentYTranslation = ''; let triangeYTranslation = ''; let triangeBorderYTranslation = ''; switch (moveTooltip.vertical) { case 'down': - contentYTranslation = `calc(10% + ${triangleSize}px)`; - triangeYTranslation = `calc(102% + ${triangleSize / 2}px)`; - triangeBorderYTranslation = `calc(100% + ${triangleSize / 2}px)`; + contentYTranslation = `calc(${triangleSize - 4}px)`; + triangeYTranslation = `calc(${triangleSize / 2 + 2}px)`; + triangeBorderYTranslation = `calc(${triangleSize / 2 + 0}px)`; break; case 'none': - contentYTranslation = `calc(-100% - ${triangleSize}px)`; + contentYTranslation = `calc(-102% - ${triangleSize}px)`; triangeYTranslation = `calc(-102% - ${triangleSize / 2}px)`; triangeBorderYTranslation = `calc(-100% - ${triangleSize / 2}px)`; } From 35f11238df9507d17f40ee278b6dc88f9a8fc2c3 Mon Sep 17 00:00:00 2001 From: Robert Crocker Date: Fri, 28 Jan 2022 00:19:31 -0300 Subject: [PATCH 15/28] Added margin offset to the voronoi cells to help the scatter plot and line. --- src/App.tsx | 42 +++++++++++++++++++++++++--------- src/components/VoronoiCell.tsx | 5 ++-- 2 files changed, 34 insertions(+), 13 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index dd1c2d4..2288cf5 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -17,7 +17,16 @@ function App() { return ( - + - + ); diff --git a/src/components/VoronoiCell.tsx b/src/components/VoronoiCell.tsx index 7fb3487..3b36daf 100644 --- a/src/components/VoronoiCell.tsx +++ b/src/components/VoronoiCell.tsx @@ -50,8 +50,9 @@ export const VoronoiCell = ({ tooltipState.distanceFromTop = tooltipState.cursorY + margin.top - scrollPosition; - tooltipState.distanceFromRight = width - tooltipState.cursorX; - tooltipState.distanceFromLeft = tooltipState.cursorX; + tooltipState.distanceFromRight = + width - (margin.left + tooltipState.cursorX); + tooltipState.distanceFromLeft = margin.left + tooltipState.cursorX; setTooltip ? setTooltip(tooltipState) : null; }; From 0dc90ab4510f7ec7edb1cb54b90fd93979e5f81d Mon Sep 17 00:00:00 2001 From: Robert Crocker Date: Fri, 28 Jan 2022 00:21:22 -0300 Subject: [PATCH 16/28] Put the default app.tsx back in place and ran formatting. --- src/App.tsx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 2288cf5..89a8d49 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -8,7 +8,6 @@ import PieChart from './charts/PieChart/PieChart'; import portfolio from '../data/portfolio.json'; import penguins from '../data/penguins.json'; import fruit from '../data/fruit.json'; -import skinny_fruit from '../data/skinny_fruit.json'; import GlobalStyle from './styles/globals'; import { Container } from './styles/componentStyles'; @@ -29,12 +28,11 @@ function App() { From f4daec789f14b2b70f295ceb4e0f2375ad3a4a22 Mon Sep 17 00:00:00 2001 From: Ece Ozalp Date: Thu, 27 Jan 2022 23:19:20 -0500 Subject: [PATCH 17/28] fixed lint errors --- .eslintrc.json | 5 +++-- src/charts/AreaChart/AreaChart.tsx | 7 +++---- src/charts/BarChart/BarChart.tsx | 14 ++++++++------ src/charts/LineChart/LineChart.tsx | 2 -- src/charts/PieChart/PieChart.tsx | 6 +++--- src/charts/ScatterPlot/ScatterPlot.tsx | 9 +++------ src/components/ListeningRect.tsx | 12 ++---------- src/components/Tooltip.tsx | 6 ++++-- types.ts | 19 +++++++++++-------- 9 files changed, 37 insertions(+), 43 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index f5b1a73..56ac143 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -19,8 +19,9 @@ "@typescript-eslint/no-unsafe-member-access": 0, "@typescript-eslint/no-unsafe-return": 0, "@typescript-eslint/no-unsafe-call": 0, - "react/display-name": 0 - + "react/display-name": 0, + "react-hooks/exhaustive-deps": "off", + "react-hooks/rules-of-hooks": "off" }, "plugins": ["react", "import", "@typescript-eslint"], "parser": "@typescript-eslint/parser", diff --git a/src/charts/AreaChart/AreaChart.tsx b/src/charts/AreaChart/AreaChart.tsx index d499fc5..5425e52 100644 --- a/src/charts/AreaChart/AreaChart.tsx +++ b/src/charts/AreaChart/AreaChart.tsx @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/restrict-plus-operands */ /** App.js */ import React, { useState, useMemo } from 'react'; /*eslint import/namespace: ['error', { allowComputed: true }]*/ @@ -8,6 +7,7 @@ import { AreaChartProps, xAccessorFunc, yAccessorFunc, + toolTipState, } from '../../../types'; import { Axis } from '../../components/ContinuousAxis'; import { Label } from '../../components/Label'; @@ -80,9 +80,8 @@ export default function AreaChart({ // generate arr of keys. these are used to render discrete areas to be displayed const keys = useMemo(() => { - let groups: d3.InternMap; const groupAccessor = (d: Data) => d[groupBy ?? '']; - groups = d3.group(data, groupAccessor); + const groups = d3.group(data, groupAccessor); return groupBy ? Array.from(groups).map((group) => group[0]) : [yKey]; }, [groupBy, yKey]); @@ -214,7 +213,7 @@ export default function AreaChart({ // Initialize event listeners and create interaction behavior // ******************** - const [tooltip, setTooltip] = useState(false); + const [tooltip, setTooltip] = useState(false); return (
diff --git a/src/charts/BarChart/BarChart.tsx b/src/charts/BarChart/BarChart.tsx index 318ddeb..1290a2a 100644 --- a/src/charts/BarChart/BarChart.tsx +++ b/src/charts/BarChart/BarChart.tsx @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/restrict-plus-operands */ /** App.js */ import React, { useState, useMemo } from 'react'; /*eslint import/namespace: ['error', { allowComputed: true }]*/ @@ -10,7 +9,12 @@ import { Rectangle } from '../../components/Rectangle'; import Tooltip from '../../components/Tooltip'; import { ColorLegend } from '../../components/ColorLegend'; import { transformSkinnyToWide } from '../../utils'; -import { BarChartProps, Data, yAccessorFunc } from '../../../types'; +import { + BarChartProps, + Data, + toolTipState, + yAccessorFunc, +} from '../../../types'; import { getXAxisCoordinates, getYAxisCoordinates, @@ -62,10 +66,8 @@ export default function BarChart({ // When the yKey key has been assigned to the groupBy variable we know the user didn't specify grouping const keys: string[] = useMemo(() => { - let groups: d3.InternMap; const groupAccessor = (d: Data) => d[groupBy ?? '']; - // eslint-disable-next-line prefer-const - groups = d3.group(data, groupAccessor); + const groups = d3.group(data, groupAccessor); return groupBy ? Array.from(groups).map((group) => group[0]) : [yKey]; }, [groupBy, yKey]); @@ -195,7 +197,7 @@ export default function BarChart({ // Initialize event listeners and create interaction behavior // ******************** - const [tooltip, setTooltip] = useState(false); + const [tooltip, setTooltip] = useState(false); return (
diff --git a/src/charts/LineChart/LineChart.tsx b/src/charts/LineChart/LineChart.tsx index 23b2af6..e396dda 100644 --- a/src/charts/LineChart/LineChart.tsx +++ b/src/charts/LineChart/LineChart.tsx @@ -11,8 +11,6 @@ import { LineChartProps, xAccessorFunc, yAccessorFunc, - GroupAccessorFunc, - Data, } from '../../../types'; import { getXAxisCoordinates, diff --git a/src/charts/PieChart/PieChart.tsx b/src/charts/PieChart/PieChart.tsx index 90b0e2d..0bec44e 100644 --- a/src/charts/PieChart/PieChart.tsx +++ b/src/charts/PieChart/PieChart.tsx @@ -136,7 +136,7 @@ export default function PieChart({ // ******************** const textTranform = (d: any) => { - const [x, y] = arcGenerator.centroid(d); + const [x, y]: number[] = arcGenerator.centroid(d); return `translate(${x}, ${y})`; }; @@ -235,7 +235,7 @@ export default function PieChart({ {pie.map((d: any, i: number) => ( - + {pieLabel && ( diff --git a/src/charts/ScatterPlot/ScatterPlot.tsx b/src/charts/ScatterPlot/ScatterPlot.tsx index 1c09e89..cf12e9f 100644 --- a/src/charts/ScatterPlot/ScatterPlot.tsx +++ b/src/charts/ScatterPlot/ScatterPlot.tsx @@ -1,14 +1,11 @@ -/* eslint-disable @typescript-eslint/restrict-plus-operands */ /** App.js */ import React, { useState, useMemo } from 'react'; - /*eslint import/namespace: ['error', { allowComputed: true }]*/ import * as d3 from 'd3'; import { useResponsive } from '../../hooks/useResponsive'; import { Axis } from '../../components/ContinuousAxis'; import { Circle } from '../../components/Circle'; import { ColorLegend } from '../../components/ColorLegend'; - import { d3Voronoi } from '../../functionality/voronoi'; import { xScaleDef } from '../../functionality/xScale'; import { yScaleDef } from '../../functionality/yScale'; @@ -19,6 +16,7 @@ import { xAccessorFunc, yAccessorFunc, Data, + toolTipState, } from '../../../types'; import { getXAxisCoordinates, @@ -66,9 +64,8 @@ export default function ScatterPlot({ if (xDataType !== undefined) xType = xDataType; const keys = useMemo(() => { - let groups: d3.InternMap; const groupAccessor = (d: Data) => d[groupBy ?? '']; - groups = d3.group(data, groupAccessor); + const groups = d3.group(data, groupAccessor); return groupBy ? Array.from(groups).map((group) => group[0]) : [yKey]; }, [groupBy, yKey]); @@ -166,7 +163,7 @@ export default function ScatterPlot({ // Initialize event listeners and create interaction behavior // ******************** - const [tooltip, setTooltip] = useState(false); + const [tooltip, setTooltip] = useState(false); const voronoi = useMemo(() => { return d3Voronoi( diff --git a/src/components/ListeningRect.tsx b/src/components/ListeningRect.tsx index c8c5ce1..aec8257 100644 --- a/src/components/ListeningRect.tsx +++ b/src/components/ListeningRect.tsx @@ -1,14 +1,9 @@ import React, { useState, useEffect, useRef } from 'react'; import * as d3 from 'd3'; - -import {} from '../../types'; - -import useWindowDimensions from '../hooks/useWindowDimensions'; - import { - Data, Margin, ScaleFunc, + toolTipState, xAccessorFunc, yAccessorFunc, } from '../../types'; @@ -44,7 +39,6 @@ export default function ListeningRect({ yAccessor: yAccessorFunc; setTooltip?: React.Dispatch; }) { - const clientWidth = useWindowDimensions().width; const anchor = useRef(null); const [scrollPosition, setScrollPosition] = useState(0); @@ -61,8 +55,7 @@ export default function ListeningRect({ window.removeEventListener('scroll', handleScroll); }; }, []); - const cellCenter = { cx: 0, cy: 0, tooltipData: {} }; - const tooltipState = { + const tooltipState: toolTipState = { cursorX: 0, cursorY: 0, distanceFromTop: 0, @@ -117,7 +110,6 @@ export default function ListeningRect({ }); if (typeof closestYIndex === 'number') { - const closestKey = layers[closestYIndex].key; if (typeof closestXIndex === 'number') { closestYValue = layers[closestYIndex][closestXIndex][1]; tooltipState.cursorY = diff --git a/src/components/Tooltip.tsx b/src/components/Tooltip.tsx index f48b4f1..0ac49a0 100644 --- a/src/components/Tooltip.tsx +++ b/src/components/Tooltip.tsx @@ -147,12 +147,14 @@ const Tooltip = ({ let yValString = data[yKey as string]; if (!isNaN(data[yKey as string])) { - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions yValString = `${Math.round(yValString * 100) / 100}`; } return ( -
+
{xKey} {xValString} diff --git a/types.ts b/types.ts index 80dede8..759faf9 100644 --- a/types.ts +++ b/types.ts @@ -4,6 +4,15 @@ export interface Data { [key: string]: any; } +export interface toolTipState { + cursorX: number, + cursorY: number, + distanceFromTop: number, + distanceFromRight: number, + distanceFromLeft: number, + data: any, +} + export interface ScatterPlotProps { data: Data[]; height?: T; @@ -310,7 +319,7 @@ export interface LineProps { } export interface ArcProps { - data: {}; + data: Record; dataTestId?: string; key: string; fill: string; @@ -331,6 +340,7 @@ export interface VoronoiProps { cellCenter: { cx: number; cy: number; tooltipData: Data }; data?: any; setTooltip?: React.Dispatch; + margin: Margin; } export type ColorScale = d3.ScaleOrdinal; @@ -383,13 +393,6 @@ export type yAccessorFunc = (d: any, i?: number) => number; export type Domain = number | Date | undefined; -export interface VoronoiProps { - fill: string; - stroke: string; - opacity: number; - d: string | undefined; - margin: Margin; -} export interface VoronoiBody { data: Data; voronoi: d3.Voronoi; From 23fef2eebffea5f6383e488467c9839bc87cb461 Mon Sep 17 00:00:00 2001 From: Robert Crocker Date: Fri, 28 Jan 2022 11:30:17 -0300 Subject: [PATCH 18/28] Fixed the value being presented in the tooltip of the stacked bar chart. --- src/charts/BarChart/BarChart.tsx | 2 +- src/charts/LineChart/LineChart.tsx | 6 +----- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/charts/BarChart/BarChart.tsx b/src/charts/BarChart/BarChart.tsx index 1290a2a..c1be4ef 100644 --- a/src/charts/BarChart/BarChart.tsx +++ b/src/charts/BarChart/BarChart.tsx @@ -85,7 +85,7 @@ export default function BarChart({ const getSequenceData = (sequence: Data) => { const xKeyValue = { [xKey]: sequence.data[xKey] }; - const yKeyValue = { [yKey]: sequence[1] }; + const yKeyValue = { [yKey]: sequence[1] - sequence[0] }; return { ...xKeyValue, ...yKeyValue }; }; diff --git a/src/charts/LineChart/LineChart.tsx b/src/charts/LineChart/LineChart.tsx index e396dda..28aa980 100644 --- a/src/charts/LineChart/LineChart.tsx +++ b/src/charts/LineChart/LineChart.tsx @@ -7,11 +7,7 @@ import * as d3 from 'd3'; import { Axis } from '../../components/ContinuousAxis'; import { Line } from '../../components/Line'; import { VoronoiWrapper } from '../../components/VoronoiWrapper'; -import { - LineChartProps, - xAccessorFunc, - yAccessorFunc, -} from '../../../types'; +import { LineChartProps, xAccessorFunc, yAccessorFunc } from '../../../types'; import { getXAxisCoordinates, getYAxisCoordinates, From ae3f52d71c28efd339a78729ca8d7d9da55f842d Mon Sep 17 00:00:00 2001 From: Ece Ozalp Date: Fri, 28 Jan 2022 09:42:12 -0500 Subject: [PATCH 19/28] turned on rule-of-hooks --- .eslintrc.json | 1 - 1 file changed, 1 deletion(-) diff --git a/.eslintrc.json b/.eslintrc.json index 56ac143..c1e7093 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -21,7 +21,6 @@ "@typescript-eslint/no-unsafe-call": 0, "react/display-name": 0, "react-hooks/exhaustive-deps": "off", - "react-hooks/rules-of-hooks": "off" }, "plugins": ["react", "import", "@typescript-eslint"], "parser": "@typescript-eslint/parser", From 501f363652516ab3c3df0bf9be22bf26710bd297 Mon Sep 17 00:00:00 2001 From: Ece Ozalp Date: Fri, 28 Jan 2022 09:49:14 -0500 Subject: [PATCH 20/28] deleted the unnecessary comma --- .eslintrc.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.eslintrc.json b/.eslintrc.json index c1e7093..8d9e001 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -20,7 +20,7 @@ "@typescript-eslint/no-unsafe-return": 0, "@typescript-eslint/no-unsafe-call": 0, "react/display-name": 0, - "react-hooks/exhaustive-deps": "off", + "react-hooks/exhaustive-deps": "off" }, "plugins": ["react", "import", "@typescript-eslint"], "parser": "@typescript-eslint/parser", From af2e9e95fc16ef9325f5f23f21f9ea3b80e97fce Mon Sep 17 00:00:00 2001 From: hi2dmitri Date: Fri, 28 Jan 2022 23:31:10 +0000 Subject: [PATCH 21/28] updated yScale to allow slicing yAxis in ScatterPlot and Line Chart. Added data sets to be used in docs --- data/coffee_shop.json | 38 + data/historical_gdp.json | 109 + data/life_expectancy.json | 1642 +++++++ data/ny_unemployment.json | 5747 ++++++++++++++++++++++++ data/skinny_fruit.json | 34 +- src/App.tsx | 105 +- src/charts/AreaChart/AreaChart.tsx | 3 +- src/charts/BarChart/BarChart.tsx | 1 + src/charts/LineChart/LineChart.tsx | 2 +- src/charts/ScatterPlot/ScatterPlot.tsx | 2 +- src/components/ContinuousAxis.tsx | 9 +- src/functionality/yScale.tsx | 13 +- 12 files changed, 7632 insertions(+), 73 deletions(-) create mode 100644 data/coffee_shop.json create mode 100644 data/historical_gdp.json create mode 100644 data/life_expectancy.json create mode 100644 data/ny_unemployment.json diff --git a/data/coffee_shop.json b/data/coffee_shop.json new file mode 100644 index 0000000..3f562d5 --- /dev/null +++ b/data/coffee_shop.json @@ -0,0 +1,38 @@ +[ + { + "product": "Mint", + "sales": 8342 + }, + { + "product": "Caffe Latte", + "sales": 8665 + }, + { + "product": "Amaretto", + "sales": 6781 + }, + { + "product": "Darjeeling", + "sales": 17758 + }, + { + "product": "Decaf Espresso", + "sales": 18888 + }, + { + "product": "Regular Espresso", + "sales": 6744 + }, + { + "product": "Decaf Irish Cream", + "sales": 14831 + }, + { + "product": "Colombian", + "sales": 30761 + }, + { + "product": "Caffe Mocha", + "sales": 21716 + } +] \ No newline at end of file diff --git a/data/historical_gdp.json b/data/historical_gdp.json new file mode 100644 index 0000000..5190770 --- /dev/null +++ b/data/historical_gdp.json @@ -0,0 +1,109 @@ +[{"group": "USA", + "year": "2012", + "GDP": 16961 +}, +{"group": "USA", + "year": "2013", + "GDP": 17273 +}, +{"group": "USA", + "year": "2014", + "GDP": 17709 +}, +{"group": "USA", + "year": "2015", + "GDP": 18238 +}, +{"group": "USA", + "year": "2016", + "GDP": 18550 +}, +{"group": "USA", + "year": "2017", + "GDP": 18978 +}, +{"group": "USA", + "year": "2018", + "GDP": 19550 +}, +{"group": "USA", + "year": "2019", + "GDP": 19968 +}, +{"group": "USA", + "year": "2020", + "GDP": 19269 +}, + {"group": "Developed Countries Less USA", + "year": "2012", + "GDP": 23909 + }, + {"group": "Developed Countries Less USA", + "year": "2013", + "GDP": 24134 + }, + {"group": "Developed Countries Less USA", + "year": "2014", + "GDP": 24536 + }, + {"group": "Developed Countries Less USA", + "year": "2015", + "GDP": 25033 + }, + {"group": "Developed Countries Less USA", + "year": "2016", + "GDP": 25467 + }, + {"group": "Developed Countries Less USA", + "year": "2017", + "GDP": 26107 + }, + {"group": "Developed Countries Less USA", + "year": "2018", + "GDP": 26574 + }, + {"group": "Developed Countries Less USA", + "year": "2019", + "GDP": 26939 + }, + {"group": "Developed Countries Less USA", + "year": "2020", + "GDP": 25350 + }, + {"group": "Developing Countries", + "year": "2012", + "GDP": 25829 + }, + {"group": "Developing Countries", + "year": "2013", + "GDP": 27212 + }, + {"group": "Developing Countries", + "year": "2014", + "GDP": 28555 + }, + {"group": "Developing Countries", + "year": "2015", + "GDP": 29821 + }, + {"group": "Developing Countries", + "year": "2016", + "GDP": 31170 + }, + {"group": "Developing Countries", + "year": "2017", + "GDP": 32697 + }, + {"group": "Developing Countries", + "year": "2018", + "GDP": 34127 + }, + {"group": "Developing Countries", + "year": "2019", + "GDP": 35391 + }, + {"group": "Developing Countries", + "year": "2020", + "GDP": 34752 + } +] \ No newline at end of file diff --git a/data/life_expectancy.json b/data/life_expectancy.json new file mode 100644 index 0000000..48e5bac --- /dev/null +++ b/data/life_expectancy.json @@ -0,0 +1,1642 @@ +[ + { + "Entity": "Afghanistan", + "Code": "AFG", + "Year": 2011, + "Life expectancy": 61.553, + "GDP per capita": 1792, + "145446-annotations": "", + "Population (historical estimates)": 30117411, + "Continent": "" + }, + { + "Entity": "Albania", + "Code": "ALB", + "Year": 2011, + "Life expectancy": 76.914, + "GDP per capita": 9484, + "145446-annotations": "", + "Population (historical estimates)": 2928601, + "Continent": "" + }, + { + "Entity": "Algeria", + "Code": "DZA", + "Year": 2011, + "Life expectancy": 75.199, + "GDP per capita": 13204, + "145446-annotations": "", + "Population (historical estimates)": 36661438, + "Continent": "" + }, + { + "Entity": "Angola", + "Code": "AGO", + "Year": 2011, + "Life expectancy": 56.33, + "GDP per capita": 8016, + "145446-annotations": "", + "Population (historical estimates)": 24220660, + "Continent": "" + }, + { + "Entity": "Argentina", + "Code": "ARG", + "Year": 2011, + "Life expectancy": 75.439, + "GDP per capita": 20003, + "145446-annotations": "", + "Population (historical estimates)": 41320497, + "Continent": "" + }, + { + "Entity": "Armenia", + "Code": "ARM", + "Year": 2011, + "Life expectancy": 73.572, + "GDP per capita": 8465, + "145446-annotations": "", + "Population (historical estimates)": 2876536, + "Continent": "" + }, + { + "Entity": "Australia", + "Code": "AUS", + "Year": 2011, + "Life expectancy": 82.119, + "GDP per capita": 46132, + "145446-annotations": "", + "Population (historical estimates)": 22538002, + "Continent": "" + }, + { + "Entity": "Austria", + "Code": "AUT", + "Year": 2011, + "Life expectancy": 80.776, + "GDP per capita": 41446, + "145446-annotations": "", + "Population (historical estimates)": 8453501, + "Continent": "" + }, + { + "Entity": "Azerbaijan", + "Code": "AZE", + "Year": 2011, + "Life expectancy": 71.234, + "GDP per capita": 16176, + "145446-annotations": "", + "Population (historical estimates)": 9146277, + "Continent": "" + }, + { + "Entity": "Bahrain", + "Code": "BHR", + "Year": 2011, + "Life expectancy": 76.2, + "GDP per capita": 36372, + "145446-annotations": "", + "Population (historical estimates)": 1278153, + "Continent": "" + }, + { + "Entity": "Bangladesh", + "Code": "BGD", + "Year": 2011, + "Life expectancy": 70.256, + "GDP per capita": 2772, + "145446-annotations": "", + "Population (historical estimates)": 149273134, + "Continent": "" + }, + { + "Entity": "Barbados", + "Code": "BRB", + "Year": 2011, + "Life expectancy": 78.456, + "GDP per capita": 11870, + "145446-annotations": "", + "Population (historical estimates)": 282987, + "Continent": "" + }, + { + "Entity": "Belarus", + "Code": "BLR", + "Year": 2011, + "Life expectancy": 71.443, + "GDP per capita": 17918, + "145446-annotations": "", + "Population (historical estimates)": 9415316, + "Continent": "" + }, + { + "Entity": "Belgium", + "Code": "BEL", + "Year": 2011, + "Life expectancy": 80.261, + "GDP per capita": 38130, + "145446-annotations": "", + "Population (historical estimates)": 11013860, + "Continent": "" + }, + { + "Entity": "Benin", + "Code": "BEN", + "Year": 2011, + "Life expectancy": 59.59, + "GDP per capita": 1836, + "145446-annotations": "", + "Population (historical estimates)": 9460829, + "Continent": "" + }, + { + "Entity": "Bolivia", + "Code": "BOL", + "Year": 2011, + "Life expectancy": 68.521, + "GDP per capita": 5331, + "145446-annotations": "", + "Population (historical estimates)": 10212951, + "Continent": "" + }, + { + "Entity": "Bosnia and Herzegovina", + "Code": "BIH", + "Year": 2011, + "Life expectancy": 76.219, + "GDP per capita": 8961, + "145446-annotations": "", + "Population (historical estimates)": 3661173, + "Continent": "" + }, + { + "Entity": "Botswana", + "Code": "BWA", + "Year": 2011, + "Life expectancy": 61.91, + "GDP per capita": 13376, + "145446-annotations": "", + "Population (historical estimates)": 2015406, + "Continent": "" + }, + { + "Entity": "Brazil", + "Code": "BRA", + "Year": 2011, + "Life expectancy": 73.921, + "GDP per capita": 14831, + "145446-annotations": "", + "Population (historical estimates)": 197514541, + "Continent": "" + }, + { + "Entity": "Bulgaria", + "Code": "BGR", + "Year": 2011, + "Life expectancy": 73.932, + "GDP per capita": 15112, + "145446-annotations": "", + "Population (historical estimates)": 7378652, + "Continent": "" + }, + { + "Entity": "Burkina Faso", + "Code": "BFA", + "Year": 2011, + "Life expectancy": 57.761, + "GDP per capita": 1344, + "145446-annotations": "", + "Population (historical estimates)": 16081915, + "Continent": "" + }, + { + "Entity": "Burundi", + "Code": "BDI", + "Year": 2011, + "Life expectancy": 57.925, + "GDP per capita": 719, + "145446-annotations": "", + "Population (historical estimates)": 8958406, + "Continent": "" + }, + { + "Entity": "Cambodia", + "Code": "KHM", + "Year": 2011, + "Life expectancy": 67.043, + "GDP per capita": 2496, + "145446-annotations": "", + "Population (historical estimates)": 14541421, + "Continent": "" + }, + { + "Entity": "Cameroon", + "Code": "CMR", + "Year": 2011, + "Life expectancy": 55.581, + "GDP per capita": 2494, + "145446-annotations": "", + "Population (historical estimates)": 20906392, + "Continent": "" + }, + { + "Entity": "Canada", + "Code": "CAN", + "Year": 2011, + "Life expectancy": 81.51, + "GDP per capita": 42197, + "145446-annotations": "", + "Population (historical estimates)": 34539156, + "Continent": "" + }, + { + "Entity": "Cape Verde", + "Code": "CPV", + "Year": 2011, + "Life expectancy": 71.243, + "GDP per capita": 6295, + "145446-annotations": "", + "Population (historical estimates)": 498858, + "Continent": "" + }, + { + "Entity": "Central African Republic", + "Code": "CAF", + "Year": 2011, + "Life expectancy": 47.95, + "GDP per capita": 909, + "145446-annotations": "", + "Population (historical estimates)": 4418639, + "Continent": "" + }, + { + "Entity": "Chad", + "Code": "TCD", + "Year": 2011, + "Life expectancy": 51.424, + "GDP per capita": 1661, + "145446-annotations": "", + "Population (historical estimates)": 12360986, + "Continent": "" + }, + { + "Entity": "Chile", + "Code": "CHL", + "Year": 2011, + "Life expectancy": 78.986, + "GDP per capita": 19705, + "145446-annotations": "", + "Population (historical estimates)": 17233584, + "Continent": "" + }, + { + "Entity": "China", + "Code": "CHN", + "Year": 2011, + "Life expectancy": 74.708, + "GDP per capita": 10221, + "145446-annotations": "", + "Population (historical estimates)": 1376497633, + "Continent": "" + }, + { + "Entity": "Colombia", + "Code": "COL", + "Year": 2011, + "Life expectancy": 75.655, + "GDP per capita": 11788, + "145446-annotations": "", + "Population (historical estimates)": 45662747, + "Continent": "" + }, + { + "Entity": "Comoros", + "Code": "COM", + "Year": 2011, + "Life expectancy": 62.24, + "GDP per capita": 1479, + "145446-annotations": "", + "Population (historical estimates)": 706578, + "Continent": "" + }, + { + "Entity": "Congo", + "Code": "COG", + "Year": 2011, + "Life expectancy": 60.785, + "GDP per capita": 5875, + "145446-annotations": "", + "Population (historical estimates)": 4394842, + "Continent": "" + }, + { + "Entity": "Costa Rica", + "Code": "CRI", + "Year": 2011, + "Life expectancy": 78.919, + "GDP per capita": 12366, + "145446-annotations": "", + "Population (historical estimates)": 4633086, + "Continent": "" + }, + { + "Entity": "Cote d'Ivoire", + "Code": "CIV", + "Year": 2011, + "Life expectancy": 53.62, + "GDP per capita": 2444, + "145446-annotations": "", + "Population (historical estimates)": 21028652, + "Continent": "" + }, + { + "Entity": "Croatia", + "Code": "HRV", + "Year": 2011, + "Life expectancy": 77.059, + "GDP per capita": 19813, + "145446-annotations": "", + "Population (historical estimates)": 4313098, + "Continent": "" + }, + { + "Entity": "Cuba", + "Code": "CUB", + "Year": 2011, + "Life expectancy": 78.4, + "GDP per capita": 6928, + "145446-annotations": "", + "Population (historical estimates)": 11236671, + "Continent": "" + }, + { + "Entity": "Cyprus", + "Code": "CYP", + "Year": 2011, + "Life expectancy": 79.621, + "GDP per capita": 27272, + "145446-annotations": "", + "Population (historical estimates)": 1124837, + "Continent": "" + }, + { + "Entity": "Czechia", + "Code": "CZE", + "Year": 2011, + "Life expectancy": 77.843, + "GDP per capita": 26725, + "145446-annotations": "", + "Population (historical estimates)": 10566512, + "Continent": "" + }, + { + "Entity": "Democratic Republic of Congo", + "Code": "COD", + "Year": 2011, + "Life expectancy": 57.427, + "GDP per capita": 681, + "145446-annotations": "", + "Population (historical estimates)": 66755151, + "Continent": "" + }, + { + "Entity": "Denmark", + "Code": "DNK", + "Year": 2011, + "Life expectancy": 79.704, + "GDP per capita": 43575, + "145446-annotations": "", + "Population (historical estimates)": 5582980, + "Continent": "" + }, + { + "Entity": "Djibouti", + "Code": "DJI", + "Year": 2011, + "Life expectancy": 60.667, + "GDP per capita": 2590, + "145446-annotations": "", + "Population (historical estimates)": 853671, + "Continent": "" + }, + { + "Entity": "Dominica", + "Code": "DMA", + "Year": 2011, + "Life expectancy": 74.111, + "GDP per capita": 8944, + "145446-annotations": "", + "Population (historical estimates)": 70912, + "Continent": "" + }, + { + "Entity": "Dominican Republic", + "Code": "DOM", + "Year": 2011, + "Life expectancy": 72.284, + "GDP per capita": 11679, + "145446-annotations": "", + "Population (historical estimates)": 9813219, + "Continent": "" + }, + { + "Entity": "Ecuador", + "Code": "ECU", + "Year": 2011, + "Life expectancy": 75.289, + "GDP per capita": 9985, + "145446-annotations": "", + "Population (historical estimates)": 15243885, + "Continent": "" + }, + { + "Entity": "Egypt", + "Code": "EGY", + "Year": 2011, + "Life expectancy": 70.543, + "GDP per capita": 10737, + "145446-annotations": "", + "Population (historical estimates)": 84529251, + "Continent": "" + }, + { + "Entity": "El Salvador", + "Code": "SLV", + "Year": 2011, + "Life expectancy": 71.449, + "GDP per capita": 7607, + "145446-annotations": "", + "Population (historical estimates)": 6210567, + "Continent": "" + }, + { + "Entity": "Estonia", + "Code": "EST", + "Year": 2011, + "Life expectancy": 75.893, + "GDP per capita": 21997, + "145446-annotations": "", + "Population (historical estimates)": 1327701, + "Continent": "" + }, + { + "Entity": "Eswatini", + "Code": "SWZ", + "Year": 2011, + "Life expectancy": 48.141, + "GDP per capita": 7389, + "145446-annotations": "", + "Population (historical estimates)": 1072029, + "Continent": "" + }, + { + "Entity": "Ethiopia", + "Code": "ETH", + "Year": 2011, + "Life expectancy": 62.505, + "GDP per capita": 1199, + "145446-annotations": "", + "Population (historical estimates)": 90139928, + "Continent": "" + }, + { + "Entity": "Finland", + "Code": "FIN", + "Year": 2011, + "Life expectancy": 80.365, + "GDP per capita": 38432, + "145446-annotations": "", + "Population (historical estimates)": 5390036, + "Continent": "" + }, + { + "Entity": "France", + "Code": "FRA", + "Year": 2011, + "Life expectancy": 81.692, + "GDP per capita": 36691, + "145446-annotations": "", + "Population (historical estimates)": 63222229, + "Continent": "" + }, + { + "Entity": "Gabon", + "Code": "GAB", + "Year": 2011, + "Life expectancy": 62.168, + "GDP per capita": 16403, + "145446-annotations": "", + "Population (historical estimates)": 1684629, + "Continent": "" + }, + { + "Entity": "Gambia", + "Code": "GMB", + "Year": 2011, + "Life expectancy": 59.917, + "GDP per capita": 1669, + "145446-annotations": "", + "Population (historical estimates)": 1848142, + "Continent": "" + }, + { + "Entity": "Georgia", + "Code": "GEO", + "Year": 2011, + "Life expectancy": 71.773, + "GDP per capita": 8946, + "145446-annotations": "", + "Population (historical estimates)": 4081012, + "Continent": "" + }, + { + "Entity": "Germany", + "Code": "DEU", + "Year": 2011, + "Life expectancy": 80.261, + "GDP per capita": 43189, + "145446-annotations": "", + "Population (historical estimates)": 80855629, + "Continent": "" + }, + { + "Entity": "Ghana", + "Code": "GHA", + "Year": 2011, + "Life expectancy": 61.381, + "GDP per capita": 3283, + "145446-annotations": "", + "Population (historical estimates)": 25387713, + "Continent": "" + }, + { + "Entity": "Greece", + "Code": "GRC", + "Year": 2011, + "Life expectancy": 80.754, + "GDP per capita": 24349, + "145446-annotations": "", + "Population (historical estimates)": 10829074, + "Continent": "" + }, + { + "Entity": "Guatemala", + "Code": "GTM", + "Year": 2011, + "Life expectancy": 71.861, + "GDP per capita": 6650, + "145446-annotations": "", + "Population (historical estimates)": 14948792, + "Continent": "" + }, + { + "Entity": "Guinea", + "Code": "GIN", + "Year": 2011, + "Life expectancy": 57.387, + "GDP per capita": 1347, + "145446-annotations": "", + "Population (historical estimates)": 10420459, + "Continent": "" + }, + { + "Entity": "Guinea-Bissau", + "Code": "GNB", + "Year": 2011, + "Life expectancy": 55.144, + "GDP per capita": 1413, + "145446-annotations": "", + "Population (historical estimates)": 1562996, + "Continent": "" + }, + { + "Entity": "Haiti", + "Code": "HTI", + "Year": 2011, + "Life expectancy": 60.879, + "GDP per capita": 1648, + "145446-annotations": "", + "Population (historical estimates)": 10100320, + "Continent": "" + }, + { + "Entity": "Honduras", + "Code": "HND", + "Year": 2011, + "Life expectancy": 73.569, + "GDP per capita": 4421, + "145446-annotations": "", + "Population (historical estimates)": 8480670, + "Continent": "" + }, + { + "Entity": "Hong Kong", + "Code": "HKG", + "Year": 2011, + "Life expectancy": 83.109, + "GDP per capita": 44532, + "145446-annotations": "", + "Population (historical estimates)": 7006598, + "Continent": "" + }, + { + "Entity": "Hungary", + "Code": "HUN", + "Year": 2011, + "Life expectancy": 74.795, + "GDP per capita": 20886, + "145446-annotations": "", + "Population (historical estimates)": 9895689, + "Continent": "" + }, + { + "Entity": "Iceland", + "Code": "ISL", + "Year": 2011, + "Life expectancy": 81.951, + "GDP per capita": 36740, + "145446-annotations": "", + "Population (historical estimates)": 323471, + "Continent": "" + }, + { + "Entity": "India", + "Code": "IND", + "Year": 2011, + "Life expectancy": 67.13, + "GDP per capita": 4768, + "145446-annotations": "", + "Population (historical estimates)": 1250287939, + "Continent": "" + }, + { + "Entity": "Indonesia", + "Code": "IDN", + "Year": 2011, + "Life expectancy": 69.542, + "GDP per capita": 8849, + "145446-annotations": "", + "Population (historical estimates)": 245115988, + "Continent": "" + }, + { + "Entity": "Iran", + "Code": "IRN", + "Year": 2011, + "Life expectancy": 74.352, + "GDP per capita": 18024, + "145446-annotations": "", + "Population (historical estimates)": 74634959, + "Continent": "" + }, + { + "Entity": "Iraq", + "Code": "IRQ", + "Year": 2011, + "Life expectancy": 68.848, + "GDP per capita": 11484, + "145446-annotations": "", + "Population (historical estimates)": 30725305, + "Continent": "" + }, + { + "Entity": "Ireland", + "Code": "IRL", + "Year": 2011, + "Life expectancy": 80.382, + "GDP per capita": 48980, + "145446-annotations": "", + "Population (historical estimates)": 4591115, + "Continent": "" + }, + { + "Entity": "Israel", + "Code": "ISR", + "Year": 2011, + "Life expectancy": 81.653, + "GDP per capita": 29370, + "145446-annotations": "", + "Population (historical estimates)": 7487095, + "Continent": "" + }, + { + "Entity": "Italy", + "Code": "ITA", + "Year": 2011, + "Life expectancy": 82.128, + "GDP per capita": 35151, + "145446-annotations": "", + "Population (historical estimates)": 59589070, + "Continent": "" + }, + { + "Entity": "Jamaica", + "Code": "JAM", + "Year": 2011, + "Life expectancy": 74.012, + "GDP per capita": 7141, + "145446-annotations": "", + "Population (historical estimates)": 2825932, + "Continent": "" + }, + { + "Entity": "Japan", + "Code": "JPN", + "Year": 2011, + "Life expectancy": 83.118, + "GDP per capita": 34979, + "145446-annotations": "", + "Population (historical estimates)": 128498966, + "Continent": "" + }, + { + "Entity": "Jordan", + "Code": "JOR", + "Year": 2011, + "Life expectancy": 73.581, + "GDP per capita": 11615, + "145446-annotations": "", + "Population (historical estimates)": 7662858, + "Continent": "" + }, + { + "Entity": "Kazakhstan", + "Code": "KAZ", + "Year": 2011, + "Life expectancy": 68.047, + "GDP per capita": 21302, + "145446-annotations": "", + "Population (historical estimates)": 16490669, + "Continent": "" + }, + { + "Entity": "Kenya", + "Code": "KEN", + "Year": 2011, + "Life expectancy": 61.851, + "GDP per capita": 2712, + "145446-annotations": "", + "Population (historical estimates)": 43178270, + "Continent": "" + }, + { + "Entity": "Kuwait", + "Code": "KWT", + "Year": 2011, + "Life expectancy": 74.55, + "GDP per capita": 77126, + "145446-annotations": "", + "Population (historical estimates)": 3168054, + "Continent": "" + }, + { + "Entity": "Kyrgyzstan", + "Code": "KGZ", + "Year": 2011, + "Life expectancy": 69.376, + "GDP per capita": 4142, + "145446-annotations": "", + "Population (historical estimates)": 5517927, + "Continent": "" + }, + { + "Entity": "Laos", + "Code": "LAO", + "Year": 2011, + "Life expectancy": 64.797, + "GDP per capita": 4401, + "145446-annotations": "", + "Population (historical estimates)": 6347564, + "Continent": "" + }, + { + "Entity": "Latvia", + "Code": "LVA", + "Year": 2011, + "Life expectancy": 73.323, + "GDP per capita": 18428, + "145446-annotations": "", + "Population (historical estimates)": 2093606, + "Continent": "" + }, + { + "Entity": "Lebanon", + "Code": "LBN", + "Year": 2011, + "Life expectancy": 78.507, + "GDP per capita": 16230, + "145446-annotations": "", + "Population (historical estimates)": 5202022, + "Continent": "" + }, + { + "Entity": "Lesotho", + "Code": "LSO", + "Year": 2011, + "Life expectancy": 46.207, + "GDP per capita": 2346, + "145446-annotations": "", + "Population (historical estimates)": 2003793, + "Continent": "" + }, + { + "Entity": "Liberia", + "Code": "LBR", + "Year": 2011, + "Life expectancy": 60.146, + "GDP per capita": 820, + "145446-annotations": "", + "Population (historical estimates)": 4017446, + "Continent": "" + }, + { + "Entity": "Libya", + "Code": "LBY", + "Year": 2011, + "Life expectancy": 71.956, + "GDP per capita": 12893, + "145446-annotations": "", + "Population (historical estimates)": 6247438, + "Continent": "" + }, + { + "Entity": "Lithuania", + "Code": "LTU", + "Year": 2011, + "Life expectancy": 73.256, + "GDP per capita": 20243, + "145446-annotations": "", + "Population (historical estimates)": 3083402, + "Continent": "" + }, + { + "Entity": "Luxembourg", + "Code": "LUX", + "Year": 2011, + "Life expectancy": 80.664, + "GDP per capita": 54031, + "145446-annotations": "", + "Population (historical estimates)": 519312, + "Continent": "" + }, + { + "Entity": "Madagascar", + "Code": "MDG", + "Year": 2011, + "Life expectancy": 63.836, + "GDP per capita": 1347, + "145446-annotations": "", + "Population (historical estimates)": 21743970, + "Continent": "" + }, + { + "Entity": "Malawi", + "Code": "MWI", + "Year": 2011, + "Life expectancy": 57.161, + "GDP per capita": 1102, + "145446-annotations": "", + "Population (historical estimates)": 14962118, + "Continent": "" + }, + { + "Entity": "Malaysia", + "Code": "MYS", + "Year": 2011, + "Life expectancy": 74.683, + "GDP per capita": 19390, + "145446-annotations": "", + "Population (historical estimates)": 28650962, + "Continent": "" + }, + { + "Entity": "Mali", + "Code": "MLI", + "Year": 2011, + "Life expectancy": 55.701, + "GDP per capita": 1500, + "145446-annotations": "", + "Population (historical estimates)": 15514593, + "Continent": "" + }, + { + "Entity": "Malta", + "Code": "MLT", + "Year": 2011, + "Life expectancy": 81.094, + "GDP per capita": 23871, + "145446-annotations": "", + "Population (historical estimates)": 417720, + "Continent": "" + }, + { + "Entity": "Mauritania", + "Code": "MRT", + "Year": 2011, + "Life expectancy": 62.799, + "GDP per capita": 3104, + "145446-annotations": "", + "Population (historical estimates)": 3598646, + "Continent": "" + }, + { + "Entity": "Mauritius", + "Code": "MUS", + "Year": 2011, + "Life expectancy": 73.718, + "GDP per capita": 16483, + "145446-annotations": "", + "Population (historical estimates)": 1251074, + "Continent": "" + }, + { + "Entity": "Mexico", + "Code": "MEX", + "Year": 2011, + "Life expectancy": 75.011, + "GDP per capita": 15210, + "145446-annotations": "", + "Population (historical estimates)": 115695468, + "Continent": "" + }, + { + "Entity": "Moldova", + "Code": "MDA", + "Year": 2011, + "Life expectancy": 70.119, + "GDP per capita": 4892, + "145446-annotations": "", + "Population (historical estimates)": 4079167, + "Continent": "" + }, + { + "Entity": "Mongolia", + "Code": "MNG", + "Year": 2011, + "Life expectancy": 67.818, + "GDP per capita": 9484, + "145446-annotations": "", + "Population (historical estimates)": 2770357, + "Continent": "" + }, + { + "Entity": "Montenegro", + "Code": "MNE", + "Year": 2011, + "Life expectancy": 75.505, + "GDP per capita": 15747, + "145446-annotations": "", + "Population (historical estimates)": 625271, + "Continent": "" + }, + { + "Entity": "Morocco", + "Code": "MAR", + "Year": 2011, + "Life expectancy": 74.696, + "GDP per capita": 7226, + "145446-annotations": "", + "Population (historical estimates)": 32781860, + "Continent": "" + }, + { + "Entity": "Mozambique", + "Code": "MOZ", + "Year": 2011, + "Life expectancy": 53.043, + "GDP per capita": 925, + "145446-annotations": "", + "Population (historical estimates)": 24187500, + "Continent": "" + }, + { + "Entity": "Myanmar", + "Code": "MMR", + "Year": 2011, + "Life expectancy": 63.983, + "GDP per capita": 3884, + "145446-annotations": "", + "Population (historical estimates)": 50990612, + "Continent": "" + }, + { + "Entity": "Namibia", + "Code": "NAM", + "Year": 2011, + "Life expectancy": 58.085, + "GDP per capita": 8203, + "145446-annotations": "", + "Population (historical estimates)": 2156698, + "Continent": "" + }, + { + "Entity": "Nepal", + "Code": "NPL", + "Year": 2011, + "Life expectancy": 68.028, + "GDP per capita": 2189, + "145446-annotations": "", + "Population (historical estimates)": 27041220, + "Continent": "" + }, + { + "Entity": "Netherlands", + "Code": "NLD", + "Year": 2011, + "Life expectancy": 81.015, + "GDP per capita": 44591, + "145446-annotations": "", + "Population (historical estimates)": 16738190, + "Continent": "" + }, + { + "Entity": "New Zealand", + "Code": "NZL", + "Year": 2011, + "Life expectancy": 81.052, + "GDP per capita": 32057, + "145446-annotations": "", + "Population (historical estimates)": 4418674, + "Continent": "" + }, + { + "Entity": "Nicaragua", + "Code": "NIC", + "Year": 2011, + "Life expectancy": 72.692, + "GDP per capita": 4189, + "145446-annotations": "", + "Population (historical estimates)": 5903035, + "Continent": "" + }, + { + "Entity": "Niger", + "Code": "NER", + "Year": 2011, + "Life expectancy": 58.081, + "GDP per capita": 799, + "145446-annotations": "", + "Population (historical estimates)": 17114770, + "Continent": "" + }, + { + "Entity": "Nigeria", + "Code": "NGA", + "Year": 2011, + "Life expectancy": 51.346, + "GDP per capita": 5136, + "145446-annotations": "", + "Population (historical estimates)": 162805080, + "Continent": "" + }, + { + "Entity": "North Korea", + "Code": "PRK", + "Year": 2011, + "Life expectancy": 70.012, + "GDP per capita": 1756.6108, + "145446-annotations": "", + "Population (historical estimates)": 24673392, + "Continent": "" + }, + { + "Entity": "North Macedonia", + "Code": "MKD", + "Year": 2011, + "Life expectancy": 74.846, + "GDP per capita": 11321, + "145446-annotations": "", + "Population (historical estimates)": 2072484, + "Continent": "" + }, + { + "Entity": "Norway", + "Code": "NOR", + "Year": 2011, + "Life expectancy": 81.345, + "GDP per capita": 80623, + "145446-annotations": "", + "Population (historical estimates)": 4948335, + "Continent": "" + }, + { + "Entity": "Oman", + "Code": "OMN", + "Year": 2011, + "Life expectancy": 75.916, + "GDP per capita": 44454, + "145446-annotations": "", + "Population (historical estimates)": 3251102, + "Continent": "" + }, + { + "Entity": "Pakistan", + "Code": "PAK", + "Year": 2011, + "Life expectancy": 65.562, + "GDP per capita": 4464, + "145446-annotations": "", + "Population (historical estimates)": 183340168, + "Continent": "" + }, + { + "Entity": "Palestine", + "Code": "PSE", + "Year": 2011, + "Life expectancy": 72.915, + "GDP per capita": 4863, + "145446-annotations": "", + "Population (historical estimates)": 4149654, + "Continent": "" + }, + { + "Entity": "Panama", + "Code": "PAN", + "Year": 2011, + "Life expectancy": 76.989, + "GDP per capita": 16762, + "145446-annotations": "", + "Population (historical estimates)": 3706479, + "Continent": "" + }, + { + "Entity": "Paraguay", + "Code": "PRY", + "Year": 2011, + "Life expectancy": 72.86, + "GDP per capita": 7377, + "145446-annotations": "", + "Population (historical estimates)": 6333981, + "Continent": "" + }, + { + "Entity": "Peru", + "Code": "PER", + "Year": 2011, + "Life expectancy": 74.697, + "GDP per capita": 10044, + "145446-annotations": "", + "Population (historical estimates)": 29264314, + "Continent": "" + }, + { + "Entity": "Philippines", + "Code": "PHL", + "Year": 2011, + "Life expectancy": 69.984, + "GDP per capita": 5851, + "145446-annotations": "", + "Population (historical estimates)": 95570049, + "Continent": "" + }, + { + "Entity": "Poland", + "Code": "POL", + "Year": 2011, + "Life expectancy": 76.647, + "GDP per capita": 21837, + "145446-annotations": "", + "Population (historical estimates)": 38286824, + "Continent": "" + }, + { + "Entity": "Portugal", + "Code": "PRT", + "Year": 2011, + "Life expectancy": 80.26, + "GDP per capita": 25133, + "145446-annotations": "", + "Population (historical estimates)": 10569388, + "Continent": "" + }, + { + "Entity": "Puerto Rico", + "Code": "PRI", + "Year": 2011, + "Life expectancy": 78.797, + "GDP per capita": 33981, + "145446-annotations": "", + "Population (historical estimates)": 3559862, + "Continent": "" + }, + { + "Entity": "Romania", + "Code": "ROU", + "Year": 2011, + "Life expectancy": 74.42, + "GDP per capita": 17174, + "145446-annotations": "", + "Population (historical estimates)": 20336718, + "Continent": "" + }, + { + "Entity": "Russia", + "Code": "RUS", + "Year": 2011, + "Life expectancy": 69.343, + "GDP per capita": 23130, + "145446-annotations": "", + "Population (historical estimates)": 143703027, + "Continent": "" + }, + { + "Entity": "Rwanda", + "Code": "RWA", + "Year": 2011, + "Life expectancy": 64.523, + "GDP per capita": 1449, + "145446-annotations": "", + "Population (historical estimates)": 10293333, + "Continent": "" + }, + { + "Entity": "Saint Lucia", + "Code": "LCA", + "Year": 2011, + "Life expectancy": 74.993, + "GDP per capita": 10255, + "145446-annotations": "", + "Population (historical estimates)": 175538, + "Continent": "" + }, + { + "Entity": "Sao Tome and Principe", + "Code": "STP", + "Year": 2011, + "Life expectancy": 67.885, + "GDP per capita": 3179, + "145446-annotations": "", + "Population (historical estimates)": 184521, + "Continent": "" + }, + { + "Entity": "Saudi Arabia", + "Code": "SAU", + "Year": 2011, + "Life expectancy": 74.089, + "GDP per capita": 48470, + "145446-annotations": "", + "Population (historical estimates)": 28267591, + "Continent": "" + }, + { + "Entity": "Senegal", + "Code": "SEN", + "Year": 2011, + "Life expectancy": 64.898, + "GDP per capita": 2123, + "145446-annotations": "", + "Population (historical estimates)": 13033814, + "Continent": "" + }, + { + "Entity": "Serbia", + "Code": "SRB", + "Year": 2011, + "Life expectancy": 74.364, + "GDP per capita": 12463, + "145446-annotations": "", + "Population (historical estimates)": 8963761, + "Continent": "" + }, + { + "Entity": "Seychelles", + "Code": "SYC", + "Year": 2011, + "Life expectancy": 72.976, + "GDP per capita": 21545, + "145446-annotations": "", + "Population (historical estimates)": 91882, + "Continent": "" + }, + { + "Entity": "Sierra Leone", + "Code": "SLE", + "Year": 2011, + "Life expectancy": 50.234, + "GDP per capita": 1479, + "145446-annotations": "", + "Population (historical estimates)": 6563238, + "Continent": "" + }, + { + "Entity": "Singapore", + "Code": "SGP", + "Year": 2011, + "Life expectancy": 82.048, + "GDP per capita": 61672, + "145446-annotations": "", + "Population (historical estimates)": 5263640, + "Continent": "" + }, + { + "Entity": "Slovakia", + "Code": "SVK", + "Year": 2011, + "Life expectancy": 75.782, + "GDP per capita": 22483, + "145446-annotations": "", + "Population (historical estimates)": 5408932, + "Continent": "" + }, + { + "Entity": "Slovenia", + "Code": "SVN", + "Year": 2011, + "Life expectancy": 79.725, + "GDP per capita": 26004, + "145446-annotations": "", + "Population (historical estimates)": 2051277, + "Continent": "" + }, + { + "Entity": "South Africa", + "Code": "ZAF", + "Year": 2011, + "Life expectancy": 58.895, + "GDP per capita": 11838, + "145446-annotations": "", + "Population (historical estimates)": 52003759, + "Continent": "" + }, + { + "Entity": "South Korea", + "Code": "KOR", + "Year": 2011, + "Life expectancy": 80.79, + "GDP per capita": 32225, + "145446-annotations": "", + "Population (historical estimates)": 49786153, + "Continent": "" + }, + { + "Entity": "Spain", + "Code": "ESP", + "Year": 2011, + "Life expectancy": 82.149, + "GDP per capita": 31600, + "145446-annotations": "", + "Population (historical estimates)": 47084242, + "Continent": "" + }, + { + "Entity": "Sri Lanka", + "Code": "LKA", + "Year": 2011, + "Life expectancy": 75.614, + "GDP per capita": 8918, + "145446-annotations": "", + "Population (historical estimates)": 20398496, + "Continent": "" + }, + { + "Entity": "Sudan", + "Code": "SDN", + "Year": 2011, + "Life expectancy": 63.171, + "GDP per capita": 3669, + "145446-annotations": "", + "Population (historical estimates)": 35349676, + "Continent": "" + }, + { + "Entity": "Sweden", + "Code": "SWE", + "Year": 2011, + "Life expectancy": 81.679, + "GDP per capita": 42079, + "145446-annotations": "", + "Population (historical estimates)": 9466705, + "Continent": "" + }, + { + "Entity": "Switzerland", + "Code": "CHE", + "Year": 2011, + "Life expectancy": 82.45, + "GDP per capita": 58686, + "145446-annotations": "", + "Population (historical estimates)": 7906988, + "Continent": "" + }, + { + "Entity": "Syria", + "Code": "SYR", + "Year": 2011, + "Life expectancy": 71.27, + "GDP per capita": 5979, + "145446-annotations": "", + "Population (historical estimates)": 21081814, + "Continent": "" + }, + { + "Entity": "Taiwan", + "Code": "TWN", + "Year": 2011, + "Life expectancy": 78.961, + "GDP per capita": 38565, + "145446-annotations": "", + "Population (historical estimates)": 23268760, + "Continent": "" + }, + { + "Entity": "Tajikistan", + "Code": "TJK", + "Year": 2011, + "Life expectancy": 69.055, + "GDP per capita": 3111, + "145446-annotations": "", + "Population (historical estimates)": 7697507, + "Continent": "" + }, + { + "Entity": "Tanzania", + "Code": "TZA", + "Year": 2011, + "Life expectancy": 59.525, + "GDP per capita": 2227, + "145446-annotations": "", + "Population (historical estimates)": 45673520, + "Continent": "" + }, + { + "Entity": "Thailand", + "Code": "THA", + "Year": 2011, + "Life expectancy": 74.593, + "GDP per capita": 13318, + "145446-annotations": "", + "Population (historical estimates)": 67518379, + "Continent": "" + }, + { + "Entity": "Togo", + "Code": "TGO", + "Year": 2011, + "Life expectancy": 58.092, + "GDP per capita": 1227, + "145446-annotations": "", + "Population (historical estimates)": 6595939, + "Continent": "" + }, + { + "Entity": "Trinidad and Tobago", + "Code": "TTO", + "Year": 2011, + "Life expectancy": 72.17, + "GDP per capita": 29745, + "145446-annotations": "", + "Population (historical estimates)": 1336180, + "Continent": "" + }, + { + "Entity": "Tunisia", + "Code": "TUN", + "Year": 2011, + "Life expectancy": 75.206, + "GDP per capita": 10437, + "145446-annotations": "", + "Population (historical estimates)": 10741872, + "Continent": "" + }, + { + "Entity": "Turkey", + "Code": "TUR", + "Year": 2011, + "Life expectancy": 74.944, + "GDP per capita": 17919, + "145446-annotations": "", + "Population (historical estimates)": 73443254, + "Continent": "" + }, + { + "Entity": "Turkmenistan", + "Code": "TKM", + "Year": 2011, + "Life expectancy": 66.928, + "GDP per capita": 16518, + "145446-annotations": "", + "Population (historical estimates)": 5174076, + "Continent": "" + }, + { + "Entity": "Uganda", + "Code": "UGA", + "Year": 2011, + "Life expectancy": 58.087, + "GDP per capita": 1890, + "145446-annotations": "", + "Population (historical estimates)": 33476771, + "Continent": "" + }, + { + "Entity": "Ukraine", + "Code": "UKR", + "Year": 2011, + "Life expectancy": 69.932, + "GDP per capita": 10333, + "145446-annotations": "", + "Population (historical estimates)": 45619850, + "Continent": "" + }, + { + "Entity": "United Arab Emirates", + "Code": "ARE", + "Year": 2011, + "Life expectancy": 76.521, + "GDP per capita": 65307, + "145446-annotations": "", + "Population (historical estimates)": 8946778, + "Continent": "" + }, + { + "Entity": "United Kingdom", + "Code": "GBR", + "Year": 2011, + "Life expectancy": 80.564, + "GDP per capita": 34971, + "145446-annotations": "", + "Population (historical estimates)": 64021922, + "Continent": "" + }, + { + "Entity": "United States", + "Code": "USA", + "Year": 2011, + "Life expectancy": 78.777, + "GDP per capita": 49675, + "145446-annotations": "", + "Population (historical estimates)": 311584051, + "Continent": "" + }, + { + "Entity": "Uruguay", + "Code": "URY", + "Year": 2011, + "Life expectancy": 76.882, + "GDP per capita": 17211, + "145446-annotations": "", + "Population (historical estimates)": 3368926, + "Continent": "" + }, + { + "Entity": "Uzbekistan", + "Code": "UZB", + "Year": 2011, + "Life expectancy": 69.91, + "GDP per capita": 7396, + "145446-annotations": "", + "Population (historical estimates)": 28977006, + "Continent": "" + }, + { + "Entity": "Venezuela", + "Code": "VEN", + "Year": 2011, + "Life expectancy": 73.11, + "GDP per capita": 17746, + "145446-annotations": "", + "Population (historical estimates)": 28887873, + "Continent": "" + }, + { + "Entity": "Vietnam", + "Code": "VNM", + "Year": 2011, + "Life expectancy": 74.904, + "GDP per capita": 4786, + "145446-annotations": "", + "Population (historical estimates)": 88871384, + "Continent": "" + }, + { + "Entity": "Yemen", + "Code": "YEM", + "Year": 2011, + "Life expectancy": 65.768, + "GDP per capita": 4088, + "145446-annotations": "", + "Population (historical estimates)": 23807586, + "Continent": "" + }, + { + "Entity": "Zambia", + "Code": "ZMB", + "Year": 2011, + "Life expectancy": 57.126, + "GDP per capita": 3205, + "145446-annotations": "", + "Population (historical estimates)": 14023199, + "Continent": "" + }, + { + "Entity": "Zimbabwe", + "Code": "ZWE", + "Year": 2011, + "Life expectancy": 52.896, + "GDP per capita": 1515, + "145446-annotations": "", + "Population (historical estimates)": 12894323, + "Continent": "" + } +] \ No newline at end of file diff --git a/data/ny_unemployment.json b/data/ny_unemployment.json new file mode 100644 index 0000000..470542d --- /dev/null +++ b/data/ny_unemployment.json @@ -0,0 +1,5747 @@ +[ + { + "date": "1990-01-01", + "unemployment rate": 6.5, + "county": "New York County" + }, + { + "date": "1990-02-01", + "unemployment rate": 6.1, + "county": "New York County" + }, + { + "date": "1990-03-01", + "unemployment rate": 5.5, + "county": "New York County" + }, + { + "date": "1990-04-01", + "unemployment rate": 5.1, + "county": "New York County" + }, + { + "date": "1990-05-01", + "unemployment rate": 5.4, + "county": "New York County" + }, + { + "date": "1990-06-01", + "unemployment rate": 5.2, + "county": "New York County" + }, + { + "date": "1990-07-01", + "unemployment rate": 5.8, + "county": "New York County" + }, + { + "date": "1990-08-01", + "unemployment rate": 5.7, + "county": "New York County" + }, + { + "date": "1990-09-01", + "unemployment rate": 6.3, + "county": "New York County" + }, + { + "date": "1990-10-01", + "unemployment rate": 6.5, + "county": "New York County" + }, + { + "date": "1990-11-01", + "unemployment rate": 6.7, + "county": "New York County" + }, + { + "date": "1990-12-01", + "unemployment rate": 6.7, + "county": "New York County" + }, + { + "date": "1991-01-01", + "unemployment rate": 7.6, + "county": "New York County" + }, + { + "date": "1991-02-01", + "unemployment rate": 7.6, + "county": "New York County" + }, + { + "date": "1991-03-01", + "unemployment rate": 7.5, + "county": "New York County" + }, + { + "date": "1991-04-01", + "unemployment rate": 7.1, + "county": "New York County" + }, + { + "date": "1991-05-01", + "unemployment rate": 7.7, + "county": "New York County" + }, + { + "date": "1991-06-01", + "unemployment rate": 7.7, + "county": "New York County" + }, + { + "date": "1991-07-01", + "unemployment rate": 7.7, + "county": "New York County" + }, + { + "date": "1991-08-01", + "unemployment rate": 7.8, + "county": "New York County" + }, + { + "date": "1991-09-01", + "unemployment rate": 7.6, + "county": "New York County" + }, + { + "date": "1991-10-01", + "unemployment rate": 7.9, + "county": "New York County" + }, + { + "date": "1991-11-01", + "unemployment rate": 8.4, + "county": "New York County" + }, + { + "date": "1991-12-01", + "unemployment rate": 8.5, + "county": "New York County" + }, + { + "date": "1992-01-01", + "unemployment rate": 9.5, + "county": "New York County" + }, + { + "date": "1992-02-01", + "unemployment rate": 9.6, + "county": "New York County" + }, + { + "date": "1992-03-01", + "unemployment rate": 9, + "county": "New York County" + }, + { + "date": "1992-04-01", + "unemployment rate": 8.5, + "county": "New York County" + }, + { + "date": "1992-05-01", + "unemployment rate": 9, + "county": "New York County" + }, + { + "date": "1992-06-01", + "unemployment rate": 9.7, + "county": "New York County" + }, + { + "date": "1992-07-01", + "unemployment rate": 9.8, + "county": "New York County" + }, + { + "date": "1992-08-01", + "unemployment rate": 9.5, + "county": "New York County" + }, + { + "date": "1992-09-01", + "unemployment rate": 9.7, + "county": "New York County" + }, + { + "date": "1992-10-01", + "unemployment rate": 9.5, + "county": "New York County" + }, + { + "date": "1992-11-01", + "unemployment rate": 9.6, + "county": "New York County" + }, + { + "date": "1992-12-01", + "unemployment rate": 9.8, + "county": "New York County" + }, + { + "date": "1993-01-01", + "unemployment rate": 10.7, + "county": "New York County" + }, + { + "date": "1993-02-01", + "unemployment rate": 10.3, + "county": "New York County" + }, + { + "date": "1993-03-01", + "unemployment rate": 9.1, + "county": "New York County" + }, + { + "date": "1993-04-01", + "unemployment rate": 8.3, + "county": "New York County" + }, + { + "date": "1993-05-01", + "unemployment rate": 8.4, + "county": "New York County" + }, + { + "date": "1993-06-01", + "unemployment rate": 8.7, + "county": "New York County" + }, + { + "date": "1993-07-01", + "unemployment rate": 8.8, + "county": "New York County" + }, + { + "date": "1993-08-01", + "unemployment rate": 8.6, + "county": "New York County" + }, + { + "date": "1993-09-01", + "unemployment rate": 8.3, + "county": "New York County" + }, + { + "date": "1993-10-01", + "unemployment rate": 8.9, + "county": "New York County" + }, + { + "date": "1993-11-01", + "unemployment rate": 8.8, + "county": "New York County" + }, + { + "date": "1993-12-01", + "unemployment rate": 8.8, + "county": "New York County" + }, + { + "date": "1994-01-01", + "unemployment rate": 9.3, + "county": "New York County" + }, + { + "date": "1994-02-01", + "unemployment rate": 8.7, + "county": "New York County" + }, + { + "date": "1994-03-01", + "unemployment rate": 8.2, + "county": "New York County" + }, + { + "date": "1994-04-01", + "unemployment rate": 7.7, + "county": "New York County" + }, + { + "date": "1994-05-01", + "unemployment rate": 7.3, + "county": "New York County" + }, + { + "date": "1994-06-01", + "unemployment rate": 7.4, + "county": "New York County" + }, + { + "date": "1994-07-01", + "unemployment rate": 7.7, + "county": "New York County" + }, + { + "date": "1994-08-01", + "unemployment rate": 7.5, + "county": "New York County" + }, + { + "date": "1994-09-01", + "unemployment rate": 7.2, + "county": "New York County" + }, + { + "date": "1994-10-01", + "unemployment rate": 7.2, + "county": "New York County" + }, + { + "date": "1994-11-01", + "unemployment rate": 6.7, + "county": "New York County" + }, + { + "date": "1994-12-01", + "unemployment rate": 6.2, + "county": "New York County" + }, + { + "date": "1995-01-01", + "unemployment rate": 7.2, + "county": "New York County" + }, + { + "date": "1995-02-01", + "unemployment rate": 6.7, + "county": "New York County" + }, + { + "date": "1995-03-01", + "unemployment rate": 6.6, + "county": "New York County" + }, + { + "date": "1995-04-01", + "unemployment rate": 6.8, + "county": "New York County" + }, + { + "date": "1995-05-01", + "unemployment rate": 6.8, + "county": "New York County" + }, + { + "date": "1995-06-01", + "unemployment rate": 7.2, + "county": "New York County" + }, + { + "date": "1995-07-01", + "unemployment rate": 7.3, + "county": "New York County" + }, + { + "date": "1995-08-01", + "unemployment rate": 7.2, + "county": "New York County" + }, + { + "date": "1995-09-01", + "unemployment rate": 7.2, + "county": "New York County" + }, + { + "date": "1995-10-01", + "unemployment rate": 7, + "county": "New York County" + }, + { + "date": "1995-11-01", + "unemployment rate": 6.8, + "county": "New York County" + }, + { + "date": "1995-12-01", + "unemployment rate": 6.8, + "county": "New York County" + }, + { + "date": "1996-01-01", + "unemployment rate": 7.3, + "county": "New York County" + }, + { + "date": "1996-02-01", + "unemployment rate": 7.1, + "county": "New York County" + }, + { + "date": "1996-03-01", + "unemployment rate": 7.3, + "county": "New York County" + }, + { + "date": "1996-04-01", + "unemployment rate": 6.6, + "county": "New York County" + }, + { + "date": "1996-05-01", + "unemployment rate": 7.3, + "county": "New York County" + }, + { + "date": "1996-06-01", + "unemployment rate": 7.3, + "county": "New York County" + }, + { + "date": "1996-07-01", + "unemployment rate": 7.7, + "county": "New York County" + }, + { + "date": "1996-08-01", + "unemployment rate": 7.2, + "county": "New York County" + }, + { + "date": "1996-09-01", + "unemployment rate": 7.4, + "county": "New York County" + }, + { + "date": "1996-10-01", + "unemployment rate": 7.5, + "county": "New York County" + }, + { + "date": "1996-11-01", + "unemployment rate": 7.8, + "county": "New York County" + }, + { + "date": "1996-12-01", + "unemployment rate": 7.8, + "county": "New York County" + }, + { + "date": "1997-01-01", + "unemployment rate": 8.5, + "county": "New York County" + }, + { + "date": "1997-02-01", + "unemployment rate": 8.1, + "county": "New York County" + }, + { + "date": "1997-03-01", + "unemployment rate": 8.1, + "county": "New York County" + }, + { + "date": "1997-04-01", + "unemployment rate": 7.7, + "county": "New York County" + }, + { + "date": "1997-05-01", + "unemployment rate": 7.7, + "county": "New York County" + }, + { + "date": "1997-06-01", + "unemployment rate": 8.2, + "county": "New York County" + }, + { + "date": "1997-07-01", + "unemployment rate": 7.9, + "county": "New York County" + }, + { + "date": "1997-08-01", + "unemployment rate": 7.7, + "county": "New York County" + }, + { + "date": "1997-09-01", + "unemployment rate": 7.9, + "county": "New York County" + }, + { + "date": "1997-10-01", + "unemployment rate": 7.5, + "county": "New York County" + }, + { + "date": "1997-11-01", + "unemployment rate": 7.1, + "county": "New York County" + }, + { + "date": "1997-12-01", + "unemployment rate": 7, + "county": "New York County" + }, + { + "date": "1998-01-01", + "unemployment rate": 7.6, + "county": "New York County" + }, + { + "date": "1998-02-01", + "unemployment rate": 7.4, + "county": "New York County" + }, + { + "date": "1998-03-01", + "unemployment rate": 7.1, + "county": "New York County" + }, + { + "date": "1998-04-01", + "unemployment rate": 5.9, + "county": "New York County" + }, + { + "date": "1998-05-01", + "unemployment rate": 6.5, + "county": "New York County" + }, + { + "date": "1998-06-01", + "unemployment rate": 6.8, + "county": "New York County" + }, + { + "date": "1998-07-01", + "unemployment rate": 6.7, + "county": "New York County" + }, + { + "date": "1998-08-01", + "unemployment rate": 6.4, + "county": "New York County" + }, + { + "date": "1998-09-01", + "unemployment rate": 6.5, + "county": "New York County" + }, + { + "date": "1998-10-01", + "unemployment rate": 6.7, + "county": "New York County" + }, + { + "date": "1998-11-01", + "unemployment rate": 6.5, + "county": "New York County" + }, + { + "date": "1998-12-01", + "unemployment rate": 6.2, + "county": "New York County" + }, + { + "date": "1999-01-01", + "unemployment rate": 6.6, + "county": "New York County" + }, + { + "date": "1999-02-01", + "unemployment rate": 6.6, + "county": "New York County" + }, + { + "date": "1999-03-01", + "unemployment rate": 5.9, + "county": "New York County" + }, + { + "date": "1999-04-01", + "unemployment rate": 5.8, + "county": "New York County" + }, + { + "date": "1999-05-01", + "unemployment rate": 5.7, + "county": "New York County" + }, + { + "date": "1999-06-01", + "unemployment rate": 6.2, + "county": "New York County" + }, + { + "date": "1999-07-01", + "unemployment rate": 6.2, + "county": "New York County" + }, + { + "date": "1999-08-01", + "unemployment rate": 5.7, + "county": "New York County" + }, + { + "date": "1999-09-01", + "unemployment rate": 5.9, + "county": "New York County" + }, + { + "date": "1999-10-01", + "unemployment rate": 5.7, + "county": "New York County" + }, + { + "date": "1999-11-01", + "unemployment rate": 5.4, + "county": "New York County" + }, + { + "date": "1999-12-01", + "unemployment rate": 4.9, + "county": "New York County" + }, + { + "date": "2000-01-01", + "unemployment rate": 5.7, + "county": "New York County" + }, + { + "date": "2000-02-01", + "unemployment rate": 5.4, + "county": "New York County" + }, + { + "date": "2000-03-01", + "unemployment rate": 5.4, + "county": "New York County" + }, + { + "date": "2000-04-01", + "unemployment rate": 4.8, + "county": "New York County" + }, + { + "date": "2000-05-01", + "unemployment rate": 5, + "county": "New York County" + }, + { + "date": "2000-06-01", + "unemployment rate": 4.8, + "county": "New York County" + }, + { + "date": "2000-07-01", + "unemployment rate": 5.1, + "county": "New York County" + }, + { + "date": "2000-08-01", + "unemployment rate": 5.1, + "county": "New York County" + }, + { + "date": "2000-09-01", + "unemployment rate": 4.8, + "county": "New York County" + }, + { + "date": "2000-10-01", + "unemployment rate": 4.9, + "county": "New York County" + }, + { + "date": "2000-11-01", + "unemployment rate": 4.9, + "county": "New York County" + }, + { + "date": "2000-12-01", + "unemployment rate": 4.6, + "county": "New York County" + }, + { + "date": "2001-01-01", + "unemployment rate": 5.2, + "county": "New York County" + }, + { + "date": "2001-02-01", + "unemployment rate": 5.2, + "county": "New York County" + }, + { + "date": "2001-03-01", + "unemployment rate": 5, + "county": "New York County" + }, + { + "date": "2001-04-01", + "unemployment rate": 4.7, + "county": "New York County" + }, + { + "date": "2001-05-01", + "unemployment rate": 4.8, + "county": "New York County" + }, + { + "date": "2001-06-01", + "unemployment rate": 5.2, + "county": "New York County" + }, + { + "date": "2001-07-01", + "unemployment rate": 5.4, + "county": "New York County" + }, + { + "date": "2001-08-01", + "unemployment rate": 6, + "county": "New York County" + }, + { + "date": "2001-09-01", + "unemployment rate": 6.3, + "county": "New York County" + }, + { + "date": "2001-10-01", + "unemployment rate": 6.8, + "county": "New York County" + }, + { + "date": "2001-11-01", + "unemployment rate": 7.1, + "county": "New York County" + }, + { + "date": "2001-12-01", + "unemployment rate": 7.3, + "county": "New York County" + }, + { + "date": "2002-01-01", + "unemployment rate": 8, + "county": "New York County" + }, + { + "date": "2002-02-01", + "unemployment rate": 7.8, + "county": "New York County" + }, + { + "date": "2002-03-01", + "unemployment rate": 7.8, + "county": "New York County" + }, + { + "date": "2002-04-01", + "unemployment rate": 7.6, + "county": "New York County" + }, + { + "date": "2002-05-01", + "unemployment rate": 7.3, + "county": "New York County" + }, + { + "date": "2002-06-01", + "unemployment rate": 7.5, + "county": "New York County" + }, + { + "date": "2002-07-01", + "unemployment rate": 7.6, + "county": "New York County" + }, + { + "date": "2002-08-01", + "unemployment rate": 7.3, + "county": "New York County" + }, + { + "date": "2002-09-01", + "unemployment rate": 7.3, + "county": "New York County" + }, + { + "date": "2002-10-01", + "unemployment rate": 7.6, + "county": "New York County" + }, + { + "date": "2002-11-01", + "unemployment rate": 7.9, + "county": "New York County" + }, + { + "date": "2002-12-01", + "unemployment rate": 7.7, + "county": "New York County" + }, + { + "date": "2003-01-01", + "unemployment rate": 8.2, + "county": "New York County" + }, + { + "date": "2003-02-01", + "unemployment rate": 7.9, + "county": "New York County" + }, + { + "date": "2003-03-01", + "unemployment rate": 7.5, + "county": "New York County" + }, + { + "date": "2003-04-01", + "unemployment rate": 7.2, + "county": "New York County" + }, + { + "date": "2003-05-01", + "unemployment rate": 7.2, + "county": "New York County" + }, + { + "date": "2003-06-01", + "unemployment rate": 7.8, + "county": "New York County" + }, + { + "date": "2003-07-01", + "unemployment rate": 7.5, + "county": "New York County" + }, + { + "date": "2003-08-01", + "unemployment rate": 7.4, + "county": "New York County" + }, + { + "date": "2003-09-01", + "unemployment rate": 7.5, + "county": "New York County" + }, + { + "date": "2003-10-01", + "unemployment rate": 7.2, + "county": "New York County" + }, + { + "date": "2003-11-01", + "unemployment rate": 7.1, + "county": "New York County" + }, + { + "date": "2003-12-01", + "unemployment rate": 6.6, + "county": "New York County" + }, + { + "date": "2004-01-01", + "unemployment rate": 7.3, + "county": "New York County" + }, + { + "date": "2004-02-01", + "unemployment rate": 6.9, + "county": "New York County" + }, + { + "date": "2004-03-01", + "unemployment rate": 6.9, + "county": "New York County" + }, + { + "date": "2004-04-01", + "unemployment rate": 6.1, + "county": "New York County" + }, + { + "date": "2004-05-01", + "unemployment rate": 6.1, + "county": "New York County" + }, + { + "date": "2004-06-01", + "unemployment rate": 6.5, + "county": "New York County" + }, + { + "date": "2004-07-01", + "unemployment rate": 6.1, + "county": "New York County" + }, + { + "date": "2004-08-01", + "unemployment rate": 5.8, + "county": "New York County" + }, + { + "date": "2004-09-01", + "unemployment rate": 5.7, + "county": "New York County" + }, + { + "date": "2004-10-01", + "unemployment rate": 5.6, + "county": "New York County" + }, + { + "date": "2004-11-01", + "unemployment rate": 5.3, + "county": "New York County" + }, + { + "date": "2004-12-01", + "unemployment rate": 5.1, + "county": "New York County" + }, + { + "date": "2005-01-01", + "unemployment rate": 5.5, + "county": "New York County" + }, + { + "date": "2005-02-01", + "unemployment rate": 5.5, + "county": "New York County" + }, + { + "date": "2005-03-01", + "unemployment rate": 4.7, + "county": "New York County" + }, + { + "date": "2005-04-01", + "unemployment rate": 4.7, + "county": "New York County" + }, + { + "date": "2005-05-01", + "unemployment rate": 4.7, + "county": "New York County" + }, + { + "date": "2005-06-01", + "unemployment rate": 4.8, + "county": "New York County" + }, + { + "date": "2005-07-01", + "unemployment rate": 5, + "county": "New York County" + }, + { + "date": "2005-08-01", + "unemployment rate": 4.6, + "county": "New York County" + }, + { + "date": "2005-09-01", + "unemployment rate": 5.1, + "county": "New York County" + }, + { + "date": "2005-10-01", + "unemployment rate": 4.9, + "county": "New York County" + }, + { + "date": "2005-11-01", + "unemployment rate": 5.1, + "county": "New York County" + }, + { + "date": "2005-12-01", + "unemployment rate": 4.6, + "county": "New York County" + }, + { + "date": "2006-01-01", + "unemployment rate": 4.8, + "county": "New York County" + }, + { + "date": "2006-02-01", + "unemployment rate": 4.9, + "county": "New York County" + }, + { + "date": "2006-03-01", + "unemployment rate": 4.5, + "county": "New York County" + }, + { + "date": "2006-04-01", + "unemployment rate": 4.3, + "county": "New York County" + }, + { + "date": "2006-05-01", + "unemployment rate": 4.1, + "county": "New York County" + }, + { + "date": "2006-06-01", + "unemployment rate": 4.3, + "county": "New York County" + }, + { + "date": "2006-07-01", + "unemployment rate": 4.5, + "county": "New York County" + }, + { + "date": "2006-08-01", + "unemployment rate": 4.2, + "county": "New York County" + }, + { + "date": "2006-09-01", + "unemployment rate": 4, + "county": "New York County" + }, + { + "date": "2006-10-01", + "unemployment rate": 3.8, + "county": "New York County" + }, + { + "date": "2006-11-01", + "unemployment rate": 3.9, + "county": "New York County" + }, + { + "date": "2006-12-01", + "unemployment rate": 3.6, + "county": "New York County" + }, + { + "date": "2007-01-01", + "unemployment rate": 4.6, + "county": "New York County" + }, + { + "date": "2007-02-01", + "unemployment rate": 4.3, + "county": "New York County" + }, + { + "date": "2007-03-01", + "unemployment rate": 3.8, + "county": "New York County" + }, + { + "date": "2007-04-01", + "unemployment rate": 3.7, + "county": "New York County" + }, + { + "date": "2007-05-01", + "unemployment rate": 4, + "county": "New York County" + }, + { + "date": "2007-06-01", + "unemployment rate": 4.3, + "county": "New York County" + }, + { + "date": "2007-07-01", + "unemployment rate": 4.6, + "county": "New York County" + }, + { + "date": "2007-08-01", + "unemployment rate": 4.3, + "county": "New York County" + }, + { + "date": "2007-09-01", + "unemployment rate": 4.2, + "county": "New York County" + }, + { + "date": "2007-10-01", + "unemployment rate": 4.3, + "county": "New York County" + }, + { + "date": "2007-11-01", + "unemployment rate": 4.1, + "county": "New York County" + }, + { + "date": "2007-12-01", + "unemployment rate": 4.2, + "county": "New York County" + }, + { + "date": "2008-01-01", + "unemployment rate": 4.8, + "county": "New York County" + }, + { + "date": "2008-02-01", + "unemployment rate": 4.6, + "county": "New York County" + }, + { + "date": "2008-03-01", + "unemployment rate": 4.3, + "county": "New York County" + }, + { + "date": "2008-04-01", + "unemployment rate": 4, + "county": "New York County" + }, + { + "date": "2008-05-01", + "unemployment rate": 4.3, + "county": "New York County" + }, + { + "date": "2008-06-01", + "unemployment rate": 4.5, + "county": "New York County" + }, + { + "date": "2008-07-01", + "unemployment rate": 4.8, + "county": "New York County" + }, + { + "date": "2008-08-01", + "unemployment rate": 5.1, + "county": "New York County" + }, + { + "date": "2008-09-01", + "unemployment rate": 5.2, + "county": "New York County" + }, + { + "date": "2008-10-01", + "unemployment rate": 5.3, + "county": "New York County" + }, + { + "date": "2008-11-01", + "unemployment rate": 5.6, + "county": "New York County" + }, + { + "date": "2008-12-01", + "unemployment rate": 6.1, + "county": "New York County" + }, + { + "date": "2009-01-01", + "unemployment rate": 7.1, + "county": "New York County" + }, + { + "date": "2009-02-01", + "unemployment rate": 7.8, + "county": "New York County" + }, + { + "date": "2009-03-01", + "unemployment rate": 8, + "county": "New York County" + }, + { + "date": "2009-04-01", + "unemployment rate": 7.6, + "county": "New York County" + }, + { + "date": "2009-05-01", + "unemployment rate": 8.4, + "county": "New York County" + }, + { + "date": "2009-06-01", + "unemployment rate": 8.7, + "county": "New York County" + }, + { + "date": "2009-07-01", + "unemployment rate": 8.9, + "county": "New York County" + }, + { + "date": "2009-08-01", + "unemployment rate": 9, + "county": "New York County" + }, + { + "date": "2009-09-01", + "unemployment rate": 8.9, + "county": "New York County" + }, + { + "date": "2009-10-01", + "unemployment rate": 9.1, + "county": "New York County" + }, + { + "date": "2009-11-01", + "unemployment rate": 8.7, + "county": "New York County" + }, + { + "date": "2009-12-01", + "unemployment rate": 8.6, + "county": "New York County" + }, + { + "date": "2010-01-01", + "unemployment rate": 9.8, + "county": "New York County" + }, + { + "date": "2010-02-01", + "unemployment rate": 9.5, + "county": "New York County" + }, + { + "date": "2010-03-01", + "unemployment rate": 9.2, + "county": "New York County" + }, + { + "date": "2010-04-01", + "unemployment rate": 8.7, + "county": "New York County" + }, + { + "date": "2010-05-01", + "unemployment rate": 8.5, + "county": "New York County" + }, + { + "date": "2010-06-01", + "unemployment rate": 8.5, + "county": "New York County" + }, + { + "date": "2010-07-01", + "unemployment rate": 8.6, + "county": "New York County" + }, + { + "date": "2010-08-01", + "unemployment rate": 8.5, + "county": "New York County" + }, + { + "date": "2010-09-01", + "unemployment rate": 8.3, + "county": "New York County" + }, + { + "date": "2010-10-01", + "unemployment rate": 8.2, + "county": "New York County" + }, + { + "date": "2010-11-01", + "unemployment rate": 8.2, + "county": "New York County" + }, + { + "date": "2010-12-01", + "unemployment rate": 7.7, + "county": "New York County" + }, + { + "date": "2011-01-01", + "unemployment rate": 8.3, + "county": "New York County" + }, + { + "date": "2011-02-01", + "unemployment rate": 8, + "county": "New York County" + }, + { + "date": "2011-03-01", + "unemployment rate": 7.5, + "county": "New York County" + }, + { + "date": "2011-04-01", + "unemployment rate": 7.3, + "county": "New York County" + }, + { + "date": "2011-05-01", + "unemployment rate": 7.5, + "county": "New York County" + }, + { + "date": "2011-06-01", + "unemployment rate": 7.8, + "county": "New York County" + }, + { + "date": "2011-07-01", + "unemployment rate": 7.9, + "county": "New York County" + }, + { + "date": "2011-08-01", + "unemployment rate": 8, + "county": "New York County" + }, + { + "date": "2011-09-01", + "unemployment rate": 8, + "county": "New York County" + }, + { + "date": "2011-10-01", + "unemployment rate": 8.2, + "county": "New York County" + }, + { + "date": "2011-11-01", + "unemployment rate": 8, + "county": "New York County" + }, + { + "date": "2011-12-01", + "unemployment rate": 7.9, + "county": "New York County" + }, + { + "date": "2012-01-01", + "unemployment rate": 8.6, + "county": "New York County" + }, + { + "date": "2012-02-01", + "unemployment rate": 8.6, + "county": "New York County" + }, + { + "date": "2012-03-01", + "unemployment rate": 8.2, + "county": "New York County" + }, + { + "date": "2012-04-01", + "unemployment rate": 7.7, + "county": "New York County" + }, + { + "date": "2012-05-01", + "unemployment rate": 8.1, + "county": "New York County" + }, + { + "date": "2012-06-01", + "unemployment rate": 8.4, + "county": "New York County" + }, + { + "date": "2012-07-01", + "unemployment rate": 8.5, + "county": "New York County" + }, + { + "date": "2012-08-01", + "unemployment rate": 8.3, + "county": "New York County" + }, + { + "date": "2012-09-01", + "unemployment rate": 7.7, + "county": "New York County" + }, + { + "date": "2012-10-01", + "unemployment rate": 7.9, + "county": "New York County" + }, + { + "date": "2012-11-01", + "unemployment rate": 7.5, + "county": "New York County" + }, + { + "date": "2012-12-01", + "unemployment rate": 7.6, + "county": "New York County" + }, + { + "date": "2013-01-01", + "unemployment rate": 8.5, + "county": "New York County" + }, + { + "date": "2013-02-01", + "unemployment rate": 8, + "county": "New York County" + }, + { + "date": "2013-03-01", + "unemployment rate": 7.5, + "county": "New York County" + }, + { + "date": "2013-04-01", + "unemployment rate": 7, + "county": "New York County" + }, + { + "date": "2013-05-01", + "unemployment rate": 7.4, + "county": "New York County" + }, + { + "date": "2013-06-01", + "unemployment rate": 7.8, + "county": "New York County" + }, + { + "date": "2013-07-01", + "unemployment rate": 7.8, + "county": "New York County" + }, + { + "date": "2013-08-01", + "unemployment rate": 7.6, + "county": "New York County" + }, + { + "date": "2013-09-01", + "unemployment rate": 7.4, + "county": "New York County" + }, + { + "date": "2013-10-01", + "unemployment rate": 7.5, + "county": "New York County" + }, + { + "date": "2013-11-01", + "unemployment rate": 6.8, + "county": "New York County" + }, + { + "date": "2013-12-01", + "unemployment rate": 6.4, + "county": "New York County" + }, + { + "date": "2014-01-01", + "unemployment rate": 6.9, + "county": "New York County" + }, + { + "date": "2014-02-01", + "unemployment rate": 6.9, + "county": "New York County" + }, + { + "date": "2014-03-01", + "unemployment rate": 6.5, + "county": "New York County" + }, + { + "date": "2014-04-01", + "unemployment rate": 5.7, + "county": "New York County" + }, + { + "date": "2014-05-01", + "unemployment rate": 6, + "county": "New York County" + }, + { + "date": "2014-06-01", + "unemployment rate": 6, + "county": "New York County" + }, + { + "date": "2014-07-01", + "unemployment rate": 6.2, + "county": "New York County" + }, + { + "date": "2014-08-01", + "unemployment rate": 6, + "county": "New York County" + }, + { + "date": "2014-09-01", + "unemployment rate": 5.5, + "county": "New York County" + }, + { + "date": "2014-10-01", + "unemployment rate": 5.4, + "county": "New York County" + }, + { + "date": "2014-11-01", + "unemployment rate": 5.4, + "county": "New York County" + }, + { + "date": "2014-12-01", + "unemployment rate": 5, + "county": "New York County" + }, + { + "date": "2015-01-01", + "unemployment rate": 5.6, + "county": "New York County" + }, + { + "date": "2015-02-01", + "unemployment rate": 5.4, + "county": "New York County" + }, + { + "date": "2015-03-01", + "unemployment rate": 4.9, + "county": "New York County" + }, + { + "date": "2015-04-01", + "unemployment rate": 4.7, + "county": "New York County" + }, + { + "date": "2015-05-01", + "unemployment rate": 4.8, + "county": "New York County" + }, + { + "date": "2015-06-01", + "unemployment rate": 4.8, + "county": "New York County" + }, + { + "date": "2015-07-01", + "unemployment rate": 4.8, + "county": "New York County" + }, + { + "date": "2015-08-01", + "unemployment rate": 4.7, + "county": "New York County" + }, + { + "date": "2015-09-01", + "unemployment rate": 4.3, + "county": "New York County" + }, + { + "date": "2015-10-01", + "unemployment rate": 4.4, + "county": "New York County" + }, + { + "date": "2015-11-01", + "unemployment rate": 4.4, + "county": "New York County" + }, + { + "date": "2015-12-01", + "unemployment rate": 4.3, + "county": "New York County" + }, + { + "date": "2016-01-01", + "unemployment rate": 4.8, + "county": "New York County" + }, + { + "date": "2016-02-01", + "unemployment rate": 4.7, + "county": "New York County" + }, + { + "date": "2016-03-01", + "unemployment rate": 4.6, + "county": "New York County" + }, + { + "date": "2016-04-01", + "unemployment rate": 4.2, + "county": "New York County" + }, + { + "date": "2016-05-01", + "unemployment rate": 4.1, + "county": "New York County" + }, + { + "date": "2016-06-01", + "unemployment rate": 4.5, + "county": "New York County" + }, + { + "date": "2016-07-01", + "unemployment rate": 4.8, + "county": "New York County" + }, + { + "date": "2016-08-01", + "unemployment rate": 4.8, + "county": "New York County" + }, + { + "date": "2016-09-01", + "unemployment rate": 4.7, + "county": "New York County" + }, + { + "date": "2016-10-01", + "unemployment rate": 4.7, + "county": "New York County" + }, + { + "date": "2016-11-01", + "unemployment rate": 4.2, + "county": "New York County" + }, + { + "date": "2016-12-01", + "unemployment rate": 3.9, + "county": "New York County" + }, + { + "date": "2017-01-01", + "unemployment rate": 4.5, + "county": "New York County" + }, + { + "date": "2017-02-01", + "unemployment rate": 4.4, + "county": "New York County" + }, + { + "date": "2017-03-01", + "unemployment rate": 3.9, + "county": "New York County" + }, + { + "date": "2017-04-01", + "unemployment rate": 3.7, + "county": "New York County" + }, + { + "date": "2017-05-01", + "unemployment rate": 3.9, + "county": "New York County" + }, + { + "date": "2017-06-01", + "unemployment rate": 4, + "county": "New York County" + }, + { + "date": "2017-07-01", + "unemployment rate": 4.3, + "county": "New York County" + }, + { + "date": "2017-08-01", + "unemployment rate": 4.3, + "county": "New York County" + }, + { + "date": "2017-09-01", + "unemployment rate": 4, + "county": "New York County" + }, + { + "date": "2017-10-01", + "unemployment rate": 3.9, + "county": "New York County" + }, + { + "date": "2017-11-01", + "unemployment rate": 3.6, + "county": "New York County" + }, + { + "date": "2017-12-01", + "unemployment rate": 3.6, + "county": "New York County" + }, + { + "date": "2018-01-01", + "unemployment rate": 4.1, + "county": "New York County" + }, + { + "date": "2018-02-01", + "unemployment rate": 4, + "county": "New York County" + }, + { + "date": "2018-03-01", + "unemployment rate": 3.8, + "county": "New York County" + }, + { + "date": "2018-04-01", + "unemployment rate": 3.5, + "county": "New York County" + }, + { + "date": "2018-05-01", + "unemployment rate": 3.2, + "county": "New York County" + }, + { + "date": "2018-06-01", + "unemployment rate": 3.7, + "county": "New York County" + }, + { + "date": "2018-07-01", + "unemployment rate": 3.8, + "county": "New York County" + }, + { + "date": "2018-08-01", + "unemployment rate": 3.7, + "county": "New York County" + }, + { + "date": "2018-09-01", + "unemployment rate": 3.5, + "county": "New York County" + }, + { + "date": "2018-10-01", + "unemployment rate": 3.6, + "county": "New York County" + }, + { + "date": "2018-11-01", + "unemployment rate": 3.4, + "county": "New York County" + }, + { + "date": "2018-12-01", + "unemployment rate": 3.5, + "county": "New York County" + }, + { + "date": "2019-01-01", + "unemployment rate": 4.3, + "county": "New York County" + }, + { + "date": "2019-02-01", + "unemployment rate": 3.9, + "county": "New York County" + }, + { + "date": "2019-03-01", + "unemployment rate": 3.6, + "county": "New York County" + }, + { + "date": "2019-04-01", + "unemployment rate": 3.2, + "county": "New York County" + }, + { + "date": "2019-05-01", + "unemployment rate": 3.4, + "county": "New York County" + }, + { + "date": "2019-06-01", + "unemployment rate": 3.4, + "county": "New York County" + }, + { + "date": "2019-07-01", + "unemployment rate": 3.6, + "county": "New York County" + }, + { + "date": "2019-08-01", + "unemployment rate": 3.5, + "county": "New York County" + }, + { + "date": "2019-09-01", + "unemployment rate": 3.1, + "county": "New York County" + }, + { + "date": "2019-10-01", + "unemployment rate": 3.3, + "county": "New York County" + }, + { + "date": "2019-11-01", + "unemployment rate": 3, + "county": "New York County" + }, + { + "date": "2019-12-01", + "unemployment rate": 2.7, + "county": "New York County" + }, + { + "date": "2020-01-01", + "unemployment rate": 3.4, + "county": "New York County" + }, + { + "date": "2020-02-01", + "unemployment rate": 3.3, + "county": "New York County" + }, + { + "date": "2020-03-01", + "unemployment rate": 3.7, + "county": "New York County" + }, + { + "date": "2020-04-01", + "unemployment rate": 11.5, + "county": "New York County" + }, + { + "date": "2020-05-01", + "unemployment rate": 15.2, + "county": "New York County" + }, + { + "date": "2020-06-01", + "unemployment rate": 14.4, + "county": "New York County" + }, + { + "date": "2020-07-01", + "unemployment rate": 14.8, + "county": "New York County" + }, + { + "date": "2020-08-01", + "unemployment rate": 11.6, + "county": "New York County" + }, + { + "date": "2020-09-01", + "unemployment rate": 11.4, + "county": "New York County" + }, + { + "date": "2020-10-01", + "unemployment rate": 9.1, + "county": "New York County" + }, + { + "date": "2020-11-01", + "unemployment rate": 9.1, + "county": "New York County" + }, + { + "date": "2020-12-01", + "unemployment rate": 9.1, + "county": "New York County" + }, + { + "date": "2021-01-01", + "unemployment rate": 10.1, + "county": "New York County" + }, + { + "date": "2021-02-01", + "unemployment rate": 10.2, + "county": "New York County" + }, + { + "date": "2021-03-01", + "unemployment rate": 8.6, + "county": "New York County" + }, + { + "date": "2021-04-01", + "unemployment rate": 8.2, + "county": "New York County" + }, + { + "date": "2021-05-01", + "unemployment rate": 7.5, + "county": "New York County" + }, + { + "date": "2021-06-01", + "unemployment rate": 7.7, + "county": "New York County" + }, + { + "date": "2021-07-01", + "unemployment rate": 7.8, + "county": "New York County" + }, + { + "date": "2021-08-01", + "unemployment rate": 7.5, + "county": "New York County" + }, + { + "date": "2021-09-01", + "unemployment rate": 6.9, + "county": "New York County" + }, + { + "date": "2021-10-01", + "unemployment rate": 6.5, + "county": "New York County" + }, + { + "date": "2021-11-01", + "unemployment rate": 6.1, + "county": "New York County" + }, + { + "date": "1990-01-01", + "unemployment rate": 4.4, + "county": "Suffolk County" +}, +{ + "date": "1990-02-01", + "unemployment rate": 4.4, + "county": "Suffolk County" +}, +{ + "date": "1990-03-01", + "unemployment rate": 4, + "county": "Suffolk County" +}, +{ + "date": "1990-04-01", + "unemployment rate": 3.8, + "county": "Suffolk County" +}, +{ + "date": "1990-05-01", + "unemployment rate": 4, + "county": "Suffolk County" +}, +{ + "date": "1990-06-01", + "unemployment rate": 4, + "county": "Suffolk County" +}, +{ + "date": "1990-07-01", + "unemployment rate": 4.7, + "county": "Suffolk County" +}, +{ + "date": "1990-08-01", + "unemployment rate": 4.7, + "county": "Suffolk County" +}, +{ + "date": "1990-09-01", + "unemployment rate": 4.7, + "county": "Suffolk County" +}, +{ + "date": "1990-10-01", + "unemployment rate": 4.6, + "county": "Suffolk County" +}, +{ + "date": "1990-11-01", + "unemployment rate": 4.7, + "county": "Suffolk County" +}, +{ + "date": "1990-12-01", + "unemployment rate": 5.1, + "county": "Suffolk County" +}, +{ + "date": "1991-01-01", + "unemployment rate": 6.1, + "county": "Suffolk County" +}, +{ + "date": "1991-02-01", + "unemployment rate": 6.5, + "county": "Suffolk County" +}, +{ + "date": "1991-03-01", + "unemployment rate": 6.5, + "county": "Suffolk County" +}, +{ + "date": "1991-04-01", + "unemployment rate": 6.3, + "county": "Suffolk County" +}, +{ + "date": "1991-05-01", + "unemployment rate": 7.1, + "county": "Suffolk County" +}, +{ + "date": "1991-06-01", + "unemployment rate": 7.2, + "county": "Suffolk County" +}, +{ + "date": "1991-07-01", + "unemployment rate": 7.7, + "county": "Suffolk County" +}, +{ + "date": "1991-08-01", + "unemployment rate": 7.8, + "county": "Suffolk County" +}, +{ + "date": "1991-09-01", + "unemployment rate": 7.7, + "county": "Suffolk County" +}, +{ + "date": "1991-10-01", + "unemployment rate": 7.1, + "county": "Suffolk County" +}, +{ + "date": "1991-11-01", + "unemployment rate": 5.7, + "county": "Suffolk County" +}, +{ + "date": "1991-12-01", + "unemployment rate": 7.4, + "county": "Suffolk County" +}, +{ + "date": "1992-01-01", + "unemployment rate": 8.4, + "county": "Suffolk County" +}, +{ + "date": "1992-02-01", + "unemployment rate": 8.8, + "county": "Suffolk County" +}, +{ + "date": "1992-03-01", + "unemployment rate": 8.3, + "county": "Suffolk County" +}, +{ + "date": "1992-04-01", + "unemployment rate": 7.7, + "county": "Suffolk County" +}, +{ + "date": "1992-05-01", + "unemployment rate": 8.1, + "county": "Suffolk County" +}, +{ + "date": "1992-06-01", + "unemployment rate": 8.7, + "county": "Suffolk County" +}, +{ + "date": "1992-07-01", + "unemployment rate": 9, + "county": "Suffolk County" +}, +{ + "date": "1992-08-01", + "unemployment rate": 8.6, + "county": "Suffolk County" +}, +{ + "date": "1992-09-01", + "unemployment rate": 8.7, + "county": "Suffolk County" +}, +{ + "date": "1992-10-01", + "unemployment rate": 7.8, + "county": "Suffolk County" +}, +{ + "date": "1992-11-01", + "unemployment rate": 7.8, + "county": "Suffolk County" +}, +{ + "date": "1992-12-01", + "unemployment rate": 7.6, + "county": "Suffolk County" +}, +{ + "date": "1993-01-01", + "unemployment rate": 8.2, + "county": "Suffolk County" +}, +{ + "date": "1993-02-01", + "unemployment rate": 8.2, + "county": "Suffolk County" +}, +{ + "date": "1993-03-01", + "unemployment rate": 7.5, + "county": "Suffolk County" +}, +{ + "date": "1993-04-01", + "unemployment rate": 6.8, + "county": "Suffolk County" +}, +{ + "date": "1993-05-01", + "unemployment rate": 7.2, + "county": "Suffolk County" +}, +{ + "date": "1993-06-01", + "unemployment rate": 7.6, + "county": "Suffolk County" +}, +{ + "date": "1993-07-01", + "unemployment rate": 7.6, + "county": "Suffolk County" +}, +{ + "date": "1993-08-01", + "unemployment rate": 7.6, + "county": "Suffolk County" +}, +{ + "date": "1993-09-01", + "unemployment rate": 7.3, + "county": "Suffolk County" +}, +{ + "date": "1993-10-01", + "unemployment rate": 6.9, + "county": "Suffolk County" +}, +{ + "date": "1993-11-01", + "unemployment rate": 6.7, + "county": "Suffolk County" +}, +{ + "date": "1993-12-01", + "unemployment rate": 6.5, + "county": "Suffolk County" +}, +{ + "date": "1994-01-01", + "unemployment rate": 7.4, + "county": "Suffolk County" +}, +{ + "date": "1994-02-01", + "unemployment rate": 7.6, + "county": "Suffolk County" +}, +{ + "date": "1994-03-01", + "unemployment rate": 7, + "county": "Suffolk County" +}, +{ + "date": "1994-04-01", + "unemployment rate": 6.1, + "county": "Suffolk County" +}, +{ + "date": "1994-05-01", + "unemployment rate": 5.8, + "county": "Suffolk County" +}, +{ + "date": "1994-06-01", + "unemployment rate": 6.1, + "county": "Suffolk County" +}, +{ + "date": "1994-07-01", + "unemployment rate": 6.5, + "county": "Suffolk County" +}, +{ + "date": "1994-08-01", + "unemployment rate": 6.3, + "county": "Suffolk County" +}, +{ + "date": "1994-09-01", + "unemployment rate": 5.8, + "county": "Suffolk County" +}, +{ + "date": "1994-10-01", + "unemployment rate": 5.4, + "county": "Suffolk County" +}, +{ + "date": "1994-11-01", + "unemployment rate": 5.3, + "county": "Suffolk County" +}, +{ + "date": "1994-12-01", + "unemployment rate": 5, + "county": "Suffolk County" +}, +{ + "date": "1995-01-01", + "unemployment rate": 6.2, + "county": "Suffolk County" +}, +{ + "date": "1995-02-01", + "unemployment rate": 5.9, + "county": "Suffolk County" +}, +{ + "date": "1995-03-01", + "unemployment rate": 5.5, + "county": "Suffolk County" +}, +{ + "date": "1995-04-01", + "unemployment rate": 5.1, + "county": "Suffolk County" +}, +{ + "date": "1995-05-01", + "unemployment rate": 5.2, + "county": "Suffolk County" +}, +{ + "date": "1995-06-01", + "unemployment rate": 5.2, + "county": "Suffolk County" +}, +{ + "date": "1995-07-01", + "unemployment rate": 5.8, + "county": "Suffolk County" +}, +{ + "date": "1995-08-01", + "unemployment rate": 5.7, + "county": "Suffolk County" +}, +{ + "date": "1995-09-01", + "unemployment rate": 5.3, + "county": "Suffolk County" +}, +{ + "date": "1995-10-01", + "unemployment rate": 4.9, + "county": "Suffolk County" +}, +{ + "date": "1995-11-01", + "unemployment rate": 4.8, + "county": "Suffolk County" +}, +{ + "date": "1995-12-01", + "unemployment rate": 4.8, + "county": "Suffolk County" +}, +{ + "date": "1996-01-01", + "unemployment rate": 5.8, + "county": "Suffolk County" +}, +{ + "date": "1996-02-01", + "unemployment rate": 5.6, + "county": "Suffolk County" +}, +{ + "date": "1996-03-01", + "unemployment rate": 5.2, + "county": "Suffolk County" +}, +{ + "date": "1996-04-01", + "unemployment rate": 4.9, + "county": "Suffolk County" +}, +{ + "date": "1996-05-01", + "unemployment rate": 4.6, + "county": "Suffolk County" +}, +{ + "date": "1996-06-01", + "unemployment rate": 4.4, + "county": "Suffolk County" +}, +{ + "date": "1996-07-01", + "unemployment rate": 5, + "county": "Suffolk County" +}, +{ + "date": "1996-08-01", + "unemployment rate": 4.5, + "county": "Suffolk County" +}, +{ + "date": "1996-09-01", + "unemployment rate": 4.1, + "county": "Suffolk County" +}, +{ + "date": "1996-10-01", + "unemployment rate": 3.7, + "county": "Suffolk County" +}, +{ + "date": "1996-11-01", + "unemployment rate": 3.8, + "county": "Suffolk County" +}, +{ + "date": "1996-12-01", + "unemployment rate": 3.9, + "county": "Suffolk County" +}, +{ + "date": "1997-01-01", + "unemployment rate": 4.6, + "county": "Suffolk County" +}, +{ + "date": "1997-02-01", + "unemployment rate": 4.8, + "county": "Suffolk County" +}, +{ + "date": "1997-03-01", + "unemployment rate": 4.3, + "county": "Suffolk County" +}, +{ + "date": "1997-04-01", + "unemployment rate": 3.8, + "county": "Suffolk County" +}, +{ + "date": "1997-05-01", + "unemployment rate": 3.8, + "county": "Suffolk County" +}, +{ + "date": "1997-06-01", + "unemployment rate": 4.2, + "county": "Suffolk County" +}, +{ + "date": "1997-07-01", + "unemployment rate": 4.8, + "county": "Suffolk County" +}, +{ + "date": "1997-08-01", + "unemployment rate": 4.7, + "county": "Suffolk County" +}, +{ + "date": "1997-09-01", + "unemployment rate": 4.4, + "county": "Suffolk County" +}, +{ + "date": "1997-10-01", + "unemployment rate": 4, + "county": "Suffolk County" +}, +{ + "date": "1997-11-01", + "unemployment rate": 3.8, + "county": "Suffolk County" +}, +{ + "date": "1997-12-01", + "unemployment rate": 3.7, + "county": "Suffolk County" +}, +{ + "date": "1998-01-01", + "unemployment rate": 4.3, + "county": "Suffolk County" +}, +{ + "date": "1998-02-01", + "unemployment rate": 4.3, + "county": "Suffolk County" +}, +{ + "date": "1998-03-01", + "unemployment rate": 3.9, + "county": "Suffolk County" +}, +{ + "date": "1998-04-01", + "unemployment rate": 3.6, + "county": "Suffolk County" +}, +{ + "date": "1998-05-01", + "unemployment rate": 3.3, + "county": "Suffolk County" +}, +{ + "date": "1998-06-01", + "unemployment rate": 3.4, + "county": "Suffolk County" +}, +{ + "date": "1998-07-01", + "unemployment rate": 3.7, + "county": "Suffolk County" +}, +{ + "date": "1998-08-01", + "unemployment rate": 3.7, + "county": "Suffolk County" +}, +{ + "date": "1998-09-01", + "unemployment rate": 3.3, + "county": "Suffolk County" +}, +{ + "date": "1998-10-01", + "unemployment rate": 3.1, + "county": "Suffolk County" +}, +{ + "date": "1998-11-01", + "unemployment rate": 3, + "county": "Suffolk County" +}, +{ + "date": "1998-12-01", + "unemployment rate": 3, + "county": "Suffolk County" +}, +{ + "date": "1999-01-01", + "unemployment rate": 3.7, + "county": "Suffolk County" +}, +{ + "date": "1999-02-01", + "unemployment rate": 3.9, + "county": "Suffolk County" +}, +{ + "date": "1999-03-01", + "unemployment rate": 3.6, + "county": "Suffolk County" +}, +{ + "date": "1999-04-01", + "unemployment rate": 3.3, + "county": "Suffolk County" +}, +{ + "date": "1999-05-01", + "unemployment rate": 3.3, + "county": "Suffolk County" +}, +{ + "date": "1999-06-01", + "unemployment rate": 3.6, + "county": "Suffolk County" +}, +{ + "date": "1999-07-01", + "unemployment rate": 4.2, + "county": "Suffolk County" +}, +{ + "date": "1999-08-01", + "unemployment rate": 4, + "county": "Suffolk County" +}, +{ + "date": "1999-09-01", + "unemployment rate": 3.6, + "county": "Suffolk County" +}, +{ + "date": "1999-10-01", + "unemployment rate": 3.2, + "county": "Suffolk County" +}, +{ + "date": "1999-11-01", + "unemployment rate": 3.1, + "county": "Suffolk County" +}, +{ + "date": "1999-12-01", + "unemployment rate": 3.1, + "county": "Suffolk County" +}, +{ + "date": "2000-01-01", + "unemployment rate": 4.1, + "county": "Suffolk County" +}, +{ + "date": "2000-02-01", + "unemployment rate": 4.1, + "county": "Suffolk County" +}, +{ + "date": "2000-03-01", + "unemployment rate": 3.6, + "county": "Suffolk County" +}, +{ + "date": "2000-04-01", + "unemployment rate": 3.1, + "county": "Suffolk County" +}, +{ + "date": "2000-05-01", + "unemployment rate": 3.1, + "county": "Suffolk County" +}, +{ + "date": "2000-06-01", + "unemployment rate": 3.2, + "county": "Suffolk County" +}, +{ + "date": "2000-07-01", + "unemployment rate": 3.5, + "county": "Suffolk County" +}, +{ + "date": "2000-08-01", + "unemployment rate": 3.5, + "county": "Suffolk County" +}, +{ + "date": "2000-09-01", + "unemployment rate": 3.4, + "county": "Suffolk County" +}, +{ + "date": "2000-10-01", + "unemployment rate": 3.1, + "county": "Suffolk County" +}, +{ + "date": "2000-11-01", + "unemployment rate": 3.1, + "county": "Suffolk County" +}, +{ + "date": "2000-12-01", + "unemployment rate": 3.1, + "county": "Suffolk County" +}, +{ + "date": "2001-01-01", + "unemployment rate": 3.9, + "county": "Suffolk County" +}, +{ + "date": "2001-02-01", + "unemployment rate": 3.8, + "county": "Suffolk County" +}, +{ + "date": "2001-03-01", + "unemployment rate": 3.4, + "county": "Suffolk County" +}, +{ + "date": "2001-04-01", + "unemployment rate": 3.3, + "county": "Suffolk County" +}, +{ + "date": "2001-05-01", + "unemployment rate": 3.1, + "county": "Suffolk County" +}, +{ + "date": "2001-06-01", + "unemployment rate": 3.4, + "county": "Suffolk County" +}, +{ + "date": "2001-07-01", + "unemployment rate": 3.8, + "county": "Suffolk County" +}, +{ + "date": "2001-08-01", + "unemployment rate": 4, + "county": "Suffolk County" +}, +{ + "date": "2001-09-01", + "unemployment rate": 3.9, + "county": "Suffolk County" +}, +{ + "date": "2001-10-01", + "unemployment rate": 4.1, + "county": "Suffolk County" +}, +{ + "date": "2001-11-01", + "unemployment rate": 4.3, + "county": "Suffolk County" +}, +{ + "date": "2001-12-01", + "unemployment rate": 4.5, + "county": "Suffolk County" +}, +{ + "date": "2002-01-01", + "unemployment rate": 5.4, + "county": "Suffolk County" +}, +{ + "date": "2002-02-01", + "unemployment rate": 5.4, + "county": "Suffolk County" +}, +{ + "date": "2002-03-01", + "unemployment rate": 5, + "county": "Suffolk County" +}, +{ + "date": "2002-04-01", + "unemployment rate": 4.6, + "county": "Suffolk County" +}, +{ + "date": "2002-05-01", + "unemployment rate": 4.4, + "county": "Suffolk County" +}, +{ + "date": "2002-06-01", + "unemployment rate": 4.6, + "county": "Suffolk County" +}, +{ + "date": "2002-07-01", + "unemployment rate": 4.9, + "county": "Suffolk County" +}, +{ + "date": "2002-08-01", + "unemployment rate": 4.7, + "county": "Suffolk County" +}, +{ + "date": "2002-09-01", + "unemployment rate": 4.4, + "county": "Suffolk County" +}, +{ + "date": "2002-10-01", + "unemployment rate": 4.2, + "county": "Suffolk County" +}, +{ + "date": "2002-11-01", + "unemployment rate": 4.5, + "county": "Suffolk County" +}, +{ + "date": "2002-12-01", + "unemployment rate": 4.6, + "county": "Suffolk County" +}, +{ + "date": "2003-01-01", + "unemployment rate": 5.3, + "county": "Suffolk County" +}, +{ + "date": "2003-02-01", + "unemployment rate": 5.3, + "county": "Suffolk County" +}, +{ + "date": "2003-03-01", + "unemployment rate": 4.9, + "county": "Suffolk County" +}, +{ + "date": "2003-04-01", + "unemployment rate": 4.6, + "county": "Suffolk County" +}, +{ + "date": "2003-05-01", + "unemployment rate": 4.5, + "county": "Suffolk County" +}, +{ + "date": "2003-06-01", + "unemployment rate": 4.8, + "county": "Suffolk County" +}, +{ + "date": "2003-07-01", + "unemployment rate": 5, + "county": "Suffolk County" +}, +{ + "date": "2003-08-01", + "unemployment rate": 4.9, + "county": "Suffolk County" +}, +{ + "date": "2003-09-01", + "unemployment rate": 4.8, + "county": "Suffolk County" +}, +{ + "date": "2003-10-01", + "unemployment rate": 4.6, + "county": "Suffolk County" +}, +{ + "date": "2003-11-01", + "unemployment rate": 4.8, + "county": "Suffolk County" +}, +{ + "date": "2003-12-01", + "unemployment rate": 4.8, + "county": "Suffolk County" +}, +{ + "date": "2004-01-01", + "unemployment rate": 5.6, + "county": "Suffolk County" +}, +{ + "date": "2004-02-01", + "unemployment rate": 5.6, + "county": "Suffolk County" +}, +{ + "date": "2004-03-01", + "unemployment rate": 5.4, + "county": "Suffolk County" +}, +{ + "date": "2004-04-01", + "unemployment rate": 4.6, + "county": "Suffolk County" +}, +{ + "date": "2004-05-01", + "unemployment rate": 4.4, + "county": "Suffolk County" +}, +{ + "date": "2004-06-01", + "unemployment rate": 4.6, + "county": "Suffolk County" +}, +{ + "date": "2004-07-01", + "unemployment rate": 4.8, + "county": "Suffolk County" +}, +{ + "date": "2004-08-01", + "unemployment rate": 4.5, + "county": "Suffolk County" +}, +{ + "date": "2004-09-01", + "unemployment rate": 4.4, + "county": "Suffolk County" +}, +{ + "date": "2004-10-01", + "unemployment rate": 4.1, + "county": "Suffolk County" +}, +{ + "date": "2004-11-01", + "unemployment rate": 4.2, + "county": "Suffolk County" +}, +{ + "date": "2004-12-01", + "unemployment rate": 4.4, + "county": "Suffolk County" +}, +{ + "date": "2005-01-01", + "unemployment rate": 4.9, + "county": "Suffolk County" +}, +{ + "date": "2005-02-01", + "unemployment rate": 5.1, + "county": "Suffolk County" +}, +{ + "date": "2005-03-01", + "unemployment rate": 4.2, + "county": "Suffolk County" +}, +{ + "date": "2005-04-01", + "unemployment rate": 3.9, + "county": "Suffolk County" +}, +{ + "date": "2005-05-01", + "unemployment rate": 3.9, + "county": "Suffolk County" +}, +{ + "date": "2005-06-01", + "unemployment rate": 4.1, + "county": "Suffolk County" +}, +{ + "date": "2005-07-01", + "unemployment rate": 4.5, + "county": "Suffolk County" +}, +{ + "date": "2005-08-01", + "unemployment rate": 4.1, + "county": "Suffolk County" +}, +{ + "date": "2005-09-01", + "unemployment rate": 4.1, + "county": "Suffolk County" +}, +{ + "date": "2005-10-01", + "unemployment rate": 3.8, + "county": "Suffolk County" +}, +{ + "date": "2005-11-01", + "unemployment rate": 4.1, + "county": "Suffolk County" +}, +{ + "date": "2005-12-01", + "unemployment rate": 3.9, + "county": "Suffolk County" +}, +{ + "date": "2006-01-01", + "unemployment rate": 4.3, + "county": "Suffolk County" +}, +{ + "date": "2006-02-01", + "unemployment rate": 4.7, + "county": "Suffolk County" +}, +{ + "date": "2006-03-01", + "unemployment rate": 4.2, + "county": "Suffolk County" +}, +{ + "date": "2006-04-01", + "unemployment rate": 4.1, + "county": "Suffolk County" +}, +{ + "date": "2006-05-01", + "unemployment rate": 3.7, + "county": "Suffolk County" +}, +{ + "date": "2006-06-01", + "unemployment rate": 3.8, + "county": "Suffolk County" +}, +{ + "date": "2006-07-01", + "unemployment rate": 4.3, + "county": "Suffolk County" +}, +{ + "date": "2006-08-01", + "unemployment rate": 4, + "county": "Suffolk County" +}, +{ + "date": "2006-09-01", + "unemployment rate": 3.6, + "county": "Suffolk County" +}, +{ + "date": "2006-10-01", + "unemployment rate": 3.3, + "county": "Suffolk County" +}, +{ + "date": "2006-11-01", + "unemployment rate": 3.5, + "county": "Suffolk County" +}, +{ + "date": "2006-12-01", + "unemployment rate": 3.4, + "county": "Suffolk County" +}, +{ + "date": "2007-01-01", + "unemployment rate": 4.1, + "county": "Suffolk County" +}, +{ + "date": "2007-02-01", + "unemployment rate": 4.2, + "county": "Suffolk County" +}, +{ + "date": "2007-03-01", + "unemployment rate": 3.7, + "county": "Suffolk County" +}, +{ + "date": "2007-04-01", + "unemployment rate": 3.3, + "county": "Suffolk County" +}, +{ + "date": "2007-05-01", + "unemployment rate": 3.3, + "county": "Suffolk County" +}, +{ + "date": "2007-06-01", + "unemployment rate": 3.5, + "county": "Suffolk County" +}, +{ + "date": "2007-07-01", + "unemployment rate": 4.1, + "county": "Suffolk County" +}, +{ + "date": "2007-08-01", + "unemployment rate": 4, + "county": "Suffolk County" +}, +{ + "date": "2007-09-01", + "unemployment rate": 3.8, + "county": "Suffolk County" +}, +{ + "date": "2007-10-01", + "unemployment rate": 3.6, + "county": "Suffolk County" +}, +{ + "date": "2007-11-01", + "unemployment rate": 3.7, + "county": "Suffolk County" +}, +{ + "date": "2007-12-01", + "unemployment rate": 4, + "county": "Suffolk County" +}, +{ + "date": "2008-01-01", + "unemployment rate": 4.7, + "county": "Suffolk County" +}, +{ + "date": "2008-02-01", + "unemployment rate": 4.9, + "county": "Suffolk County" +}, +{ + "date": "2008-03-01", + "unemployment rate": 4.6, + "county": "Suffolk County" +}, +{ + "date": "2008-04-01", + "unemployment rate": 4.1, + "county": "Suffolk County" +}, +{ + "date": "2008-05-01", + "unemployment rate": 4.5, + "county": "Suffolk County" +}, +{ + "date": "2008-06-01", + "unemployment rate": 4.6, + "county": "Suffolk County" +}, +{ + "date": "2008-07-01", + "unemployment rate": 5.2, + "county": "Suffolk County" +}, +{ + "date": "2008-08-01", + "unemployment rate": 5.3, + "county": "Suffolk County" +}, +{ + "date": "2008-09-01", + "unemployment rate": 5.1, + "county": "Suffolk County" +}, +{ + "date": "2008-10-01", + "unemployment rate": 5.1, + "county": "Suffolk County" +}, +{ + "date": "2008-11-01", + "unemployment rate": 5.4, + "county": "Suffolk County" +}, +{ + "date": "2008-12-01", + "unemployment rate": 6, + "county": "Suffolk County" +}, +{ + "date": "2009-01-01", + "unemployment rate": 7.1, + "county": "Suffolk County" +}, +{ + "date": "2009-02-01", + "unemployment rate": 7.7, + "county": "Suffolk County" +}, +{ + "date": "2009-03-01", + "unemployment rate": 7.4, + "county": "Suffolk County" +}, +{ + "date": "2009-04-01", + "unemployment rate": 6.9, + "county": "Suffolk County" +}, +{ + "date": "2009-05-01", + "unemployment rate": 7, + "county": "Suffolk County" +}, +{ + "date": "2009-06-01", + "unemployment rate": 7.3, + "county": "Suffolk County" +}, +{ + "date": "2009-07-01", + "unemployment rate": 7.6, + "county": "Suffolk County" +}, +{ + "date": "2009-08-01", + "unemployment rate": 7.6, + "county": "Suffolk County" +}, +{ + "date": "2009-09-01", + "unemployment rate": 7.6, + "county": "Suffolk County" +}, +{ + "date": "2009-10-01", + "unemployment rate": 7.5, + "county": "Suffolk County" +}, +{ + "date": "2009-11-01", + "unemployment rate": 7.5, + "county": "Suffolk County" +}, +{ + "date": "2009-12-01", + "unemployment rate": 7.8, + "county": "Suffolk County" +}, +{ + "date": "2010-01-01", + "unemployment rate": 8.7, + "county": "Suffolk County" +}, +{ + "date": "2010-02-01", + "unemployment rate": 8.9, + "county": "Suffolk County" +}, +{ + "date": "2010-03-01", + "unemployment rate": 8.3, + "county": "Suffolk County" +}, +{ + "date": "2010-04-01", + "unemployment rate": 7.7, + "county": "Suffolk County" +}, +{ + "date": "2010-05-01", + "unemployment rate": 7.5, + "county": "Suffolk County" +}, +{ + "date": "2010-06-01", + "unemployment rate": 7.6, + "county": "Suffolk County" +}, +{ + "date": "2010-07-01", + "unemployment rate": 8, + "county": "Suffolk County" +}, +{ + "date": "2010-08-01", + "unemployment rate": 7.9, + "county": "Suffolk County" +}, +{ + "date": "2010-09-01", + "unemployment rate": 7.6, + "county": "Suffolk County" +}, +{ + "date": "2010-10-01", + "unemployment rate": 7.5, + "county": "Suffolk County" +}, +{ + "date": "2010-11-01", + "unemployment rate": 7.7, + "county": "Suffolk County" +}, +{ + "date": "2010-12-01", + "unemployment rate": 7.7, + "county": "Suffolk County" +}, +{ + "date": "2011-01-01", + "unemployment rate": 8.4, + "county": "Suffolk County" +}, +{ + "date": "2011-02-01", + "unemployment rate": 8.5, + "county": "Suffolk County" +}, +{ + "date": "2011-03-01", + "unemployment rate": 7.8, + "county": "Suffolk County" +}, +{ + "date": "2011-04-01", + "unemployment rate": 7.2, + "county": "Suffolk County" +}, +{ + "date": "2011-05-01", + "unemployment rate": 7.2, + "county": "Suffolk County" +}, +{ + "date": "2011-06-01", + "unemployment rate": 7.4, + "county": "Suffolk County" +}, +{ + "date": "2011-07-01", + "unemployment rate": 7.8, + "county": "Suffolk County" +}, +{ + "date": "2011-08-01", + "unemployment rate": 7.7, + "county": "Suffolk County" +}, +{ + "date": "2011-09-01", + "unemployment rate": 7.5, + "county": "Suffolk County" +}, +{ + "date": "2011-10-01", + "unemployment rate": 7.4, + "county": "Suffolk County" +}, +{ + "date": "2011-11-01", + "unemployment rate": 7.3, + "county": "Suffolk County" +}, +{ + "date": "2011-12-01", + "unemployment rate": 7.7, + "county": "Suffolk County" +}, +{ + "date": "2012-01-01", + "unemployment rate": 8.4, + "county": "Suffolk County" +}, +{ + "date": "2012-02-01", + "unemployment rate": 8.7, + "county": "Suffolk County" +}, +{ + "date": "2012-03-01", + "unemployment rate": 8.1, + "county": "Suffolk County" +}, +{ + "date": "2012-04-01", + "unemployment rate": 7.6, + "county": "Suffolk County" +}, +{ + "date": "2012-05-01", + "unemployment rate": 7.7, + "county": "Suffolk County" +}, +{ + "date": "2012-06-01", + "unemployment rate": 7.9, + "county": "Suffolk County" +}, +{ + "date": "2012-07-01", + "unemployment rate": 8.4, + "county": "Suffolk County" +}, +{ + "date": "2012-08-01", + "unemployment rate": 8.2, + "county": "Suffolk County" +}, +{ + "date": "2012-09-01", + "unemployment rate": 7.5, + "county": "Suffolk County" +}, +{ + "date": "2012-10-01", + "unemployment rate": 7.4, + "county": "Suffolk County" +}, +{ + "date": "2012-11-01", + "unemployment rate": 7.3, + "county": "Suffolk County" +}, +{ + "date": "2012-12-01", + "unemployment rate": 7.4, + "county": "Suffolk County" +}, +{ + "date": "2013-01-01", + "unemployment rate": 8.2, + "county": "Suffolk County" +}, +{ + "date": "2013-02-01", + "unemployment rate": 8.1, + "county": "Suffolk County" +}, +{ + "date": "2013-03-01", + "unemployment rate": 7.2, + "county": "Suffolk County" +}, +{ + "date": "2013-04-01", + "unemployment rate": 6.5, + "county": "Suffolk County" +}, +{ + "date": "2013-05-01", + "unemployment rate": 6.6, + "county": "Suffolk County" +}, +{ + "date": "2013-06-01", + "unemployment rate": 6.7, + "county": "Suffolk County" +}, +{ + "date": "2013-07-01", + "unemployment rate": 6.9, + "county": "Suffolk County" +}, +{ + "date": "2013-08-01", + "unemployment rate": 6.8, + "county": "Suffolk County" +}, +{ + "date": "2013-09-01", + "unemployment rate": 6.3, + "county": "Suffolk County" +}, +{ + "date": "2013-10-01", + "unemployment rate": 6.3, + "county": "Suffolk County" +}, +{ + "date": "2013-11-01", + "unemployment rate": 5.8, + "county": "Suffolk County" +}, +{ + "date": "2013-12-01", + "unemployment rate": 5.7, + "county": "Suffolk County" +}, +{ + "date": "2014-01-01", + "unemployment rate": 6.4, + "county": "Suffolk County" +}, +{ + "date": "2014-02-01", + "unemployment rate": 6.7, + "county": "Suffolk County" +}, +{ + "date": "2014-03-01", + "unemployment rate": 6.1, + "county": "Suffolk County" +}, +{ + "date": "2014-04-01", + "unemployment rate": 5, + "county": "Suffolk County" +}, +{ + "date": "2014-05-01", + "unemployment rate": 5.1, + "county": "Suffolk County" +}, +{ + "date": "2014-06-01", + "unemployment rate": 5.2, + "county": "Suffolk County" +}, +{ + "date": "2014-07-01", + "unemployment rate": 5.6, + "county": "Suffolk County" +}, +{ + "date": "2014-08-01", + "unemployment rate": 5.6, + "county": "Suffolk County" +}, +{ + "date": "2014-09-01", + "unemployment rate": 5, + "county": "Suffolk County" +}, +{ + "date": "2014-10-01", + "unemployment rate": 4.8, + "county": "Suffolk County" +}, +{ + "date": "2014-11-01", + "unemployment rate": 4.8, + "county": "Suffolk County" +}, +{ + "date": "2014-12-01", + "unemployment rate": 4.8, + "county": "Suffolk County" +}, +{ + "date": "2015-01-01", + "unemployment rate": 5.6, + "county": "Suffolk County" +}, +{ + "date": "2015-02-01", + "unemployment rate": 5.7, + "county": "Suffolk County" +}, +{ + "date": "2015-03-01", + "unemployment rate": 5.2, + "county": "Suffolk County" +}, +{ + "date": "2015-04-01", + "unemployment rate": 4.7, + "county": "Suffolk County" +}, +{ + "date": "2015-05-01", + "unemployment rate": 4.7, + "county": "Suffolk County" +}, +{ + "date": "2015-06-01", + "unemployment rate": 4.7, + "county": "Suffolk County" +}, +{ + "date": "2015-07-01", + "unemployment rate": 5, + "county": "Suffolk County" +}, +{ + "date": "2015-08-01", + "unemployment rate": 4.7, + "county": "Suffolk County" +}, +{ + "date": "2015-09-01", + "unemployment rate": 4.3, + "county": "Suffolk County" +}, +{ + "date": "2015-10-01", + "unemployment rate": 4.2, + "county": "Suffolk County" +}, +{ + "date": "2015-11-01", + "unemployment rate": 4.1, + "county": "Suffolk County" +}, +{ + "date": "2015-12-01", + "unemployment rate": 4.2, + "county": "Suffolk County" +}, +{ + "date": "2016-01-01", + "unemployment rate": 4.7, + "county": "Suffolk County" +}, +{ + "date": "2016-02-01", + "unemployment rate": 5, + "county": "Suffolk County" +}, +{ + "date": "2016-03-01", + "unemployment rate": 4.6, + "county": "Suffolk County" +}, +{ + "date": "2016-04-01", + "unemployment rate": 4.2, + "county": "Suffolk County" +}, +{ + "date": "2016-05-01", + "unemployment rate": 3.9, + "county": "Suffolk County" +}, +{ + "date": "2016-06-01", + "unemployment rate": 4.2, + "county": "Suffolk County" +}, +{ + "date": "2016-07-01", + "unemployment rate": 4.6, + "county": "Suffolk County" +}, +{ + "date": "2016-08-01", + "unemployment rate": 4.6, + "county": "Suffolk County" +}, +{ + "date": "2016-09-01", + "unemployment rate": 4.4, + "county": "Suffolk County" +}, +{ + "date": "2016-10-01", + "unemployment rate": 4.3, + "county": "Suffolk County" +}, +{ + "date": "2016-11-01", + "unemployment rate": 4.2, + "county": "Suffolk County" +}, +{ + "date": "2016-12-01", + "unemployment rate": 4.3, + "county": "Suffolk County" +}, +{ + "date": "2017-01-01", + "unemployment rate": 4.9, + "county": "Suffolk County" +}, +{ + "date": "2017-02-01", + "unemployment rate": 5.2, + "county": "Suffolk County" +}, +{ + "date": "2017-03-01", + "unemployment rate": 4.5, + "county": "Suffolk County" +}, +{ + "date": "2017-04-01", + "unemployment rate": 4.2, + "county": "Suffolk County" +}, +{ + "date": "2017-05-01", + "unemployment rate": 4.1, + "county": "Suffolk County" +}, +{ + "date": "2017-06-01", + "unemployment rate": 4.2, + "county": "Suffolk County" +}, +{ + "date": "2017-07-01", + "unemployment rate": 4.6, + "county": "Suffolk County" +}, +{ + "date": "2017-08-01", + "unemployment rate": 4.8, + "county": "Suffolk County" +}, +{ + "date": "2017-09-01", + "unemployment rate": 4.2, + "county": "Suffolk County" +}, +{ + "date": "2017-10-01", + "unemployment rate": 4.2, + "county": "Suffolk County" +}, +{ + "date": "2017-11-01", + "unemployment rate": 4.2, + "county": "Suffolk County" +}, +{ + "date": "2017-12-01", + "unemployment rate": 4.3, + "county": "Suffolk County" +}, +{ + "date": "2018-01-01", + "unemployment rate": 5, + "county": "Suffolk County" +}, +{ + "date": "2018-02-01", + "unemployment rate": 5.2, + "county": "Suffolk County" +}, +{ + "date": "2018-03-01", + "unemployment rate": 4.4, + "county": "Suffolk County" +}, +{ + "date": "2018-04-01", + "unemployment rate": 3.8, + "county": "Suffolk County" +}, +{ + "date": "2018-05-01", + "unemployment rate": 3.4, + "county": "Suffolk County" +}, +{ + "date": "2018-06-01", + "unemployment rate": 3.7, + "county": "Suffolk County" +}, +{ + "date": "2018-07-01", + "unemployment rate": 3.9, + "county": "Suffolk County" +}, +{ + "date": "2018-08-01", + "unemployment rate": 3.9, + "county": "Suffolk County" +}, +{ + "date": "2018-09-01", + "unemployment rate": 3.2, + "county": "Suffolk County" +}, +{ + "date": "2018-10-01", + "unemployment rate": 3.2, + "county": "Suffolk County" +}, +{ + "date": "2018-11-01", + "unemployment rate": 3.1, + "county": "Suffolk County" +}, +{ + "date": "2018-12-01", + "unemployment rate": 3.4, + "county": "Suffolk County" +}, +{ + "date": "2019-01-01", + "unemployment rate": 4.2, + "county": "Suffolk County" +}, +{ + "date": "2019-02-01", + "unemployment rate": 4.2, + "county": "Suffolk County" +}, +{ + "date": "2019-03-01", + "unemployment rate": 3.7, + "county": "Suffolk County" +}, +{ + "date": "2019-04-01", + "unemployment rate": 3.1, + "county": "Suffolk County" +}, +{ + "date": "2019-05-01", + "unemployment rate": 3.1, + "county": "Suffolk County" +}, +{ + "date": "2019-06-01", + "unemployment rate": 3.3, + "county": "Suffolk County" +}, +{ + "date": "2019-07-01", + "unemployment rate": 3.8, + "county": "Suffolk County" +}, +{ + "date": "2019-08-01", + "unemployment rate": 3.9, + "county": "Suffolk County" +}, +{ + "date": "2019-09-01", + "unemployment rate": 3.2, + "county": "Suffolk County" +}, +{ + "date": "2019-10-01", + "unemployment rate": 3.3, + "county": "Suffolk County" +}, +{ + "date": "2019-11-01", + "unemployment rate": 3.2, + "county": "Suffolk County" +}, +{ + "date": "2019-12-01", + "unemployment rate": 3.5, + "county": "Suffolk County" +}, +{ + "date": "2020-01-01", + "unemployment rate": 4.1, + "county": "Suffolk County" +}, +{ + "date": "2020-02-01", + "unemployment rate": 4.1, + "county": "Suffolk County" +}, +{ + "date": "2020-03-01", + "unemployment rate": 4.3, + "county": "Suffolk County" +}, +{ + "date": "2020-04-01", + "unemployment rate": 17.9, + "county": "Suffolk County" +}, +{ + "date": "2020-05-01", + "unemployment rate": 13.5, + "county": "Suffolk County" +}, +{ + "date": "2020-06-01", + "unemployment rate": 12.9, + "county": "Suffolk County" +}, +{ + "date": "2020-07-01", + "unemployment rate": 12.4, + "county": "Suffolk County" +}, +{ + "date": "2020-08-01", + "unemployment rate": 9.5, + "county": "Suffolk County" +}, +{ + "date": "2020-09-01", + "unemployment rate": 6.4, + "county": "Suffolk County" +}, +{ + "date": "2020-10-01", + "unemployment rate": 5.8, + "county": "Suffolk County" +}, +{ + "date": "2020-11-01", + "unemployment rate": 5.7, + "county": "Suffolk County" +}, +{ + "date": "2020-12-01", + "unemployment rate": 5.8, + "county": "Suffolk County" +}, +{ + "date": "2021-01-01", + "unemployment rate": 6.4, + "county": "Suffolk County" +}, +{ + "date": "2021-02-01", + "unemployment rate": 6.9, + "county": "Suffolk County" +}, +{ + "date": "2021-03-01", + "unemployment rate": 6.1, + "county": "Suffolk County" +}, +{ + "date": "2021-04-01", + "unemployment rate": 5.3, + "county": "Suffolk County" +}, +{ + "date": "2021-05-01", + "unemployment rate": 4.7, + "county": "Suffolk County" +}, +{ + "date": "2021-06-01", + "unemployment rate": 5, + "county": "Suffolk County" +}, +{ + "date": "2021-07-01", + "unemployment rate": 5.2, + "county": "Suffolk County" +}, +{ + "date": "2021-08-01", + "unemployment rate": 5.1, + "county": "Suffolk County" +}, +{ + "date": "2021-09-01", + "unemployment rate": 4.2, + "county": "Suffolk County" +}, +{ + "date": "2021-10-01", + "unemployment rate": 4, + "county": "Suffolk County" +}, +{ + "date": "2021-11-01", + "unemployment rate": 3.5, + "county": "Suffolk County" +}, +{ + "date": "1990-01-01", + "unemployment rate": 4.7, + "county": "Orange County" +}, +{ + "date": "1990-02-01", + "unemployment rate": 4.7, + "county": "Orange County" +}, +{ + "date": "1990-03-01", + "unemployment rate": 4.3, + "county": "Orange County" +}, +{ + "date": "1990-04-01", + "unemployment rate": 4.1, + "county": "Orange County" +}, +{ + "date": "1990-05-01", + "unemployment rate": 4, + "county": "Orange County" +}, +{ + "date": "1990-06-01", + "unemployment rate": 4, + "county": "Orange County" +}, +{ + "date": "1990-07-01", + "unemployment rate": 4.1, + "county": "Orange County" +}, +{ + "date": "1990-08-01", + "unemployment rate": 4.2, + "county": "Orange County" +}, +{ + "date": "1990-09-01", + "unemployment rate": 4.2, + "county": "Orange County" +}, +{ + "date": "1990-10-01", + "unemployment rate": 4.2, + "county": "Orange County" +}, +{ + "date": "1990-11-01", + "unemployment rate": 4.8, + "county": "Orange County" +}, +{ + "date": "1990-12-01", + "unemployment rate": 5, + "county": "Orange County" +}, +{ + "date": "1991-01-01", + "unemployment rate": 6.3, + "county": "Orange County" +}, +{ + "date": "1991-02-01", + "unemployment rate": 6.6, + "county": "Orange County" +}, +{ + "date": "1991-03-01", + "unemployment rate": 6.5, + "county": "Orange County" +}, +{ + "date": "1991-04-01", + "unemployment rate": 5.9, + "county": "Orange County" +}, +{ + "date": "1991-05-01", + "unemployment rate": 6.4, + "county": "Orange County" +}, +{ + "date": "1991-06-01", + "unemployment rate": 6.2, + "county": "Orange County" +}, +{ + "date": "1991-07-01", + "unemployment rate": 6.2, + "county": "Orange County" +}, +{ + "date": "1991-08-01", + "unemployment rate": 6.1, + "county": "Orange County" +}, +{ + "date": "1991-09-01", + "unemployment rate": 5.8, + "county": "Orange County" +}, +{ + "date": "1991-10-01", + "unemployment rate": 5.6, + "county": "Orange County" +}, +{ + "date": "1991-11-01", + "unemployment rate": 5.4, + "county": "Orange County" +}, +{ + "date": "1991-12-01", + "unemployment rate": 5.7, + "county": "Orange County" +}, +{ + "date": "1992-01-01", + "unemployment rate": 7.1, + "county": "Orange County" +}, +{ + "date": "1992-02-01", + "unemployment rate": 7.6, + "county": "Orange County" +}, +{ + "date": "1992-03-01", + "unemployment rate": 6.9, + "county": "Orange County" +}, +{ + "date": "1992-04-01", + "unemployment rate": 6.1, + "county": "Orange County" +}, +{ + "date": "1992-05-01", + "unemployment rate": 6.4, + "county": "Orange County" +}, +{ + "date": "1992-06-01", + "unemployment rate": 6.8, + "county": "Orange County" +}, +{ + "date": "1992-07-01", + "unemployment rate": 6.6, + "county": "Orange County" +}, +{ + "date": "1992-08-01", + "unemployment rate": 6.5, + "county": "Orange County" +}, +{ + "date": "1992-09-01", + "unemployment rate": 6.6, + "county": "Orange County" +}, +{ + "date": "1992-10-01", + "unemployment rate": 6, + "county": "Orange County" +}, +{ + "date": "1992-11-01", + "unemployment rate": 6.1, + "county": "Orange County" +}, +{ + "date": "1992-12-01", + "unemployment rate": 6.1, + "county": "Orange County" +}, +{ + "date": "1993-01-01", + "unemployment rate": 6.8, + "county": "Orange County" +}, +{ + "date": "1993-02-01", + "unemployment rate": 6.6, + "county": "Orange County" +}, +{ + "date": "1993-03-01", + "unemployment rate": 6.1, + "county": "Orange County" +}, +{ + "date": "1993-04-01", + "unemployment rate": 5.7, + "county": "Orange County" +}, +{ + "date": "1993-05-01", + "unemployment rate": 6.1, + "county": "Orange County" +}, +{ + "date": "1993-06-01", + "unemployment rate": 6.6, + "county": "Orange County" +}, +{ + "date": "1993-07-01", + "unemployment rate": 6.1, + "county": "Orange County" +}, +{ + "date": "1993-08-01", + "unemployment rate": 6, + "county": "Orange County" +}, +{ + "date": "1993-09-01", + "unemployment rate": 5.9, + "county": "Orange County" +}, +{ + "date": "1993-10-01", + "unemployment rate": 5.7, + "county": "Orange County" +}, +{ + "date": "1993-11-01", + "unemployment rate": 5.4, + "county": "Orange County" +}, +{ + "date": "1993-12-01", + "unemployment rate": 5.5, + "county": "Orange County" +}, +{ + "date": "1994-01-01", + "unemployment rate": 6.4, + "county": "Orange County" +}, +{ + "date": "1994-02-01", + "unemployment rate": 6.5, + "county": "Orange County" +}, +{ + "date": "1994-03-01", + "unemployment rate": 6.4, + "county": "Orange County" +}, +{ + "date": "1994-04-01", + "unemployment rate": 5.7, + "county": "Orange County" +}, +{ + "date": "1994-05-01", + "unemployment rate": 5.4, + "county": "Orange County" +}, +{ + "date": "1994-06-01", + "unemployment rate": 5.6, + "county": "Orange County" +}, +{ + "date": "1994-07-01", + "unemployment rate": 5.5, + "county": "Orange County" +}, +{ + "date": "1994-08-01", + "unemployment rate": 5.2, + "county": "Orange County" +}, +{ + "date": "1994-09-01", + "unemployment rate": 4.9, + "county": "Orange County" +}, +{ + "date": "1994-10-01", + "unemployment rate": 4.5, + "county": "Orange County" +}, +{ + "date": "1994-11-01", + "unemployment rate": 4.3, + "county": "Orange County" +}, +{ + "date": "1994-12-01", + "unemployment rate": 4.3, + "county": "Orange County" +}, +{ + "date": "1995-01-01", + "unemployment rate": 5.6, + "county": "Orange County" +}, +{ + "date": "1995-02-01", + "unemployment rate": 5.3, + "county": "Orange County" +}, +{ + "date": "1995-03-01", + "unemployment rate": 5.1, + "county": "Orange County" +}, +{ + "date": "1995-04-01", + "unemployment rate": 4.9, + "county": "Orange County" +}, +{ + "date": "1995-05-01", + "unemployment rate": 4.8, + "county": "Orange County" +}, +{ + "date": "1995-06-01", + "unemployment rate": 5, + "county": "Orange County" +}, +{ + "date": "1995-07-01", + "unemployment rate": 5.1, + "county": "Orange County" +}, +{ + "date": "1995-08-01", + "unemployment rate": 5, + "county": "Orange County" +}, +{ + "date": "1995-09-01", + "unemployment rate": 5, + "county": "Orange County" +}, +{ + "date": "1995-10-01", + "unemployment rate": 4.5, + "county": "Orange County" +}, +{ + "date": "1995-11-01", + "unemployment rate": 4.2, + "county": "Orange County" +}, +{ + "date": "1995-12-01", + "unemployment rate": 4.3, + "county": "Orange County" +}, +{ + "date": "1996-01-01", + "unemployment rate": 5.3, + "county": "Orange County" +}, +{ + "date": "1996-02-01", + "unemployment rate": 5, + "county": "Orange County" +}, +{ + "date": "1996-03-01", + "unemployment rate": 4.8, + "county": "Orange County" +}, +{ + "date": "1996-04-01", + "unemployment rate": 4.4, + "county": "Orange County" +}, +{ + "date": "1996-05-01", + "unemployment rate": 4.4, + "county": "Orange County" +}, +{ + "date": "1996-06-01", + "unemployment rate": 4.3, + "county": "Orange County" +}, +{ + "date": "1996-07-01", + "unemployment rate": 4.5, + "county": "Orange County" +}, +{ + "date": "1996-08-01", + "unemployment rate": 3.9, + "county": "Orange County" +}, +{ + "date": "1996-09-01", + "unemployment rate": 3.9, + "county": "Orange County" +}, +{ + "date": "1996-10-01", + "unemployment rate": 3.6, + "county": "Orange County" +}, +{ + "date": "1996-11-01", + "unemployment rate": 3.5, + "county": "Orange County" +}, +{ + "date": "1996-12-01", + "unemployment rate": 3.6, + "county": "Orange County" +}, +{ + "date": "1997-01-01", + "unemployment rate": 4.6, + "county": "Orange County" +}, +{ + "date": "1997-02-01", + "unemployment rate": 4.7, + "county": "Orange County" +}, +{ + "date": "1997-03-01", + "unemployment rate": 4.5, + "county": "Orange County" +}, +{ + "date": "1997-04-01", + "unemployment rate": 4, + "county": "Orange County" +}, +{ + "date": "1997-05-01", + "unemployment rate": 4.2, + "county": "Orange County" +}, +{ + "date": "1997-06-01", + "unemployment rate": 4.4, + "county": "Orange County" +}, +{ + "date": "1997-07-01", + "unemployment rate": 4.5, + "county": "Orange County" +}, +{ + "date": "1997-08-01", + "unemployment rate": 4.2, + "county": "Orange County" +}, +{ + "date": "1997-09-01", + "unemployment rate": 4.2, + "county": "Orange County" +}, +{ + "date": "1997-10-01", + "unemployment rate": 3.7, + "county": "Orange County" +}, +{ + "date": "1997-11-01", + "unemployment rate": 3.4, + "county": "Orange County" +}, +{ + "date": "1997-12-01", + "unemployment rate": 3.4, + "county": "Orange County" +}, +{ + "date": "1998-01-01", + "unemployment rate": 4.1, + "county": "Orange County" +}, +{ + "date": "1998-02-01", + "unemployment rate": 4.2, + "county": "Orange County" +}, +{ + "date": "1998-03-01", + "unemployment rate": 3.9, + "county": "Orange County" +}, +{ + "date": "1998-04-01", + "unemployment rate": 3.4, + "county": "Orange County" +}, +{ + "date": "1998-05-01", + "unemployment rate": 3.4, + "county": "Orange County" +}, +{ + "date": "1998-06-01", + "unemployment rate": 3.6, + "county": "Orange County" +}, +{ + "date": "1998-07-01", + "unemployment rate": 3.4, + "county": "Orange County" +}, +{ + "date": "1998-08-01", + "unemployment rate": 3.3, + "county": "Orange County" +}, +{ + "date": "1998-09-01", + "unemployment rate": 3.3, + "county": "Orange County" +}, +{ + "date": "1998-10-01", + "unemployment rate": 3, + "county": "Orange County" +}, +{ + "date": "1998-11-01", + "unemployment rate": 2.9, + "county": "Orange County" +}, +{ + "date": "1998-12-01", + "unemployment rate": 2.8, + "county": "Orange County" +}, +{ + "date": "1999-01-01", + "unemployment rate": 3.9, + "county": "Orange County" +}, +{ + "date": "1999-02-01", + "unemployment rate": 4.2, + "county": "Orange County" +}, +{ + "date": "1999-03-01", + "unemployment rate": 3.8, + "county": "Orange County" +}, +{ + "date": "1999-04-01", + "unemployment rate": 3.6, + "county": "Orange County" +}, +{ + "date": "1999-05-01", + "unemployment rate": 3.6, + "county": "Orange County" +}, +{ + "date": "1999-06-01", + "unemployment rate": 4, + "county": "Orange County" +}, +{ + "date": "1999-07-01", + "unemployment rate": 4.1, + "county": "Orange County" +}, +{ + "date": "1999-08-01", + "unemployment rate": 3.6, + "county": "Orange County" +}, +{ + "date": "1999-09-01", + "unemployment rate": 3.7, + "county": "Orange County" +}, +{ + "date": "1999-10-01", + "unemployment rate": 3.2, + "county": "Orange County" +}, +{ + "date": "1999-11-01", + "unemployment rate": 3, + "county": "Orange County" +}, +{ + "date": "1999-12-01", + "unemployment rate": 2.8, + "county": "Orange County" +}, +{ + "date": "2000-01-01", + "unemployment rate": 3.8, + "county": "Orange County" +}, +{ + "date": "2000-02-01", + "unemployment rate": 4, + "county": "Orange County" +}, +{ + "date": "2000-03-01", + "unemployment rate": 3.6, + "county": "Orange County" +}, +{ + "date": "2000-04-01", + "unemployment rate": 3.1, + "county": "Orange County" +}, +{ + "date": "2000-05-01", + "unemployment rate": 3.2, + "county": "Orange County" +}, +{ + "date": "2000-06-01", + "unemployment rate": 3.2, + "county": "Orange County" +}, +{ + "date": "2000-07-01", + "unemployment rate": 3.4, + "county": "Orange County" +}, +{ + "date": "2000-08-01", + "unemployment rate": 3.3, + "county": "Orange County" +}, +{ + "date": "2000-09-01", + "unemployment rate": 3.4, + "county": "Orange County" +}, +{ + "date": "2000-10-01", + "unemployment rate": 3, + "county": "Orange County" +}, +{ + "date": "2000-11-01", + "unemployment rate": 3.1, + "county": "Orange County" +}, +{ + "date": "2000-12-01", + "unemployment rate": 3, + "county": "Orange County" +}, +{ + "date": "2001-01-01", + "unemployment rate": 3.7, + "county": "Orange County" +}, +{ + "date": "2001-02-01", + "unemployment rate": 3.7, + "county": "Orange County" +}, +{ + "date": "2001-03-01", + "unemployment rate": 3.4, + "county": "Orange County" +}, +{ + "date": "2001-04-01", + "unemployment rate": 3.2, + "county": "Orange County" +}, +{ + "date": "2001-05-01", + "unemployment rate": 3.1, + "county": "Orange County" +}, +{ + "date": "2001-06-01", + "unemployment rate": 3.5, + "county": "Orange County" +}, +{ + "date": "2001-07-01", + "unemployment rate": 3.6, + "county": "Orange County" +}, +{ + "date": "2001-08-01", + "unemployment rate": 3.7, + "county": "Orange County" +}, +{ + "date": "2001-09-01", + "unemployment rate": 3.8, + "county": "Orange County" +}, +{ + "date": "2001-10-01", + "unemployment rate": 3.9, + "county": "Orange County" +}, +{ + "date": "2001-11-01", + "unemployment rate": 4.1, + "county": "Orange County" +}, +{ + "date": "2001-12-01", + "unemployment rate": 4.3, + "county": "Orange County" +}, +{ + "date": "2002-01-01", + "unemployment rate": 5.1, + "county": "Orange County" +}, +{ + "date": "2002-02-01", + "unemployment rate": 5.2, + "county": "Orange County" +}, +{ + "date": "2002-03-01", + "unemployment rate": 4.8, + "county": "Orange County" +}, +{ + "date": "2002-04-01", + "unemployment rate": 4.4, + "county": "Orange County" +}, +{ + "date": "2002-05-01", + "unemployment rate": 4.3, + "county": "Orange County" +}, +{ + "date": "2002-06-01", + "unemployment rate": 4.4, + "county": "Orange County" +}, +{ + "date": "2002-07-01", + "unemployment rate": 4.4, + "county": "Orange County" +}, +{ + "date": "2002-08-01", + "unemployment rate": 4.1, + "county": "Orange County" +}, +{ + "date": "2002-09-01", + "unemployment rate": 4, + "county": "Orange County" +}, +{ + "date": "2002-10-01", + "unemployment rate": 3.9, + "county": "Orange County" +}, +{ + "date": "2002-11-01", + "unemployment rate": 4, + "county": "Orange County" +}, +{ + "date": "2002-12-01", + "unemployment rate": 4.1, + "county": "Orange County" +}, +{ + "date": "2003-01-01", + "unemployment rate": 4.8, + "county": "Orange County" +}, +{ + "date": "2003-02-01", + "unemployment rate": 4.9, + "county": "Orange County" +}, +{ + "date": "2003-03-01", + "unemployment rate": 4.6, + "county": "Orange County" +}, +{ + "date": "2003-04-01", + "unemployment rate": 4.5, + "county": "Orange County" +}, +{ + "date": "2003-05-01", + "unemployment rate": 4.5, + "county": "Orange County" +}, +{ + "date": "2003-06-01", + "unemployment rate": 5.1, + "county": "Orange County" +}, +{ + "date": "2003-07-01", + "unemployment rate": 5, + "county": "Orange County" +}, +{ + "date": "2003-08-01", + "unemployment rate": 4.9, + "county": "Orange County" +}, +{ + "date": "2003-09-01", + "unemployment rate": 4.8, + "county": "Orange County" +}, +{ + "date": "2003-10-01", + "unemployment rate": 4.6, + "county": "Orange County" +}, +{ + "date": "2003-11-01", + "unemployment rate": 4.8, + "county": "Orange County" +}, +{ + "date": "2003-12-01", + "unemployment rate": 4.7, + "county": "Orange County" +}, +{ + "date": "2004-01-01", + "unemployment rate": 5.4, + "county": "Orange County" +}, +{ + "date": "2004-02-01", + "unemployment rate": 5.4, + "county": "Orange County" +}, +{ + "date": "2004-03-01", + "unemployment rate": 5.5, + "county": "Orange County" +}, +{ + "date": "2004-04-01", + "unemployment rate": 4.8, + "county": "Orange County" +}, +{ + "date": "2004-05-01", + "unemployment rate": 4.6, + "county": "Orange County" +}, +{ + "date": "2004-06-01", + "unemployment rate": 4.9, + "county": "Orange County" +}, +{ + "date": "2004-07-01", + "unemployment rate": 4.7, + "county": "Orange County" +}, +{ + "date": "2004-08-01", + "unemployment rate": 4.5, + "county": "Orange County" +}, +{ + "date": "2004-09-01", + "unemployment rate": 4.4, + "county": "Orange County" +}, +{ + "date": "2004-10-01", + "unemployment rate": 4.3, + "county": "Orange County" +}, +{ + "date": "2004-11-01", + "unemployment rate": 4.3, + "county": "Orange County" +}, +{ + "date": "2004-12-01", + "unemployment rate": 4.3, + "county": "Orange County" +}, +{ + "date": "2005-01-01", + "unemployment rate": 4.8, + "county": "Orange County" +}, +{ + "date": "2005-02-01", + "unemployment rate": 4.8, + "county": "Orange County" +}, +{ + "date": "2005-03-01", + "unemployment rate": 4.3, + "county": "Orange County" +}, +{ + "date": "2005-04-01", + "unemployment rate": 4, + "county": "Orange County" +}, +{ + "date": "2005-05-01", + "unemployment rate": 4.1, + "county": "Orange County" +}, +{ + "date": "2005-06-01", + "unemployment rate": 4.2, + "county": "Orange County" +}, +{ + "date": "2005-07-01", + "unemployment rate": 4.3, + "county": "Orange County" +}, +{ + "date": "2005-08-01", + "unemployment rate": 3.9, + "county": "Orange County" +}, +{ + "date": "2005-09-01", + "unemployment rate": 4.2, + "county": "Orange County" +}, +{ + "date": "2005-10-01", + "unemployment rate": 4, + "county": "Orange County" +}, +{ + "date": "2005-11-01", + "unemployment rate": 4.3, + "county": "Orange County" +}, +{ + "date": "2005-12-01", + "unemployment rate": 4.1, + "county": "Orange County" +}, +{ + "date": "2006-01-01", + "unemployment rate": 4.5, + "county": "Orange County" +}, +{ + "date": "2006-02-01", + "unemployment rate": 4.9, + "county": "Orange County" +}, +{ + "date": "2006-03-01", + "unemployment rate": 4.5, + "county": "Orange County" +}, +{ + "date": "2006-04-01", + "unemployment rate": 4.2, + "county": "Orange County" +}, +{ + "date": "2006-05-01", + "unemployment rate": 4.1, + "county": "Orange County" +}, +{ + "date": "2006-06-01", + "unemployment rate": 4.2, + "county": "Orange County" +}, +{ + "date": "2006-07-01", + "unemployment rate": 4.5, + "county": "Orange County" +}, +{ + "date": "2006-08-01", + "unemployment rate": 4.2, + "county": "Orange County" +}, +{ + "date": "2006-09-01", + "unemployment rate": 4.1, + "county": "Orange County" +}, +{ + "date": "2006-10-01", + "unemployment rate": 3.7, + "county": "Orange County" +}, +{ + "date": "2006-11-01", + "unemployment rate": 3.9, + "county": "Orange County" +}, +{ + "date": "2006-12-01", + "unemployment rate": 3.7, + "county": "Orange County" +}, +{ + "date": "2007-01-01", + "unemployment rate": 4.7, + "county": "Orange County" +}, +{ + "date": "2007-02-01", + "unemployment rate": 4.6, + "county": "Orange County" +}, +{ + "date": "2007-03-01", + "unemployment rate": 4.1, + "county": "Orange County" +}, +{ + "date": "2007-04-01", + "unemployment rate": 3.8, + "county": "Orange County" +}, +{ + "date": "2007-05-01", + "unemployment rate": 3.9, + "county": "Orange County" +}, +{ + "date": "2007-06-01", + "unemployment rate": 4.1, + "county": "Orange County" +}, +{ + "date": "2007-07-01", + "unemployment rate": 4.4, + "county": "Orange County" +}, +{ + "date": "2007-08-01", + "unemployment rate": 4.2, + "county": "Orange County" +}, +{ + "date": "2007-09-01", + "unemployment rate": 4.3, + "county": "Orange County" +}, +{ + "date": "2007-10-01", + "unemployment rate": 4.1, + "county": "Orange County" +}, +{ + "date": "2007-11-01", + "unemployment rate": 4.1, + "county": "Orange County" +}, +{ + "date": "2007-12-01", + "unemployment rate": 4.3, + "county": "Orange County" +}, +{ + "date": "2008-01-01", + "unemployment rate": 4.9, + "county": "Orange County" +}, +{ + "date": "2008-02-01", + "unemployment rate": 5.1, + "county": "Orange County" +}, +{ + "date": "2008-03-01", + "unemployment rate": 4.9, + "county": "Orange County" +}, +{ + "date": "2008-04-01", + "unemployment rate": 4.5, + "county": "Orange County" +}, +{ + "date": "2008-05-01", + "unemployment rate": 5.1, + "county": "Orange County" +}, +{ + "date": "2008-06-01", + "unemployment rate": 5.2, + "county": "Orange County" +}, +{ + "date": "2008-07-01", + "unemployment rate": 5.5, + "county": "Orange County" +}, +{ + "date": "2008-08-01", + "unemployment rate": 5.6, + "county": "Orange County" +}, +{ + "date": "2008-09-01", + "unemployment rate": 5.5, + "county": "Orange County" +}, +{ + "date": "2008-10-01", + "unemployment rate": 5.6, + "county": "Orange County" +}, +{ + "date": "2008-11-01", + "unemployment rate": 5.7, + "county": "Orange County" +}, +{ + "date": "2008-12-01", + "unemployment rate": 6.2, + "county": "Orange County" +}, +{ + "date": "2009-01-01", + "unemployment rate": 7.2, + "county": "Orange County" +}, +{ + "date": "2009-02-01", + "unemployment rate": 7.9, + "county": "Orange County" +}, +{ + "date": "2009-03-01", + "unemployment rate": 7.8, + "county": "Orange County" +}, +{ + "date": "2009-04-01", + "unemployment rate": 7.7, + "county": "Orange County" +}, +{ + "date": "2009-05-01", + "unemployment rate": 7.7, + "county": "Orange County" +}, +{ + "date": "2009-06-01", + "unemployment rate": 8.2, + "county": "Orange County" +}, +{ + "date": "2009-07-01", + "unemployment rate": 8.3, + "county": "Orange County" +}, +{ + "date": "2009-08-01", + "unemployment rate": 8.2, + "county": "Orange County" +}, +{ + "date": "2009-09-01", + "unemployment rate": 8.2, + "county": "Orange County" +}, +{ + "date": "2009-10-01", + "unemployment rate": 8.1, + "county": "Orange County" +}, +{ + "date": "2009-11-01", + "unemployment rate": 7.9, + "county": "Orange County" +}, +{ + "date": "2009-12-01", + "unemployment rate": 8.2, + "county": "Orange County" +}, +{ + "date": "2010-01-01", + "unemployment rate": 8.8, + "county": "Orange County" +}, +{ + "date": "2010-02-01", + "unemployment rate": 8.9, + "county": "Orange County" +}, +{ + "date": "2010-03-01", + "unemployment rate": 8.4, + "county": "Orange County" +}, +{ + "date": "2010-04-01", + "unemployment rate": 8.1, + "county": "Orange County" +}, +{ + "date": "2010-05-01", + "unemployment rate": 7.8, + "county": "Orange County" +}, +{ + "date": "2010-06-01", + "unemployment rate": 8, + "county": "Orange County" +}, +{ + "date": "2010-07-01", + "unemployment rate": 8.2, + "county": "Orange County" +}, +{ + "date": "2010-08-01", + "unemployment rate": 8, + "county": "Orange County" +}, +{ + "date": "2010-09-01", + "unemployment rate": 7.9, + "county": "Orange County" +}, +{ + "date": "2010-10-01", + "unemployment rate": 7.7, + "county": "Orange County" +}, +{ + "date": "2010-11-01", + "unemployment rate": 7.9, + "county": "Orange County" +}, +{ + "date": "2010-12-01", + "unemployment rate": 7.8, + "county": "Orange County" +}, +{ + "date": "2011-01-01", + "unemployment rate": 8.4, + "county": "Orange County" +}, +{ + "date": "2011-02-01", + "unemployment rate": 8.4, + "county": "Orange County" +}, +{ + "date": "2011-03-01", + "unemployment rate": 7.8, + "county": "Orange County" +}, +{ + "date": "2011-04-01", + "unemployment rate": 7.4, + "county": "Orange County" +}, +{ + "date": "2011-05-01", + "unemployment rate": 7.5, + "county": "Orange County" +}, +{ + "date": "2011-06-01", + "unemployment rate": 7.8, + "county": "Orange County" +}, +{ + "date": "2011-07-01", + "unemployment rate": 7.9, + "county": "Orange County" +}, +{ + "date": "2011-08-01", + "unemployment rate": 7.8, + "county": "Orange County" +}, +{ + "date": "2011-09-01", + "unemployment rate": 7.8, + "county": "Orange County" +}, +{ + "date": "2011-10-01", + "unemployment rate": 7.5, + "county": "Orange County" +}, +{ + "date": "2011-11-01", + "unemployment rate": 7.3, + "county": "Orange County" +}, +{ + "date": "2011-12-01", + "unemployment rate": 7.6, + "county": "Orange County" +}, +{ + "date": "2012-01-01", + "unemployment rate": 8.3, + "county": "Orange County" +}, +{ + "date": "2012-02-01", + "unemployment rate": 8.7, + "county": "Orange County" +}, +{ + "date": "2012-03-01", + "unemployment rate": 8.2, + "county": "Orange County" +}, +{ + "date": "2012-04-01", + "unemployment rate": 7.9, + "county": "Orange County" +}, +{ + "date": "2012-05-01", + "unemployment rate": 8.1, + "county": "Orange County" +}, +{ + "date": "2012-06-01", + "unemployment rate": 8.3, + "county": "Orange County" +}, +{ + "date": "2012-07-01", + "unemployment rate": 8.5, + "county": "Orange County" +}, +{ + "date": "2012-08-01", + "unemployment rate": 8.3, + "county": "Orange County" +}, +{ + "date": "2012-09-01", + "unemployment rate": 7.8, + "county": "Orange County" +}, +{ + "date": "2012-10-01", + "unemployment rate": 7.6, + "county": "Orange County" +}, +{ + "date": "2012-11-01", + "unemployment rate": 7.2, + "county": "Orange County" +}, +{ + "date": "2012-12-01", + "unemployment rate": 7.5, + "county": "Orange County" +}, +{ + "date": "2013-01-01", + "unemployment rate": 8.2, + "county": "Orange County" +}, +{ + "date": "2013-02-01", + "unemployment rate": 8.1, + "county": "Orange County" +}, +{ + "date": "2013-03-01", + "unemployment rate": 7.4, + "county": "Orange County" +}, +{ + "date": "2013-04-01", + "unemployment rate": 6.9, + "county": "Orange County" +}, +{ + "date": "2013-05-01", + "unemployment rate": 7, + "county": "Orange County" +}, +{ + "date": "2013-06-01", + "unemployment rate": 7.3, + "county": "Orange County" +}, +{ + "date": "2013-07-01", + "unemployment rate": 7.2, + "county": "Orange County" +}, +{ + "date": "2013-08-01", + "unemployment rate": 7, + "county": "Orange County" +}, +{ + "date": "2013-09-01", + "unemployment rate": 6.7, + "county": "Orange County" +}, +{ + "date": "2013-10-01", + "unemployment rate": 6.5, + "county": "Orange County" +}, +{ + "date": "2013-11-01", + "unemployment rate": 6, + "county": "Orange County" +}, +{ + "date": "2013-12-01", + "unemployment rate": 5.8, + "county": "Orange County" +}, +{ + "date": "2014-01-01", + "unemployment rate": 6.4, + "county": "Orange County" +}, +{ + "date": "2014-02-01", + "unemployment rate": 6.7, + "county": "Orange County" +}, +{ + "date": "2014-03-01", + "unemployment rate": 6.1, + "county": "Orange County" +}, +{ + "date": "2014-04-01", + "unemployment rate": 5.2, + "county": "Orange County" +}, +{ + "date": "2014-05-01", + "unemployment rate": 5.4, + "county": "Orange County" +}, +{ + "date": "2014-06-01", + "unemployment rate": 5.5, + "county": "Orange County" +}, +{ + "date": "2014-07-01", + "unemployment rate": 5.7, + "county": "Orange County" +}, +{ + "date": "2014-08-01", + "unemployment rate": 5.6, + "county": "Orange County" +}, +{ + "date": "2014-09-01", + "unemployment rate": 5.2, + "county": "Orange County" +}, +{ + "date": "2014-10-01", + "unemployment rate": 5, + "county": "Orange County" +}, +{ + "date": "2014-11-01", + "unemployment rate": 4.9, + "county": "Orange County" +}, +{ + "date": "2014-12-01", + "unemployment rate": 4.8, + "county": "Orange County" +}, +{ + "date": "2015-01-01", + "unemployment rate": 5.5, + "county": "Orange County" +}, +{ + "date": "2015-02-01", + "unemployment rate": 5.5, + "county": "Orange County" +}, +{ + "date": "2015-03-01", + "unemployment rate": 4.9, + "county": "Orange County" +}, +{ + "date": "2015-04-01", + "unemployment rate": 4.6, + "county": "Orange County" +}, +{ + "date": "2015-05-01", + "unemployment rate": 4.8, + "county": "Orange County" +}, +{ + "date": "2015-06-01", + "unemployment rate": 4.8, + "county": "Orange County" +}, +{ + "date": "2015-07-01", + "unemployment rate": 4.9, + "county": "Orange County" +}, +{ + "date": "2015-08-01", + "unemployment rate": 4.6, + "county": "Orange County" +}, +{ + "date": "2015-09-01", + "unemployment rate": 4.3, + "county": "Orange County" +}, +{ + "date": "2015-10-01", + "unemployment rate": 4.2, + "county": "Orange County" +}, +{ + "date": "2015-11-01", + "unemployment rate": 4.1, + "county": "Orange County" +}, +{ + "date": "2015-12-01", + "unemployment rate": 4.1, + "county": "Orange County" +}, +{ + "date": "2016-01-01", + "unemployment rate": 4.5, + "county": "Orange County" +}, +{ + "date": "2016-02-01", + "unemployment rate": 4.7, + "county": "Orange County" +}, +{ + "date": "2016-03-01", + "unemployment rate": 4.4, + "county": "Orange County" +}, +{ + "date": "2016-04-01", + "unemployment rate": 4.2, + "county": "Orange County" +}, +{ + "date": "2016-05-01", + "unemployment rate": 4, + "county": "Orange County" +}, +{ + "date": "2016-06-01", + "unemployment rate": 4.4, + "county": "Orange County" +}, +{ + "date": "2016-07-01", + "unemployment rate": 4.6, + "county": "Orange County" +}, +{ + "date": "2016-08-01", + "unemployment rate": 4.6, + "county": "Orange County" +}, +{ + "date": "2016-09-01", + "unemployment rate": 4.5, + "county": "Orange County" +}, +{ + "date": "2016-10-01", + "unemployment rate": 4.5, + "county": "Orange County" +}, +{ + "date": "2016-11-01", + "unemployment rate": 4.1, + "county": "Orange County" +}, +{ + "date": "2016-12-01", + "unemployment rate": 4.3, + "county": "Orange County" +}, +{ + "date": "2017-01-01", + "unemployment rate": 4.7, + "county": "Orange County" +}, +{ + "date": "2017-02-01", + "unemployment rate": 5, + "county": "Orange County" +}, +{ + "date": "2017-03-01", + "unemployment rate": 4.4, + "county": "Orange County" +}, +{ + "date": "2017-04-01", + "unemployment rate": 4.4, + "county": "Orange County" +}, +{ + "date": "2017-05-01", + "unemployment rate": 4.3, + "county": "Orange County" +}, +{ + "date": "2017-06-01", + "unemployment rate": 4.6, + "county": "Orange County" +}, +{ + "date": "2017-07-01", + "unemployment rate": 4.7, + "county": "Orange County" +}, +{ + "date": "2017-08-01", + "unemployment rate": 4.8, + "county": "Orange County" +}, +{ + "date": "2017-09-01", + "unemployment rate": 4.5, + "county": "Orange County" +}, +{ + "date": "2017-10-01", + "unemployment rate": 4.3, + "county": "Orange County" +}, +{ + "date": "2017-11-01", + "unemployment rate": 4.3, + "county": "Orange County" +}, +{ + "date": "2017-12-01", + "unemployment rate": 4.3, + "county": "Orange County" +}, +{ + "date": "2018-01-01", + "unemployment rate": 4.7, + "county": "Orange County" +}, +{ + "date": "2018-02-01", + "unemployment rate": 5, + "county": "Orange County" +}, +{ + "date": "2018-03-01", + "unemployment rate": 4.3, + "county": "Orange County" +}, +{ + "date": "2018-04-01", + "unemployment rate": 4, + "county": "Orange County" +}, +{ + "date": "2018-05-01", + "unemployment rate": 3.7, + "county": "Orange County" +}, +{ + "date": "2018-06-01", + "unemployment rate": 4, + "county": "Orange County" +}, +{ + "date": "2018-07-01", + "unemployment rate": 3.9, + "county": "Orange County" +}, +{ + "date": "2018-08-01", + "unemployment rate": 3.8, + "county": "Orange County" +}, +{ + "date": "2018-09-01", + "unemployment rate": 3.4, + "county": "Orange County" +}, +{ + "date": "2018-10-01", + "unemployment rate": 3.3, + "county": "Orange County" +}, +{ + "date": "2018-11-01", + "unemployment rate": 3.1, + "county": "Orange County" +}, +{ + "date": "2018-12-01", + "unemployment rate": 3.5, + "county": "Orange County" +}, +{ + "date": "2019-01-01", + "unemployment rate": 3.9, + "county": "Orange County" +}, +{ + "date": "2019-02-01", + "unemployment rate": 4.1, + "county": "Orange County" +}, +{ + "date": "2019-03-01", + "unemployment rate": 3.7, + "county": "Orange County" +}, +{ + "date": "2019-04-01", + "unemployment rate": 3.3, + "county": "Orange County" +}, +{ + "date": "2019-05-01", + "unemployment rate": 3.3, + "county": "Orange County" +}, +{ + "date": "2019-06-01", + "unemployment rate": 3.5, + "county": "Orange County" +}, +{ + "date": "2019-07-01", + "unemployment rate": 3.9, + "county": "Orange County" +}, +{ + "date": "2019-08-01", + "unemployment rate": 3.9, + "county": "Orange County" +}, +{ + "date": "2019-09-01", + "unemployment rate": 3.5, + "county": "Orange County" +}, +{ + "date": "2019-10-01", + "unemployment rate": 3.5, + "county": "Orange County" +}, +{ + "date": "2019-11-01", + "unemployment rate": 3.3, + "county": "Orange County" +}, +{ + "date": "2019-12-01", + "unemployment rate": 3.6, + "county": "Orange County" +}, +{ + "date": "2020-01-01", + "unemployment rate": 4, + "county": "Orange County" +}, +{ + "date": "2020-02-01", + "unemployment rate": 4.1, + "county": "Orange County" +}, +{ + "date": "2020-03-01", + "unemployment rate": 4.3, + "county": "Orange County" +}, +{ + "date": "2020-04-01", + "unemployment rate": 16.9, + "county": "Orange County" +}, +{ + "date": "2020-05-01", + "unemployment rate": 12.8, + "county": "Orange County" +}, +{ + "date": "2020-06-01", + "unemployment rate": 12.6, + "county": "Orange County" +}, +{ + "date": "2020-07-01", + "unemployment rate": 12.4, + "county": "Orange County" +}, +{ + "date": "2020-08-01", + "unemployment rate": 9.5, + "county": "Orange County" +}, +{ + "date": "2020-09-01", + "unemployment rate": 6.5, + "county": "Orange County" +}, +{ + "date": "2020-10-01", + "unemployment rate": 5.8, + "county": "Orange County" +}, +{ + "date": "2020-11-01", + "unemployment rate": 5.8, + "county": "Orange County" +}, +{ + "date": "2020-12-01", + "unemployment rate": 6, + "county": "Orange County" +}, +{ + "date": "2021-01-01", + "unemployment rate": 6.6, + "county": "Orange County" +}, +{ + "date": "2021-02-01", + "unemployment rate": 6.8, + "county": "Orange County" +}, +{ + "date": "2021-03-01", + "unemployment rate": 6, + "county": "Orange County" +}, +{ + "date": "2021-04-01", + "unemployment rate": 5.2, + "county": "Orange County" +}, +{ + "date": "2021-05-01", + "unemployment rate": 4.8, + "county": "Orange County" +}, +{ + "date": "2021-06-01", + "unemployment rate": 5.1, + "county": "Orange County" +}, +{ + "date": "2021-07-01", + "unemployment rate": 5.2, + "county": "Orange County" +}, +{ + "date": "2021-08-01", + "unemployment rate": 5.1, + "county": "Orange County" +}, +{ + "date": "2021-09-01", + "unemployment rate": 4.3, + "county": "Orange County" +}, +{ + "date": "2021-10-01", + "unemployment rate": 4.1, + "county": "Orange County" +}, +{ + "date": "2021-11-01", + "unemployment rate": 3.7, + "county": "Orange County" +} +] \ No newline at end of file diff --git a/data/skinny_fruit.json b/data/skinny_fruit.json index 29f95a2..0b77b9f 100644 --- a/data/skinny_fruit.json +++ b/data/skinny_fruit.json @@ -1,82 +1,82 @@ [ { "date": "Thu Feb 01 2018 00:00:00 GMT-0500 (Eastern Standard Time)", - "fruit": "apples", + "fruit": "Apples", "value": 10 }, { "date": "Thu Mar 01 2018 00:00:00 GMT-0500 (Eastern Standard Time)", - "fruit": "apples", + "fruit": "Apples", "value": 19 }, { "date": "Thu Mar 08 2018 00:00:00 GMT-0500 (Eastern Standard Time)", - "fruit": "apples", + "fruit": "Apples", "value": 38 }, { "date": "Sun Apr 01 2018 00:00:00 GMT-0400 (Eastern Daylight Time)", - "fruit": "apples", + "fruit": "Apples", "value": 20 }, { "date": "Thu Feb 01 2018 00:00:00 GMT-0500 (Eastern Standard Time)", - "fruit": "oranges", + "fruit": "Oranges", "value": 13 }, { "date": "Thu Mar 01 2018 00:00:00 GMT-0500 (Eastern Standard Time)", - "fruit": "oranges", - "value": null + "fruit": "Oranges", + "value": 20 }, { "date": "Thu Mar 08 2018 00:00:00 GMT-0500 (Eastern Standard Time)", - "fruit": "oranges", + "fruit": "Oranges", "value": 4 }, { "date": "Sun Apr 01 2018 00:00:00 GMT-0400 (Eastern Daylight Time)", - "fruit": "oranges", + "fruit": "Oranges", "value": 10 }, { "date": "Thu Feb 01 2018 00:00:00 GMT-0500 (Eastern Standard Time)", - "fruit": "bananas", + "fruit": "Bananas", "value": 20 }, { "date": "Thu Mar 01 2018 00:00:00 GMT-0500 (Eastern Standard Time)", - "fruit": "bananas", + "fruit": "Bananas", "value":15 }, { "date": "Thu Mar 08 2018 00:00:00 GMT-0500 (Eastern Standard Time)", - "fruit": "bananas", + "fruit": "Bananas", "value": 6 }, { "date": "Sun Apr 01 2018 00:00:00 GMT-0400 (Eastern Daylight Time)", - "fruit": "bananas", + "fruit": "Bananas", "value": 25 }, { "date": "Thu Feb 01 2018 00:00:00 GMT-0500 (Eastern Standard Time)", - "fruit": "apricots", + "fruit": "Apricots", "value": 22 }, { "date": "Thu Mar 01 2018 00:00:00 GMT-0500 (Eastern Standard Time)", - "fruit": "apricots", + "fruit": "Apricots", "value":3 }, { "date": "Thu Mar 08 2018 00:00:00 GMT-0500 (Eastern Standard Time)", - "fruit": "apricots", + "fruit": "Apricots", "value": 3 }, { "date": "Sun Apr 01 2018 00:00:00 GMT-0400 (Eastern Daylight Time)", - "fruit": "apricots", + "fruit": "Apricots", "value": 40 } ] \ No newline at end of file diff --git a/src/App.tsx b/src/App.tsx index 89a8d49..0ee55ad 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -4,81 +4,98 @@ import AreaChart from './charts/AreaChart/AreaChart'; import LineChart from './charts/LineChart/LineChart'; import ScatterPlot from './charts/ScatterPlot/ScatterPlot'; import PieChart from './charts/PieChart/PieChart'; - -import portfolio from '../data/portfolio.json'; -import penguins from '../data/penguins.json'; -import fruit from '../data/fruit.json'; - import GlobalStyle from './styles/globals'; import { Container } from './styles/componentStyles'; + +import skinny_fruit from '../data/skinny_fruit.json'; + +//data taken from https://data.world/2918diy/coffee-chain +import coffee_shop from '../data/coffee_shop.json'; + +//data taken from https://fred.stlouisfed.org/ +import ny_unemployment from '../data/ny_unemployment.json'; + +//data taken from https://ourworldindata.org/grapher/life-expectancy-vs-gdp-per-capita +import life_expectancy from '../data/life_expectancy.json'; + +//data taken from https://www.ers.usda.gov/data-products/international-macroeconomic-data-set/ +import historical_gdp from '../data/historical_gdp.json'; + function App() { return ( - - - + + ); } diff --git a/src/charts/AreaChart/AreaChart.tsx b/src/charts/AreaChart/AreaChart.tsx index 5425e52..4f9d787 100644 --- a/src/charts/AreaChart/AreaChart.tsx +++ b/src/charts/AreaChart/AreaChart.tsx @@ -164,7 +164,8 @@ export default function AreaChart({ yAccessor, margin, cHeight, - groupBy + "area-chart", + groupBy, ); }, [layers, transData, yAccessor, margin, cHeight, groupBy]); diff --git a/src/charts/BarChart/BarChart.tsx b/src/charts/BarChart/BarChart.tsx index 1290a2a..57395d7 100644 --- a/src/charts/BarChart/BarChart.tsx +++ b/src/charts/BarChart/BarChart.tsx @@ -162,6 +162,7 @@ export default function BarChart({ yAccessor, margin, cHeight, + "bar-chart", groupBy ); }, [transData, yAccessor, margin, cHeight, groupBy]); diff --git a/src/charts/LineChart/LineChart.tsx b/src/charts/LineChart/LineChart.tsx index e396dda..6a90a55 100644 --- a/src/charts/LineChart/LineChart.tsx +++ b/src/charts/LineChart/LineChart.tsx @@ -135,7 +135,7 @@ export default function LineChart({ // ******************** const yScale = useMemo(() => { - return yScaleDef(data, yAccessor, margin, cHeight); + return yScaleDef(data, yAccessor, margin, cHeight,"line-chart"); }, [data, yAccessor, margin, cHeight]); const { xScale, xMin, xMax } = useMemo(() => { diff --git a/src/charts/ScatterPlot/ScatterPlot.tsx b/src/charts/ScatterPlot/ScatterPlot.tsx index cf12e9f..cb5feaa 100644 --- a/src/charts/ScatterPlot/ScatterPlot.tsx +++ b/src/charts/ScatterPlot/ScatterPlot.tsx @@ -127,7 +127,7 @@ export default function ScatterPlot({ const xAccessorScaled = (d: any) => xScale(xAccessor(d)); const yScale = useMemo(() => { - return yScaleDef(data, yAccessor, margin, cHeight); + return yScaleDef(data, yAccessor, margin, cHeight, "scatter-plot"); }, [data, yAccessor, margin, cHeight]); const yAccessorScaled = (d: any) => yScale(yAccessor(d)); diff --git a/src/components/ContinuousAxis.tsx b/src/components/ContinuousAxis.tsx index f02d2e7..310b269 100644 --- a/src/components/ContinuousAxis.tsx +++ b/src/components/ContinuousAxis.tsx @@ -89,7 +89,6 @@ function Axi({ const getTickStyle = ( axisType: string, - individualTick: number | Date ): any => { // TODO remove any switch (axisType) { @@ -155,22 +154,22 @@ function Axi({ /> )} {(type === 'top' || type === 'bottom') && - horizontalTicks.map((tick, i) => ( + horizontalTicks.map((tick) => ( {getFormattedTick(tick)} ))} {(type === 'right' || type === 'left') && - verticalTicks.map((tick, i) => ( + verticalTicks.map((tick) => ( {getFormattedTick(tick)} diff --git a/src/functionality/yScale.tsx b/src/functionality/yScale.tsx index 1bf7df2..e868f93 100644 --- a/src/functionality/yScale.tsx +++ b/src/functionality/yScale.tsx @@ -1,17 +1,18 @@ import * as d3 from 'd3'; -import { Margin, Data, Domain, yAccessorFunc } from '../../types'; +import { Margin, Data, yAccessorFunc } from '../../types'; export function yScaleDef( data: Data[], yAccessor: yAccessorFunc, margin: Margin, height: number, + chartType?: string, groupBy?: string ) { let yMin: number; let yMax: number; - if (groupBy) { + if (groupBy && (chartType === 'area-chart' || chartType === 'bar-chart')) { yMax = d3.max(data, (layer: any) => { // scan each layer's data points for the highest value return d3.max(layer, (sequence: [number, number, any]) => sequence[1]); @@ -20,9 +21,13 @@ export function yScaleDef( // scan each layer's data points for the lowest value return d3.min(layer, (sequence: [number, number, any]) => sequence[0]); }) as number; - } else { + } else if(!groupBy && (chartType === 'area-chart' || chartType === 'bar-chart')) { yMax = d3.max(data, yAccessor) as number; - yMin = Math.min(0, d3.min(data, yAccessor) as number); + yMin = Math.min(0, d3.min(data, yAccessor) as number) + } + else { + yMax = d3.max(data, yAccessor) as number; + yMin = d3.min(data, yAccessor) as number } const rangeMax = height - margin.top - margin.bottom; const yScale = d3 From 041d8ba9c0141a2f95c1136f396491af5c1ddfd9 Mon Sep 17 00:00:00 2001 From: hi2dmitri Date: Fri, 28 Jan 2022 23:32:10 +0000 Subject: [PATCH 22/28] formatted --- src/App.tsx | 14 ++++++-------- src/charts/AreaChart/AreaChart.tsx | 4 ++-- src/charts/BarChart/BarChart.tsx | 2 +- src/charts/LineChart/LineChart.tsx | 8 ++------ src/charts/ScatterPlot/ScatterPlot.tsx | 2 +- src/components/ContinuousAxis.tsx | 4 +--- src/functionality/yScale.tsx | 12 +++++++----- 7 files changed, 20 insertions(+), 26 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 0ee55ad..6a7619e 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -7,7 +7,6 @@ import PieChart from './charts/PieChart/PieChart'; import GlobalStyle from './styles/globals'; import { Container } from './styles/componentStyles'; - import skinny_fruit from '../data/skinny_fruit.json'; //data taken from https://data.world/2918diy/coffee-chain @@ -34,7 +33,7 @@ function App() { innerRadius={200} pieLabel={false} legend="right" - legendLabel='Annual Sales 2021' + legendLabel="Annual Sales 2021" /> - ); } diff --git a/src/charts/AreaChart/AreaChart.tsx b/src/charts/AreaChart/AreaChart.tsx index 4f9d787..54a0645 100644 --- a/src/charts/AreaChart/AreaChart.tsx +++ b/src/charts/AreaChart/AreaChart.tsx @@ -164,8 +164,8 @@ export default function AreaChart({ yAccessor, margin, cHeight, - "area-chart", - groupBy, + 'area-chart', + groupBy ); }, [layers, transData, yAccessor, margin, cHeight, groupBy]); diff --git a/src/charts/BarChart/BarChart.tsx b/src/charts/BarChart/BarChart.tsx index 57395d7..7376f4a 100644 --- a/src/charts/BarChart/BarChart.tsx +++ b/src/charts/BarChart/BarChart.tsx @@ -162,7 +162,7 @@ export default function BarChart({ yAccessor, margin, cHeight, - "bar-chart", + 'bar-chart', groupBy ); }, [transData, yAccessor, margin, cHeight, groupBy]); diff --git a/src/charts/LineChart/LineChart.tsx b/src/charts/LineChart/LineChart.tsx index 6a90a55..4f802c1 100644 --- a/src/charts/LineChart/LineChart.tsx +++ b/src/charts/LineChart/LineChart.tsx @@ -7,11 +7,7 @@ import * as d3 from 'd3'; import { Axis } from '../../components/ContinuousAxis'; import { Line } from '../../components/Line'; import { VoronoiWrapper } from '../../components/VoronoiWrapper'; -import { - LineChartProps, - xAccessorFunc, - yAccessorFunc, -} from '../../../types'; +import { LineChartProps, xAccessorFunc, yAccessorFunc } from '../../../types'; import { getXAxisCoordinates, getYAxisCoordinates, @@ -135,7 +131,7 @@ export default function LineChart({ // ******************** const yScale = useMemo(() => { - return yScaleDef(data, yAccessor, margin, cHeight,"line-chart"); + return yScaleDef(data, yAccessor, margin, cHeight, 'line-chart'); }, [data, yAccessor, margin, cHeight]); const { xScale, xMin, xMax } = useMemo(() => { diff --git a/src/charts/ScatterPlot/ScatterPlot.tsx b/src/charts/ScatterPlot/ScatterPlot.tsx index cb5feaa..c1f0859 100644 --- a/src/charts/ScatterPlot/ScatterPlot.tsx +++ b/src/charts/ScatterPlot/ScatterPlot.tsx @@ -127,7 +127,7 @@ export default function ScatterPlot({ const xAccessorScaled = (d: any) => xScale(xAccessor(d)); const yScale = useMemo(() => { - return yScaleDef(data, yAccessor, margin, cHeight, "scatter-plot"); + return yScaleDef(data, yAccessor, margin, cHeight, 'scatter-plot'); }, [data, yAccessor, margin, cHeight]); const yAccessorScaled = (d: any) => yScale(yAccessor(d)); diff --git a/src/components/ContinuousAxis.tsx b/src/components/ContinuousAxis.tsx index 310b269..3caa7e2 100644 --- a/src/components/ContinuousAxis.tsx +++ b/src/components/ContinuousAxis.tsx @@ -87,9 +87,7 @@ function Axi({ } }; - const getTickStyle = ( - axisType: string, - ): any => { + const getTickStyle = (axisType: string): any => { // TODO remove any switch (axisType) { case 'top': diff --git a/src/functionality/yScale.tsx b/src/functionality/yScale.tsx index e868f93..78d663e 100644 --- a/src/functionality/yScale.tsx +++ b/src/functionality/yScale.tsx @@ -21,13 +21,15 @@ export function yScaleDef( // scan each layer's data points for the lowest value return d3.min(layer, (sequence: [number, number, any]) => sequence[0]); }) as number; - } else if(!groupBy && (chartType === 'area-chart' || chartType === 'bar-chart')) { + } else if ( + !groupBy && + (chartType === 'area-chart' || chartType === 'bar-chart') + ) { yMax = d3.max(data, yAccessor) as number; - yMin = Math.min(0, d3.min(data, yAccessor) as number) - } - else { + yMin = Math.min(0, d3.min(data, yAccessor) as number); + } else { yMax = d3.max(data, yAccessor) as number; - yMin = d3.min(data, yAccessor) as number + yMin = d3.min(data, yAccessor) as number; } const rangeMax = height - margin.top - margin.bottom; const yScale = d3 From d1acf9af95de682f1487cff2af1af75f4a7c2be1 Mon Sep 17 00:00:00 2001 From: hi2dmitri Date: Sat, 29 Jan 2022 00:46:22 +0000 Subject: [PATCH 23/28] fixed unnecessary rerendering in Rectangle --- src/charts/BarChart/BarChart.tsx | 13 +--- src/components/ListeningRect.tsx | 4 - src/components/Rectangle.tsx | 128 +++++++++++++++---------------- src/utils.ts | 7 -- types.ts | 2 +- 5 files changed, 67 insertions(+), 87 deletions(-) diff --git a/src/charts/BarChart/BarChart.tsx b/src/charts/BarChart/BarChart.tsx index 62442a0..c9d9bee 100644 --- a/src/charts/BarChart/BarChart.tsx +++ b/src/charts/BarChart/BarChart.tsx @@ -85,7 +85,7 @@ export default function BarChart({ const getSequenceData = (sequence: Data) => { const xKeyValue = { [xKey]: sequence.data[xKey] }; - const yKeyValue = { [yKey]: sequence[1] - sequence[0] }; + const yKeyValue = { [yKey]: sequence[1] }; return { ...xKeyValue, ...yKeyValue }; }; @@ -137,7 +137,6 @@ export default function BarChart({ tickMargin, ] ); - const translate = `translate(${margin.left}, ${margin.top})`; // ******************** @@ -291,10 +290,7 @@ export default function BarChart({ ? yScale(sequence[0]) - yScale(sequence[1]) : 0 } - margin={{ - marginTop: margin.top, - marginLeft: margin.left, - }} + margin={margin} fill={colorScale(layer.key[i])} setTooltip={setTooltip} /> @@ -321,10 +317,7 @@ export default function BarChart({ // draw rect from 0 mark to +value Math.abs(yScale(0) - yScale(yAccessor(d))) } - margin={{ - marginTop: margin.top, - marginLeft: margin.left, - }} + margin={margin} fill={colorScale(yKey)} setTooltip={setTooltip} /> diff --git a/src/components/ListeningRect.tsx b/src/components/ListeningRect.tsx index aec8257..f5caf88 100644 --- a/src/components/ListeningRect.tsx +++ b/src/components/ListeningRect.tsx @@ -122,10 +122,6 @@ export default function ListeningRect({ } } - console.log( - 'DIST FROM LEFT ', - margin.left - margin.right - tooltipState.cursorX - ); tooltipState.distanceFromTop = tooltipState.cursorY + margin.top - scrollPosition; tooltipState.distanceFromRight = diff --git a/src/components/Rectangle.tsx b/src/components/Rectangle.tsx index 2fbf120..65263c5 100644 --- a/src/components/Rectangle.tsx +++ b/src/components/Rectangle.tsx @@ -8,75 +8,73 @@ const Bar = styled.rect` fill-opacity: 0.7; `; -export const Rectangle = React.memo( - ({ +const RectangleComp = ({ + data, + dataTestId = 'rectangle', + x, + y, + width, + height, + margin, + fill, + setTooltip, +}: RectangleProps): JSX.Element => { + const clientWidth = useWindowDimensions().width; + let tooltipState = { + cursorX: 0, + cursorY: 0, + distanceFromTop: 0, + distanceFromRight: 0, + distanceFromLeft: 0, data, - dataTestId = 'rectangle', - x, - y, - width, - height, - margin, - fill, - setTooltip, - }: RectangleProps): JSX.Element => { - const clientWidth = useWindowDimensions().width; + }; - let tooltipState = { - cursorX: 0, - cursorY: 0, - distanceFromTop: 0, - distanceFromRight: 0, - distanceFromLeft: 0, - data, - }; + const mouseOver = (e: any) => { + // When the cursor enter the rectangle from the left we need to add half + // of the bar width to the cursor position to calculate the distance from + // right hand side of the page. When the cursor enters the bar from the + // right side of the bar we need to substract half of the bar width. + const offsetFromLeft = e.pageX - e.nativeEvent.layerX; + const offsetFromTop = e.clientY - e.nativeEvent.layerY; + const rectMidPoint = (x ?? 0) + width / 2; + const rectTop = y ?? 0; - const mouseOver = (e: any) => { - // When the cursor enter the rectangle from the left we need to add half - // of the bar width to the cursor position to calculate the distance from - // right hand side of the page. When the cursor enters the bar from the - // right side of the bar we need to substract half of the bar width. - const offsetFromLeft = e.pageX - e.nativeEvent.layerX; - const offsetFromTop = e.clientY - e.nativeEvent.layerY; - const cursorXPosition = - offsetFromLeft + e.nativeEvent.layerX - margin.marginLeft; - const cursorYPosition = - offsetFromTop + e.nativeEvent.layerY - margin.marginTop; - const rectMidPoint = (x ?? 0) + width / 2; - const rectTop = y ?? 0; + if (setTooltip) { + tooltipState = { + cursorX: e.pageX - e.nativeEvent.layerX + (x ?? 0), + cursorY: e.pageY - e.nativeEvent.layerY + (y ?? 0), + distanceFromTop: offsetFromTop + margin.top + rectTop, + distanceFromRight: + clientWidth - (offsetFromLeft + margin.left + rectMidPoint), + distanceFromLeft: offsetFromLeft + margin.left + rectMidPoint, + data, + }; - if (setTooltip) { - tooltipState = { - cursorX: e.pageX - e.nativeEvent.layerX + (x ?? 0), - cursorY: e.pageY - e.nativeEvent.layerY + (y ?? 0), - distanceFromTop: offsetFromTop + margin.marginTop + rectTop, - distanceFromRight: - clientWidth - (offsetFromLeft + margin.marginLeft + rectMidPoint), - distanceFromLeft: offsetFromLeft + margin.marginLeft + rectMidPoint, - data, - }; + setTooltip(tooltipState); + } + }; - setTooltip(tooltipState); - } - }; + const mouseOut = () => { + if (setTooltip) { + setTooltip ? setTooltip(false) : null; + } + }; - const mouseOut = (e: any) => { - if (setTooltip) { - setTooltip ? setTooltip(false) : null; - } - }; + return ( + mouseOver(e)} + onMouseOut={() => mouseOut()} + /> + ); +}; +const compareProps = (prev: RectangleProps, next: RectangleProps) => { + return prev.x === next.x && prev.y === next.y && prev.margin === next.margin; +}; - return ( - mouseOver(e)} - onMouseOut={(e) => mouseOut(e)} - /> - ); - } -); +export const Rectangle = React.memo(RectangleComp, compareProps); diff --git a/src/utils.ts b/src/utils.ts index a4ddb19..a3a0390 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -195,8 +195,6 @@ export function getAxisLabelCoordinates( axis: boolean, tickMargin = 0 ) { - const fontSize = 16; - let rotate = 0; let axisLabelX = 0; let axisLabelY = 0; @@ -301,11 +299,6 @@ interface CountryDataProps { values: Array>; } -interface CorrectedCountryDataProps { - key: string; - values: Array>; -} - export function findYDomainMax(data: any, keyArr: string[]) { let yDomainMax = 0; data.forEach((obj: any) => { diff --git a/types.ts b/types.ts index 759faf9..2512d67 100644 --- a/types.ts +++ b/types.ts @@ -305,7 +305,7 @@ export interface RectangleProps { y: number; width: number; height: number; - margin: { marginTop: number; marginLeft: number }; + margin: Margin; fill: string; setTooltip?: React.Dispatch; } From b7ba242ad1892409b8291f848228134cda4f7d58 Mon Sep 17 00:00:00 2001 From: Ece Ozalp Date: Sat, 29 Jan 2022 12:15:24 -0500 Subject: [PATCH 24/28] initial read me --- README.md | 48 ++++++++++++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index e7e0567..298968b 100644 --- a/README.md +++ b/README.md @@ -1,41 +1,49 @@ # d3reactor -An open-source library of chart components for creating performant, responsive data visualizations in React +An open-source library of charts for creating performant, responsive data visualizations built with React and D3. -# The problem: - -D3 and React compete for control of the DOM, making it difficult to leverage D3's capabilities while taking advantage of React's virtual DOM. This often results in D3 code that re-renders the DOM unnecessarily, resulting in charts with poor performance. +The main goal of this library to help you create customizable charts easily. # Installation -Let's get your first d3reactor chart set up in less < 5 minutes. +Let's get your first d3reactor chart setup in less < 5 minutes. ## Install the d3reactor package ``` -npm i d3reactor +npm install d3reactor ``` OR ``` -yarn install d3reactor +yarn add d3reactor +``` +## Import d3reactor into your React project + +``` +import * as d3reactor from "d3reactor" ``` -## Import d3reactor into your React file + +OR you can import each chart separately + ``` -import d3reactor from 'd3reactor' +import {AreaChart, BarChart, PieChart, ScatterPlot, LineChart} from "d3reactor" ``` -## Instantiate a new d3reactor component in the return statement of your parent component +And you are good to go. + + +# Examples + ``` -function MyParentComponent() { - return ( - - ); -} + + ``` And you're good to go! Screen Shot 2022-01-27 at 11 49 44 + + From c7aaeed90da33305dfb820200a9d2f96f3b01016 Mon Sep 17 00:00:00 2001 From: Ece Ozalp Date: Sat, 29 Jan 2022 12:18:29 -0500 Subject: [PATCH 25/28] took the repeating sentence out --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 298968b..34c1594 100644 --- a/README.md +++ b/README.md @@ -27,8 +27,6 @@ OR you can import each chart separately import {AreaChart, BarChart, PieChart, ScatterPlot, LineChart} from "d3reactor" ``` -And you are good to go. - # Examples From e4bc9d6918102542cfc97415808f960b71f181a5 Mon Sep 17 00:00:00 2001 From: Ece Ozalp Date: Sat, 29 Jan 2022 12:20:23 -0500 Subject: [PATCH 26/28] spacing --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 34c1594..0f75664 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,7 @@ OR ``` yarn add d3reactor ``` + ## Import d3reactor into your React project ``` @@ -27,7 +28,6 @@ OR you can import each chart separately import {AreaChart, BarChart, PieChart, ScatterPlot, LineChart} from "d3reactor" ``` - # Examples ``` From af8492e6745d6b74f7926f4e2935f2735c8ee8b5 Mon Sep 17 00:00:00 2001 From: Dmitri Iershov <83976244+hi2dmitri@users.noreply.github.com> Date: Sat, 29 Jan 2022 17:50:19 +0000 Subject: [PATCH 27/28] Update package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 72110d1..6121b58 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@oslabs-beta/d3reactor", - "version": "0.0.0", + "version": "0.0.6", "description": "Open-source charting library for creating performant, responsive data visualizations in React", "main": "./dist/index.js", "types": "./dist/src/index.d.ts", From 886e0a3cba6a35a1756c5c1811e47ff52ae1b2f7 Mon Sep 17 00:00:00 2001 From: hi2dmitri Date: Sat, 29 Jan 2022 18:06:58 +0000 Subject: [PATCH 28/28] removed unused declarations --- src/components/VoronoiWrapper.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/VoronoiWrapper.tsx b/src/components/VoronoiWrapper.tsx index 40bc739..e9449c9 100644 --- a/src/components/VoronoiWrapper.tsx +++ b/src/components/VoronoiWrapper.tsx @@ -14,7 +14,6 @@ export const VoronoiWrapper = React.memo( setTooltip, margin, }: VoronoiBody): JSX.Element => { - const { width, height } = useWindowDimensions(); return ( {data.map((element: Data, i: number) => (