From 4a32b63b9fdbeb4e9cbc70e28cc16d65a9689dd1 Mon Sep 17 00:00:00 2001 From: blue0knight Date: Fri, 30 Mar 2018 16:26:28 -0400 Subject: [PATCH 1/5] uploading files --- assets/img/background-image.jpg | Bin 0 -> 86050 bytes css/styles.css | 55 ++ data/data-gender-age.csv | 13 + data/data-state.json | 361 ++++++++++++ data/data-states.csv | 52 ++ data/state.json | 362 ++++++++++++ index.html | 124 ++++ js/jquery.csv.js | 980 ++++++++++++++++++++++++++++++++ js/jquery.csv.min.js | 1 + js/main.js | 414 ++++++++++++++ 10 files changed, 2362 insertions(+) create mode 100644 assets/img/background-image.jpg create mode 100644 css/styles.css create mode 100755 data/data-gender-age.csv create mode 100644 data/data-state.json create mode 100755 data/data-states.csv create mode 100644 data/state.json create mode 100644 index.html create mode 100755 js/jquery.csv.js create mode 100755 js/jquery.csv.min.js create mode 100644 js/main.js diff --git a/assets/img/background-image.jpg b/assets/img/background-image.jpg new file mode 100644 index 0000000000000000000000000000000000000000..09d4fd1f52e54d8dbb50de1306155cfe7c822bc3 GIT binary patch literal 86050 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 j*vU+&-aMDOt z{M3A(j3^TkMy<<{u7{>1SQKZoRk?|@s)VH$K#Pqpryr1Nadnj~Jjsd8%8w>(;u^p` z?cq>dVxdf+FPrr+m7u><{uk=isA@?Xme_nnSXOiwT5itPN4-?jTaB`J@Az z3K@_Poro4__&{rM3`yH`|0d|c2qwiOxYi4PlEJ6Zp58l;5Ugf$+97VE4k z1li_+U`{yRkS3l}LqnV%D4e+hsK&|@jx?Z0pbJ}bdH83MX-&gxU!a?G#Mm?3Eokm1 zS{sn^M=puAtL4tUxQ_ECM5vEHJwE(ar#d9 zkwXg+8_Wc&JWy$Cz`C%vxecWNi0xb)G2&PYEAEjIO2x`C4sr(SB3x*anecCf5P}5c z&8~&{JUq`y-4|~b@*YxFk^u4^2SgLFlYlsay==ga58FyYf#C8(uF7r!2d%O00oZ$W2+kOw(q|}f7-0Jbq!dmfP5@_wq`h9qt zQ~OXP+mRitjIF||-YaR@Ozm(GISYAN5pt)iEXaD+wfDTPUoUZW*-s6`6{-mvzTN)S zj^9J#hwm_LGhIzBS&3HQtUU0X#$0T;Ta{VkqnhCO&3c2RD(3}MMp#)(jkP|BN%4;z z)HkqHoMghzxXN|7C)NE3SLVxqch&yj9p2A}sb60ssXBf%>GCjiNE5sQ^=?4~;XII< zz`gXIkcr=W&LU(h512nvKGOc+h>&n^<6#`i){q^Kcng#0^(4_tIDxOs7Z;p~^?f6F zLfNIYu~x)IYN0&`x2bWZ3Bq_tIe;8Oh#1Kwgx|!6a1n1KUe&8LTY=W>y)fM%jKMpC zt8^G}3eKNzUr6>?B>S1Ylt%peoFOU-q?rz8PoH9Y!#1;84>PCzy_7Ar@8tDtZjAf3 zL`-C|=Q;L]X83`v9>2Y#00xTlmuyP3(`sKXPb3C3?DQaISj4S0;BqsR)v3XlXO zlFW-J=HfS4o|%=yM1MXZ0wl5n_9^k4(8!@78!5=vj>G-BkLp`K=7a?7n40NSM*ytE zse;RFFSuAgW)3t+sQQ0OqkLr$m>(>pr?FnvI{|!WTLbhyx}4!rmUU|U;RtbLySNq` zU&!tYJn*d=RuWR=U)v!iZQ^LpW|b2#eVtAY%qw9PmkVYOD&+z1RH4fKrbTFE zxX@x%5%-bdI1O8p?E5c`+{>xK`t?cY!?qk@>uI4gCBzt_d6xmjA>IufrLArG5Z&lz zY!NqZz4b(wi4up|w)G zh@i+e=%0$5Yik??wl^->Xq}Baik@w&p1d=$Pm_D1n3kB!+v?6HsoQ1`^^#QUngXZx zQt9yv;$)YzPk3GGl@rp)d36tRJo)~Ndx8OgN%1{2rTg`?QOkWwuYOH|l)-o-dsWq2 z{dxcIGJ%GrbnRYR9r3O&3&y*BJ%e=smoqy>ZmjOeYJ8)x#{m4OON5l7@n9_}GI&^# z9Nj)%*3EpWL@so{e4$-0B8g!fNVs7~GTt6wbKupcse}B{!EMrGxOw_A3arv03-AsV8TGDBSzdC?-Dgig+ z#pArTTtgV@o^$c+NA4GkP00ycF+a!v&T(WwuLxx4RDYk^=W06WcwaW-tAkU`bERRg zCB~V!F@DbOJJ!u4N?y`AVU05<6tgW8QRvSN$pYm=Nv8ns>T@OH zv;-H}yi<9c&Ra5Zw*HF2c=38ivszZE8YOq}eTs7N^D;UM7rSPDnBI?#W~+ddwrCUX;^<7r0H>P|Ug8C~{R&iw#O7wq zYAL^BU@k@*cXTtJi(ONNr!m)GnOA$CSB|GEz^~?Ci!qY@ span { + display: block; +} + + .highcharts-button { + visibility: hidden !important; +} + +.nav-link.active { + background-color: #e95122!important ; +} + +.nav-link { + background-color: lightgrey; +} + + +/*.google-visualization-tooltip{ + position:fixed !important; + bottom:10000px !important; + left:50% !important; + margin:500px 0 0 0 !important; + }*/ \ No newline at end of file diff --git a/data/data-gender-age.csv b/data/data-gender-age.csv new file mode 100755 index 0000000..9b84c7e --- /dev/null +++ b/data/data-gender-age.csv @@ -0,0 +1,13 @@ +Preparedness,Age,Gender,Percent Value +ready,19 to 27,men,0.04 +somewhat ready,19 to 27,men,0.33 +not ready,19 to 27,men,0.63 +ready,28 to 36,men,0.12 +somewhat ready,28 to 36,men,0.36 +not ready,28 to 36,men,0.52 +ready,19 to 27,women,0.08 +somewhat ready,19 to 27,women,0.33 +not ready,19 to 27,women,0.59 +ready,28 to 36,women,0.18 +somewhat ready,28 to 36,women,0.53 +not ready,28 to 36,women,0.29 \ No newline at end of file diff --git a/data/data-state.json b/data/data-state.json new file mode 100644 index 0000000..d1bea35 --- /dev/null +++ b/data/data-state.json @@ -0,0 +1,361 @@ +{ +"states": [ +{ +"StateAbbv": "AK", +"State": "alaska", +"Percent of Population": 46, +"Median Household Income": "$75,723", +"Percent of Income": "2%" +}, +{ +"StateAbbv": "AL", +"State": "alabama", +"Percent of Population": 47, +"Median Household Income": "$47,221", +"Percent of Income": "3%" +}, +{ +"StateAbbv": "AR", +"State": "arkansas", +"Percent of Population": 44, +"Median Household Income": "$45,907", +"Percent of Income": "3%" +}, +{ +"StateAbbv": "AZ", +"State": "arizona", +"Percent of Population": 44, +"Median Household Income": "$57,100", +"Percent of Income": "2%" +}, +{ +"StateAbbv": "CA", +"State": "california", +"Percent of Population": 46, +"Median Household Income": "$66,637", +"Percent of Income": "2%" +}, +{ +"StateAbbv": "CO", +"State": "colorado", +"Percent of Population": 52, +"Median Household Income": "$70,566", +"Percent of Income": "2%" +}, +{ +"StateAbbv": "CT", +"State": "connecticut", +"Percent of Population": 54, +"Median Household Income": "$75,923", +"Percent of Income": "2%" +}, +{ +"StateAbbv": "DC", +"State": "district of columbia", +"Percent of Population": 51, +"Median Household Income": "$70,982", +"Percent of Income": "2%" +}, +{ +"StateAbbv": "DE", +"State": "delaware", +"Percent of Population": 47, +"Median Household Income": "$58,046", +"Percent of Income": "2%" +}, +{ +"StateAbbv": "FL", +"State": "florida", +"Percent of Population": 42, +"Median Household Income": "$51,176", +"Percent of Income": "3%" +}, +{ +"StateAbbv": "GA", +"State": "georgia", +"Percent of Population": 49, +"Median Household Income": "$53,527", +"Percent of Income": "3%" +}, +{ +"StateAbbv": "HI", +"State": "hawaii", +"Percent of Population": 55, +"Median Household Income": "$72,133", +"Percent of Income": "1%" +}, +{ +"StateAbbv": "IA", +"State": "iowa", +"Percent of Population": 54, +"Median Household Income": "$59,094", +"Percent of Income": "2%" +}, +{ +"StateAbbv": "ID", +"State": "idaho", +"Percent of Population": 48, +"Median Household Income": "$56,564", +"Percent of Income": "2%" +}, +{ +"StateAbbv": "IL", +"State": "illinois", +"Percent of Population": 51, +"Median Household Income": "$61,386", +"Percent of Income": "2%" +}, +{ +"StateAbbv": "IN", +"State": "indiana", +"Percent of Population": 52, +"Median Household Income": "$56,094", +"Percent of Income": "2%" +}, +{ +"StateAbbv": "KS", +"State": "kansas", +"Percent of Population": 53, +"Median Household Income": "$56,810", +"Percent of Income": "2%" +}, +{ +"StateAbbv": "KY", +"State": "kentucky", +"Percent of Population": 44, +"Median Household Income": "$45,369", +"Percent of Income": "3%" +}, +{ +"StateAbbv": "LA", +"State": "louisiana", +"Percent of Population": 42, +"Median Household Income": "$42,196", +"Percent of Income": "3%" +}, +{ +"StateAbbv": "MA", +"State": "massachusetts", +"Percent of Population": 54, +"Median Household Income": "$72,266", +"Percent of Income": "2%" +}, +{ +"StateAbbv": "MD", +"State": "maryland", +"Percent of Population": 54, +"Median Household Income": "$73,760", +"Percent of Income": "2%" +}, +{ +"StateAbbv": "ME", +"State": "maine", +"Percent of Population": 49, +"Median Household Income": "$50,856", +"Percent of Income": "3%" +}, +{ +"StateAbbv": "MI", +"State": "michigan", +"Percent of Population": 51, +"Median Household Income": "$57,091", +"Percent of Income": "2%" +}, +{ +"StateAbbv": "MN", +"State": "minnesota", +"Percent of Population": 55, +"Median Household Income": "$70,218", +"Percent of Income": "2%" +}, +{ +"StateAbbv": "MO", +"State": "missouri", +"Percent of Population": 51, +"Median Household Income": "$55,016", +"Percent of Income": "2%" +}, +{ +"StateAbbv": "MS", +"State": "mississippi", +"Percent of Population": 42, +"Median Household Income": "$41,099", +"Percent of Income": "3%" +}, +{ +"StateAbbv": "MT", +"State": "montana", +"Percent of Population": 43, +"Median Household Income": "$57,075", +"Percent of Income": "2%" +}, +{ +"StateAbbv": "NC", +"State": "north carolina", +"Percent of Population": 45, +"Median Household Income": "$53,764", +"Percent of Income": "2%" +}, +{ +"StateAbbv": "ND", +"State": "north dakota", +"Percent of Population": 55, +"Median Household Income": "$60,184", +"Percent of Income": "2%" +}, +{ +"StateAbbv": "NE", +"State": "nebraska", +"Percent of Population": 55, +"Median Household Income": "$59,374", +"Percent of Income": "2%" +}, +{ +"StateAbbv": "NH", +"State": "new hampshire", +"Percent of Population": 58, +"Median Household Income": "$76,260", +"Percent of Income": "2%" +}, +{ +"StateAbbv": "NJ", +"State": "new jersey", +"Percent of Population": 55, +"Median Household Income": "$68,468", +"Percent of Income": "3%" +}, +{ +"StateAbbv": "NM", +"State": "new mexico", +"Percent of Population": 36, +"Median Household Income": "$48,451", +"Percent of Income": "3%" +}, +{ +"StateAbbv": "NV", +"State": "nevada", +"Percent of Population": 50, +"Median Household Income": "$55,431", +"Percent of Income": "2%" +}, +{ +"StateAbbv": "NY", +"State": "new york", +"Percent of Population": 50, +"Median Household Income": "$61,437", +"Percent of Income": "2%" +}, +{ +"StateAbbv": "OH", +"State": "ohio", +"Percent of Population": 51, +"Median Household Income": "$53,985", +"Percent of Income": "3%" +}, +{ +"StateAbbv": "OK", +"State": "oklahoma", +"Percent of Population": 48, +"Median Household Income": "$50,943", +"Percent of Income": "2%" +}, +{ +"StateAbbv": "OR", +"State": "oregon", +"Percent of Population": 46, +"Median Household Income": "$59,135", +"Percent of Income": "2%" +}, +{ +"StateAbbv": "PA", +"State": "pennsylvania", +"Percent of Population": 53, +"Median Household Income": "$60,979", +"Percent of Income": "2%" +}, +{ +"StateAbbv": "RI", +"State": "rhode island", +"Percent of Population": 51, +"Median Household Income": "$61,528", +"Percent of Income": "3%" +}, +{ +"StateAbbv": "SC", +"State": "south carolina", +"Percent of Population": 46, +"Median Household Income": "$54,336", +"Percent of Income": "3%" +}, +{ +"StateAbbv": "SD", +"State": "south dakota", +"Percent of Population": 49, +"Median Household Income": "$57,450", +"Percent of Income": "2%" +}, +{ +"StateAbbv": "TN", +"State": "tennessee", +"Percent of Population": 46, +"Median Household Income": "$51,344", +"Percent of Income": "2%" +}, +{ +"StateAbbv": "TX", +"State": "texas", +"Percent of Population": 49, +"Median Household Income": "$58,146", +"Percent of Income": "2%" +}, +{ +"StateAbbv": "UT", +"State": "utah", +"Percent of Population": 60, +"Median Household Income": "$67,481", +"Percent of Income": "2%" +}, +{ +"StateAbbv": "VA", +"State": "virginia", +"Percent of Population": 55, +"Median Household Income": "$66,451", +"Percent of Income": "2%" +}, +{ +"StateAbbv": "VT", +"State": "vermont", +"Percent of Population": 47, +"Median Household Income": "$60,837", +"Percent of Income": "2%" +}, +{ +"StateAbbv": "WA", +"State": "washington", +"Percent of Population": 49, +"Median Household Income": "$70,310", +"Percent of Income": "1%" +}, +{ +"StateAbbv": "WI", +"State": "wisconsin", +"Percent of Population": 56, +"Median Household Income": "$59,817", +"Percent of Income": "2%" +}, +{ +"StateAbbv": "WV", +"State": "west virginia", +"Percent of Population": 43, +"Median Household Income": "$44,354", +"Percent of Income": "3%" +}, +{ +"StateAbbv": "WY", +"State": "wyoming", +"Percent of Population": 55, +"Median Household Income": "$57,829", +"Percent of Income": "2%" +} +] +} \ No newline at end of file diff --git a/data/data-states.csv b/data/data-states.csv new file mode 100755 index 0000000..2bb4c4d --- /dev/null +++ b/data/data-states.csv @@ -0,0 +1,52 @@ +State Abbv,State,Percent of Population,Median Household Income,Percent of Income +AK,ALASKA,46,"$75,723",2% +AL,ALABAMA,47,"$47,221",3% +AR,ARKANSAS,44,"$45,907",3% +AZ,ARIZONA,44,"$57,100",2% +CA,CALIFORNIA,46,"$66,637",2% +CO,COLORADO,52,"$70,566",2% +CT,CONNECTICUT,54,"$75,923",2% +DC,DISTRICT OF COLUMBIA,51,"$70,982",2% +DE,DELAWARE,47,"$58,046",2% +FL,FLORIDA,42,"$51,176",3% +GA,GEORGIA,49,"$53,527",3% +HI,HAWAII,55,"$72,133",1% +IA,IOWA,54,"$59,094",2% +ID,IDAHO,48,"$56,564",2% +IL,ILLINOIS,51,"$61,386",2% +IN,INDIANA,52,"$56,094",2% +KS,KANSAS,53,"$56,810",2% +KY,KENTUCKY,44,"$45,369",3% +LA,LOUISIANA,42,"$42,196",3% +MA,MASSACHUSETTS,54,"$72,266",2% +MD,MARYLAND,54,"$73,760",2% +ME,MAINE,49,"$50,856",3% +MI,MICHIGAN,51,"$57,091",2% +MN,MINNESOTA,55,"$70,218",2% +MO,MISSOURI,51,"$55,016",2% +MS,MISSISSIPPI,42,"$41,099",3% +MT,MONTANA,43,"$57,075",2% +NC,NORTH CAROLINA,45,"$53,764",2% +ND,NORTH DAKOTA,55,"$60,184",2% +NE,NEBRASKA,55,"$59,374",2% +NH,NEW HAMPSHIRE,58,"$76,260",2% +NJ,NEW JERSEY,55,"$68,468",3% +NM,NEW MEXICO,36,"$48,451",3% +NV,NEVADA,50,"$55,431",2% +NY,NEW YORK,50,"$61,437",2% +OH,OHIO,51,"$53,985",3% +OK,OKLAHOMA,48,"$50,943",2% +OR,OREGON,46,"$59,135",2% +PA,PENNSYLVANIA,53,"$60,979",2% +RI,RHODE ISLAND,51,"$61,528",3% +SC,SOUTH CAROLINA,46,"$54,336",3% +SD,SOUTH DAKOTA,49,"$57,450",2% +TN,TENNESSEE,46,"$51,344",2% +TX,TEXAS,49,"$58,146",2% +UT,UTAH,60,"$67,481",2% +VA,VIRGINIA,55,"$66,451",2% +VT,VERMONT,47,"$60,837",2% +WA,WASHINGTON,49,"$70,310",1% +WI,WISCONSIN,56,"$59,817",2% +WV,WEST VIRGINIA,43,"$44,354",3% +WY,WYOMING,55,"$57,829",2% \ No newline at end of file diff --git a/data/state.json b/data/state.json new file mode 100644 index 0000000..f4c9fb6 --- /dev/null +++ b/data/state.json @@ -0,0 +1,362 @@ +{"states": + + [ + { + "StateAbbv": "AK", + "State": "Alaska", + "Percent of Population": 46, + "Median Household Income": "$75,723", + "Percent of Income": "2%" + }, + { + "StateAbbv": "AL", + "State": "Alabama", + "Percent of Population": 47, + "Median Household Income": "$47,221", + "Percent of Income": "3%" + }, + { + "StateAbbv": "AR", + "State": "Arkansas", + "Percent of Population": 44, + "Median Household Income": "$45,907", + "Percent of Income": "3%" + }, + { + "StateAbbv": "AZ", + "State": "arizona", + "Percent of Population": 44, + "Median Household Income": "$57,100", + "Percent of Income": "2%" + }, + { + "StateAbbv": "CA", + "State": "California", + "Percent of Population": 46, + "Median Household Income": "$66,637", + "Percent of Income": "2%" + }, + { + "StateAbbv": "CO", + "State": "Colorado", + "Percent of Population": 52, + "Median Household Income": "$70,566", + "Percent of Income": "2%" + }, + { + "StateAbbv": "CT", + "State": "Connecticut", + "Percent of Population": 54, + "Median Household Income": "$75,923", + "Percent of Income": "2%" + }, + { + "StateAbbv": "DC", + "State": "District of Columbia", + "Percent of Population": 51, + "Median Household Income": "$70,982", + "Percent of Income": "2%" + }, + { + "StateAbbv": "DE", + "State": "Delaware", + "Percent of Population": 47, + "Median Household Income": "$58,046", + "Percent of Income": "2%" + }, + { + "StateAbbv": "FL", + "State": "Florida", + "Percent of Population": 42, + "Median Household Income": "$51,176", + "Percent of Income": "3%" + }, + { + "StateAbbv": "GA", + "State": "Georgia", + "Percent of Population": 49, + "Median Household Income": "$53,527", + "Percent of Income": "3%" + }, + { + "StateAbbv": "HI", + "State": "Hawaii", + "Percent of Population": 55, + "Median Household Income": "$72,133", + "Percent of Income": "1%" + }, + { + "StateAbbv": "IA", + "State": "Iowa", + "Percent of Population": 54, + "Median Household Income": "$59,094", + "Percent of Income": "2%" + }, + { + "StateAbbv": "ID", + "State": "Idaho", + "Percent of Population": 48, + "Median Household Income": "$56,564", + "Percent of Income": "2%" + }, + { + "StateAbbv": "IL", + "State": "Illinois", + "Percent of Population": 51, + "Median Household Income": "$61,386", + "Percent of Income": "2%" + }, + { + "StateAbbv": "IN", + "State": "Indiana", + "Percent of Population": 52, + "Median Household Income": "$56,094", + "Percent of Income": "2%" + }, + { + "StateAbbv": "KS", + "State": "Kansas", + "Percent of Population": 53, + "Median Household Income": "$56,810", + "Percent of Income": "2%" + }, + { + "StateAbbv": "KY", + "State": "Kentucky", + "Percent of Population": 44, + "Median Household Income": "$45,369", + "Percent of Income": "3%" + }, + { + "StateAbbv": "LA", + "State": "Louisiana", + "Percent of Population": 42, + "Median Household Income": "$42,196", + "Percent of Income": "3%" + }, + { + "StateAbbv": "MA", + "State": "Massachusetts", + "Percent of Population": 54, + "Median Household Income": "$72,266", + "Percent of Income": "2%" + }, + { + "StateAbbv": "MD", + "State": "Maryland", + "Percent of Population": 54, + "Median Household Income": "$73,760", + "Percent of Income": "2%" + }, + { + "StateAbbv": "ME", + "State": "Maine", + "Percent of Population": 49, + "Median Household Income": "$50,856", + "Percent of Income": "3%" + }, + { + "StateAbbv": "MI", + "State": "Michigan", + "Percent of Population": 51, + "Median Household Income": "$57,091", + "Percent of Income": "2%" + }, + { + "StateAbbv": "MN", + "State": "Minnesota", + "Percent of Population": 55, + "Median Household Income": "$70,218", + "Percent of Income": "2%" + }, + { + "StateAbbv": "MO", + "State": "Missouri", + "Percent of Population": 51, + "Median Household Income": "$55,016", + "Percent of Income": "2%" + }, + { + "StateAbbv": "MS", + "State": "Mississippi", + "Percent of Population": 42, + "Median Household Income": "$41,099", + "Percent of Income": "3%" + }, + { + "StateAbbv": "MT", + "State": "Montana", + "Percent of Population": 43, + "Median Household Income": "$57,075", + "Percent of Income": "2%" + }, + { + "StateAbbv": "NC", + "State": "North Carolina", + "Percent of Population": 45, + "Median Household Income": "$53,764", + "Percent of Income": "2%" + }, + { + "StateAbbv": "ND", + "State": "North Dakota", + "Percent of Population": 55, + "Median Household Income": "$60,184", + "Percent of Income": "2%" + }, + { + "StateAbbv": "NE", + "State": "Nebraska", + "Percent of Population": 55, + "Median Household Income": "$59,374", + "Percent of Income": "2%" + }, + { + "StateAbbv": "NH", + "State": "New Hampshire", + "Percent of Population": 58, + "Median Household Income": "$76,260", + "Percent of Income": "2%" + }, + { + "StateAbbv": "NJ", + "State": "New Jersey", + "Percent of Population": 55, + "Median Household Income": "$68,468", + "Percent of Income": "3%" + }, + { + "StateAbbv": "NM", + "State": "New Mexico", + "Percent of Population": 36, + "Median Household Income": "$48,451", + "Percent of Income": "3%" + }, + { + "StateAbbv": "NV", + "State": "Nevada", + "Percent of Population": 50, + "Median Household Income": "$55,431", + "Percent of Income": "2%" + }, + { + "StateAbbv": "NY", + "State": "New York", + "Percent of Population": 50, + "Median Household Income": "$61,437", + "Percent of Income": "2%" + }, + { + "StateAbbv": "OH", + "State": "Ohio", + "Percent of Population": 51, + "Median Household Income": "$53,985", + "Percent of Income": "3%" + }, + { + "StateAbbv": "OK", + "State": "Oklahoma", + "Percent of Population": 48, + "Median Household Income": "$50,943", + "Percent of Income": "2%" + }, + { + "StateAbbv": "OR", + "State": "Oregon", + "Percent of Population": 46, + "Median Household Income": "$59,135", + "Percent of Income": "2%" + }, + { + "StateAbbv": "PA", + "State": "Pennsylvania", + "Percent of Population": 53, + "Median Household Income": "$60,979", + "Percent of Income": "2%" + }, + { + "StateAbbv": "RI", + "State": "Rhode Island", + "Percent of Population": 51, + "Median Household Income": "$61,528", + "Percent of Income": "3%" + }, + { + "StateAbbv": "SC", + "State": "South Carolina", + "Percent of Population": 46, + "Median Household Income": "$54,336", + "Percent of Income": "3%" + }, + { + "StateAbbv": "SD", + "State": "South Dakota", + "Percent of Population": 49, + "Median Household Income": "$57,450", + "Percent of Income": "2%" + }, + { + "StateAbbv": "TN", + "State": "Tennessee", + "Percent of Population": 46, + "Median Household Income": "$51,344", + "Percent of Income": "2%" + }, + { + "StateAbbv": "TX", + "State": "Texas", + "Percent of Population": 49, + "Median Household Income": "$58,146", + "Percent of Income": "2%" + }, + { + "StateAbbv": "UT", + "State": "Utah", + "Percent of Population": 60, + "Median Household Income": "$67,481", + "Percent of Income": "2%" + }, + { + "StateAbbv": "VA", + "State": "Virginia", + "Percent of Population": 55, + "Median Household Income": "$66,451", + "Percent of Income": "2%" + }, + { + "StateAbbv": "VT", + "State": "Vermont", + "Percent of Population": 47, + "Median Household Income": "$60,837", + "Percent of Income": "2%" + }, + { + "StateAbbv": "WA", + "State": "Washington", + "Percent of Population": 49, + "Median Household Income": "$70,310", + "Percent of Income": "1%" + }, + { + "StateAbbv": "WI", + "State": "Wisconsin", + "Percent of Population": 56, + "Median Household Income": "$59,817", + "Percent of Income": "2%" + }, + { + "StateAbbv": "WV", + "State": "West Virginia", + "Percent of Population": 43, + "Median Household Income": "$44,354", + "Percent of Income": "3%" + }, + { + "StateAbbv": "WY", + "State": "Wyoming", + "Percent of Population": 55, + "Median Household Income": "$57,829", + "Percent of Income": "2%" + } + ] +} \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..7d9ac90 --- /dev/null +++ b/index.html @@ -0,0 +1,124 @@ + + + + + + + + + + + + GeoCharts and Highcharts2 + + + +
+
+
+

Region GeoChart Stats + Method 1 +

+

(json file was pasted in an array to create the Geochart.
+ The json file was created using an online .cvs to .json tool)

+
+
+
+ +
+
+
+
+
+
+
+ +
+
+
+

Region GeoChart Stats + Method 2 +

+

(data pulled from json file on project folder.
+ The json file was created using an online .cvs to .json tool)

+
+
+
+ +
+
+
+
+
+
+
+ +
+ +
+
+
+

State of Preparedness by Gender + and Age Group +

+

(click button to toggle between stats)

+
+
+
+
+
+ +
+
+ +
+
+ +
+
+
+
+
+
+
+
+ +
+
+ +
+
+
+
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/js/jquery.csv.js b/js/jquery.csv.js new file mode 100755 index 0000000..944ae3f --- /dev/null +++ b/js/jquery.csv.js @@ -0,0 +1,980 @@ +/** + * jQuery-csv (jQuery Plugin) + * + * This document is licensed as free software under the terms of the + * MIT License: http://www.opensource.org/licenses/mit-license.php + * + * Acknowledgements: + * The original design and influence to implement this library as a jquery + * plugin is influenced by jquery-json (http://code.google.com/p/jquery-json/). + * If you're looking to use native JSON.Stringify but want additional backwards + * compatibility for browsers that don't support it, I highly recommend you + * check it out. + * + * A special thanks goes out to rwk@acm.org for providing a lot of valuable + * feedback to the project including the core for the new FSM + * (Finite State Machine) parsers. If you're looking for a stable TSV parser + * be sure to take a look at jquery-tsv (http://code.google.com/p/jquery-tsv/). + + * For legal purposes I'll include the "NO WARRANTY EXPRESSED OR IMPLIED. + * USE AT YOUR OWN RISK.". Which, in 'layman's terms' means, by using this + * library you are accepting responsibility if it breaks your code. + * + * Legal jargon aside, I will do my best to provide a useful and stable core + * that can effectively be built on. + * + * Copyrighted 2012 by Evan Plaice. + */ + +RegExp.escape = function (s) { + return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); +}; + +(function () { + 'use strict'; + + var $; + + // to keep backwards compatibility + if (typeof jQuery !== 'undefined' && jQuery) { + $ = jQuery; + } else { + $ = {}; + } + + /** + * jQuery.csv.defaults + * Encapsulates the method paramater defaults for the CSV plugin module. + */ + + $.csv = { + defaults: { + separator: ',', + delimiter: '"', + headers: true + }, + + hooks: { + castToScalar: function (value, state) { + var hasDot = /\./; + if (isNaN(value)) { + return value; + } else { + if (hasDot.test(value)) { + return parseFloat(value); + } else { + var integer = parseInt(value); + if (isNaN(integer)) { + return null; + } else { + return integer; + } + } + } + } + }, + + parsers: { + parse: function (csv, options) { + // cache settings + var separator = options.separator; + var delimiter = options.delimiter; + + // set initial state if it's missing + if (!options.state.rowNum) { + options.state.rowNum = 1; + } + if (!options.state.colNum) { + options.state.colNum = 1; + } + + // clear initial state + var data = []; + var entry = []; + var state = 0; + var value = ''; + var exit = false; + + function endOfEntry () { + // reset the state + state = 0; + value = ''; + + // if 'start' hasn't been met, don't output + if (options.start && options.state.rowNum < options.start) { + // update global state + entry = []; + options.state.rowNum++; + options.state.colNum = 1; + return; + } + + if (options.onParseEntry === undefined) { + // onParseEntry hook not set + data.push(entry); + } else { + var hookVal = options.onParseEntry(entry, options.state); // onParseEntry Hook + // false skips the row, configurable through a hook + if (hookVal !== false) { + data.push(hookVal); + } + } + // console.log('entry:' + entry); + + // cleanup + entry = []; + + // if 'end' is met, stop parsing + if (options.end && options.state.rowNum >= options.end) { + exit = true; + } + + // update global state + options.state.rowNum++; + options.state.colNum = 1; + } + + function endOfValue () { + if (options.onParseValue === undefined) { + // onParseValue hook not set + entry.push(value); + } else { + var hook = options.onParseValue(value, options.state); // onParseValue Hook + // false skips the row, configurable through a hook + if (hook !== false) { + entry.push(hook); + } + } + // console.log('value:' + value); + // reset the state + value = ''; + state = 0; + // update global state + options.state.colNum++; + } + + // escape regex-specific control chars + var escSeparator = RegExp.escape(separator); + var escDelimiter = RegExp.escape(delimiter); + + // compile the regEx str using the custom delimiter/separator + var match = /(D|S|\r\n|\n|\r|[^DS\r\n]+)/; + var matchSrc = match.source; + matchSrc = matchSrc.replace(/S/g, escSeparator); + matchSrc = matchSrc.replace(/D/g, escDelimiter); + match = new RegExp(matchSrc, 'gm'); + + // put on your fancy pants... + // process control chars individually, use look-ahead on non-control chars + csv.replace(match, function (m0) { + if (exit) { + return; + } + switch (state) { + // the start of a value + case 0: + // null last value + if (m0 === separator) { + value += ''; + endOfValue(); + break; + } + // opening delimiter + if (m0 === delimiter) { + state = 1; + break; + } + // null last value + if (/^(\r\n|\n|\r)$/.test(m0)) { + endOfValue(); + endOfEntry(); + break; + } + // un-delimited value + value += m0; + state = 3; + break; + + // delimited input + case 1: + // second delimiter? check further + if (m0 === delimiter) { + state = 2; + break; + } + // delimited data + value += m0; + state = 1; + break; + + // delimiter found in delimited input + case 2: + // escaped delimiter? + if (m0 === delimiter) { + value += m0; + state = 1; + break; + } + // null value + if (m0 === separator) { + endOfValue(); + break; + } + // end of entry + if (/^(\r\n|\n|\r)$/.test(m0)) { + endOfValue(); + endOfEntry(); + break; + } + // broken paser? + throw new Error('CSVDataError: Illegal State [Row:' + options.state.rowNum + '][Col:' + options.state.colNum + ']'); + + // un-delimited input + case 3: + // null last value + if (m0 === separator) { + endOfValue(); + break; + } + // end of entry + if (/^(\r\n|\n|\r)$/.test(m0)) { + endOfValue(); + endOfEntry(); + break; + } + if (m0 === delimiter) { + // non-compliant data + throw new Error('CSVDataError: Illegal Quote [Row:' + options.state.rowNum + '][Col:' + options.state.colNum + ']'); + } + // broken parser? + throw new Error('CSVDataError: Illegal Data [Row:' + options.state.rowNum + '][Col:' + options.state.colNum + ']'); + default: + // shenanigans + throw new Error('CSVDataError: Unknown State [Row:' + options.state.rowNum + '][Col:' + options.state.colNum + ']'); + } + // console.log('val:' + m0 + ' state:' + state); + }); + + // submit the last entry + // ignore null last line + if (entry.length !== 0) { + endOfValue(); + endOfEntry(); + } + + return data; + }, + + // a csv-specific line splitter + splitLines: function (csv, options) { + if (!csv) { + return undefined; + } + + options = options || {}; + + // cache settings + var separator = options.separator || $.csv.defaults.separator; + var delimiter = options.delimiter || $.csv.defaults.delimiter; + + // set initial state if it's missing + options.state = options.state || {}; + if (!options.state.rowNum) { + options.state.rowNum = 1; + } + + // clear initial state + var entries = []; + var state = 0; + var entry = ''; + var exit = false; + + function endOfLine () { + // reset the state + state = 0; + + // if 'start' hasn't been met, don't output + if (options.start && options.state.rowNum < options.start) { + // update global state + entry = ''; + options.state.rowNum++; + return; + } + + if (options.onParseEntry === undefined) { + // onParseEntry hook not set + entries.push(entry); + } else { + var hookVal = options.onParseEntry(entry, options.state); // onParseEntry Hook + // false skips the row, configurable through a hook + if (hookVal !== false) { + entries.push(hookVal); + } + } + + // cleanup + entry = ''; + + // if 'end' is met, stop parsing + if (options.end && options.state.rowNum >= options.end) { + exit = true; + } + + // update global state + options.state.rowNum++; + } + + // escape regex-specific control chars + var escSeparator = RegExp.escape(separator); + var escDelimiter = RegExp.escape(delimiter); + + // compile the regEx str using the custom delimiter/separator + var match = /(D|S|\n|\r|[^DS\r\n]+)/; + var matchSrc = match.source; + matchSrc = matchSrc.replace(/S/g, escSeparator); + matchSrc = matchSrc.replace(/D/g, escDelimiter); + match = new RegExp(matchSrc, 'gm'); + + // put on your fancy pants... + // process control chars individually, use look-ahead on non-control chars + csv.replace(match, function (m0) { + if (exit) { + return; + } + switch (state) { + // the start of a value/entry + case 0: + // null value + if (m0 === separator) { + entry += m0; + state = 0; + break; + } + // opening delimiter + if (m0 === delimiter) { + entry += m0; + state = 1; + break; + } + // end of line + if (m0 === '\n') { + endOfLine(); + break; + } + // phantom carriage return + if (/^\r$/.test(m0)) { + break; + } + // un-delimit value + entry += m0; + state = 3; + break; + + // delimited input + case 1: + // second delimiter? check further + if (m0 === delimiter) { + entry += m0; + state = 2; + break; + } + // delimited data + entry += m0; + state = 1; + break; + + // delimiter found in delimited input + case 2: + // escaped delimiter? + var prevChar = entry.substr(entry.length - 1); + if (m0 === delimiter && prevChar === delimiter) { + entry += m0; + state = 1; + break; + } + // end of value + if (m0 === separator) { + entry += m0; + state = 0; + break; + } + // end of line + if (m0 === '\n') { + endOfLine(); + break; + } + // phantom carriage return + if (m0 === '\r') { + break; + } + // broken paser? + throw new Error('CSVDataError: Illegal state [Row:' + options.state.rowNum + ']'); + + // un-delimited input + case 3: + // null value + if (m0 === separator) { + entry += m0; + state = 0; + break; + } + // end of line + if (m0 === '\n') { + endOfLine(); + break; + } + // phantom carriage return + if (m0 === '\r') { + break; + } + // non-compliant data + if (m0 === delimiter) { + throw new Error('CSVDataError: Illegal quote [Row:' + options.state.rowNum + ']'); + } + // broken parser? + throw new Error('CSVDataError: Illegal state [Row:' + options.state.rowNum + ']'); + default: + // shenanigans + throw new Error('CSVDataError: Unknown state [Row:' + options.state.rowNum + ']'); + } + // console.log('val:' + m0 + ' state:' + state); + }); + + // submit the last entry + // ignore null last line + if (entry !== '') { + endOfLine(); + } + + return entries; + }, + + // a csv entry parser + parseEntry: function (csv, options) { + // cache settings + var separator = options.separator; + var delimiter = options.delimiter; + + // set initial state if it's missing + if (!options.state.rowNum) { + options.state.rowNum = 1; + } + if (!options.state.colNum) { + options.state.colNum = 1; + } + + // clear initial state + var entry = []; + var state = 0; + var value = ''; + + function endOfValue () { + if (options.onParseValue === undefined) { + // onParseValue hook not set + entry.push(value); + } else { + var hook = options.onParseValue(value, options.state); // onParseValue Hook + // false skips the value, configurable through a hook + if (hook !== false) { + entry.push(hook); + } + } + // reset the state + value = ''; + state = 0; + // update global state + options.state.colNum++; + } + + // checked for a cached regEx first + if (!options.match) { + // escape regex-specific control chars + var escSeparator = RegExp.escape(separator); + var escDelimiter = RegExp.escape(delimiter); + + // compile the regEx str using the custom delimiter/separator + var match = /(D|S|\n|\r|[^DS\r\n]+)/; + var matchSrc = match.source; + matchSrc = matchSrc.replace(/S/g, escSeparator); + matchSrc = matchSrc.replace(/D/g, escDelimiter); + options.match = new RegExp(matchSrc, 'gm'); + } + + // put on your fancy pants... + // process control chars individually, use look-ahead on non-control chars + csv.replace(options.match, function (m0) { + switch (state) { + // the start of a value + case 0: + // null last value + if (m0 === separator) { + value += ''; + endOfValue(); + break; + } + // opening delimiter + if (m0 === delimiter) { + state = 1; + break; + } + // skip un-delimited new-lines + if (m0 === '\n' || m0 === '\r') { + break; + } + // un-delimited value + value += m0; + state = 3; + break; + + // delimited input + case 1: + // second delimiter? check further + if (m0 === delimiter) { + state = 2; + break; + } + // delimited data + value += m0; + state = 1; + break; + + // delimiter found in delimited input + case 2: + // escaped delimiter? + if (m0 === delimiter) { + value += m0; + state = 1; + break; + } + // null value + if (m0 === separator) { + endOfValue(); + break; + } + // skip un-delimited new-lines + if (m0 === '\n' || m0 === '\r') { + break; + } + // broken paser? + throw new Error('CSVDataError: Illegal State [Row:' + options.state.rowNum + '][Col:' + options.state.colNum + ']'); + + // un-delimited input + case 3: + // null last value + if (m0 === separator) { + endOfValue(); + break; + } + // skip un-delimited new-lines + if (m0 === '\n' || m0 === '\r') { + break; + } + // non-compliant data + if (m0 === delimiter) { + throw new Error('CSVDataError: Illegal Quote [Row:' + options.state.rowNum + '][Col:' + options.state.colNum + ']'); + } + // broken parser? + throw new Error('CSVDataError: Illegal Data [Row:' + options.state.rowNum + '][Col:' + options.state.colNum + ']'); + default: + // shenanigans + throw new Error('CSVDataError: Unknown State [Row:' + options.state.rowNum + '][Col:' + options.state.colNum + ']'); + } + // console.log('val:' + m0 + ' state:' + state); + }); + + // submit the last value + endOfValue(); + + return entry; + } + }, + + helpers: { + + /** + * $.csv.helpers.collectPropertyNames(objectsArray) + * Collects all unique property names from all passed objects. + * + * @param {Array} objects Objects to collect properties from. + * + * Returns an array of property names (array will be empty, + * if objects have no own properties). + */ + collectPropertyNames: function (objects) { + var o = []; + var propName = []; + var props = []; + for (o in objects) { + for (propName in objects[o]) { + if ((objects[o].hasOwnProperty(propName)) && + (props.indexOf(propName) < 0) && + (typeof objects[o][propName] !== 'function')) { + props.push(propName); + } + } + } + return props; + } + }, + + /** + * $.csv.toArray(csv) + * Converts a CSV entry string to a javascript array. + * + * @param {Array} csv The string containing the CSV data. + * @param {Object} [options] An object containing user-defined options. + * @param {Character} [separator] An override for the separator character. Defaults to a comma(,). + * @param {Character} [delimiter] An override for the delimiter character. Defaults to a double-quote("). + * + * This method deals with simple CSV strings only. It's useful if you only + * need to parse a single entry. If you need to parse more than one line, + * use $.csv2Array instead. + */ + toArray: function (csv, options, callback) { + options = (options !== undefined ? options : {}); + var config = {}; + config.callback = ((callback !== undefined && typeof (callback) === 'function') ? callback : false); + config.separator = 'separator' in options ? options.separator : $.csv.defaults.separator; + config.delimiter = 'delimiter' in options ? options.delimiter : $.csv.defaults.delimiter; + var state = (options.state !== undefined ? options.state : {}); + + // setup + options = { + delimiter: config.delimiter, + separator: config.separator, + onParseEntry: options.onParseEntry, + onParseValue: options.onParseValue, + state: state + }; + + var entry = $.csv.parsers.parseEntry(csv, options); + + // push the value to a callback if one is defined + if (!config.callback) { + return entry; + } else { + config.callback('', entry); + } + }, + + /** + * $.csv.toArrays(csv) + * Converts a CSV string to a javascript array. + * + * @param {String} csv The string containing the raw CSV data. + * @param {Object} [options] An object containing user-defined options. + * @param {Character} [separator] An override for the separator character. Defaults to a comma(,). + * @param {Character} [delimiter] An override for the delimiter character. Defaults to a double-quote("). + * + * This method deals with multi-line CSV. The breakdown is simple. The first + * dimension of the array represents the line (or entry/row) while the second + * dimension contains the values (or values/columns). + */ + toArrays: function (csv, options, callback) { + options = (options !== undefined ? options : {}); + var config = {}; + config.callback = ((callback !== undefined && typeof (callback) === 'function') ? callback : false); + config.separator = 'separator' in options ? options.separator : $.csv.defaults.separator; + config.delimiter = 'delimiter' in options ? options.delimiter : $.csv.defaults.delimiter; + + // setup + var data = []; + options = { + delimiter: config.delimiter, + separator: config.separator, + onPreParse: options.onPreParse, + onParseEntry: options.onParseEntry, + onParseValue: options.onParseValue, + onPostParse: options.onPostParse, + start: options.start, + end: options.end, + state: { + rowNum: 1, + colNum: 1 + } + }; + + // onPreParse hook + if (options.onPreParse !== undefined) { + options.onPreParse(csv, options.state); + } + + // parse the data + data = $.csv.parsers.parse(csv, options); + + // onPostParse hook + if (options.onPostParse !== undefined) { + options.onPostParse(data, options.state); + } + + // push the value to a callback if one is defined + if (!config.callback) { + return data; + } else { + config.callback('', data); + } + }, + + /** + * $.csv.toObjects(csv) + * Converts a CSV string to a javascript object. + * @param {String} csv The string containing the raw CSV data. + * @param {Object} [options] An object containing user-defined options. + * @param {Character} [separator] An override for the separator character. Defaults to a comma(,). + * @param {Character} [delimiter] An override for the delimiter character. Defaults to a double-quote("). + * @param {Boolean} [headers] Indicates whether the data contains a header line. Defaults to true. + * + * This method deals with multi-line CSV strings. Where the headers line is + * used as the key for each value per entry. + */ + toObjects: function (csv, options, callback) { + options = (options !== undefined ? options : {}); + var config = {}; + config.callback = ((callback !== undefined && typeof (callback) === 'function') ? callback : false); + config.separator = 'separator' in options ? options.separator : $.csv.defaults.separator; + config.delimiter = 'delimiter' in options ? options.delimiter : $.csv.defaults.delimiter; + config.headers = 'headers' in options ? options.headers : $.csv.defaults.headers; + options.start = 'start' in options ? options.start : 1; + + // account for headers + if (config.headers) { + options.start++; + } + if (options.end && config.headers) { + options.end++; + } + + // setup + var lines = []; + var data = []; + + options = { + delimiter: config.delimiter, + separator: config.separator, + onPreParse: options.onPreParse, + onParseEntry: options.onParseEntry, + onParseValue: options.onParseValue, + onPostParse: options.onPostParse, + start: options.start, + end: options.end, + state: { + rowNum: 1, + colNum: 1 + }, + match: false, + transform: options.transform + }; + + // fetch the headers + var headerOptions = { + delimiter: config.delimiter, + separator: config.separator, + start: 1, + end: 1, + state: { + rowNum: 1, + colNum: 1 + } + }; + + // onPreParse hook + if (options.onPreParse !== undefined) { + options.onPreParse(csv, options.state); + } + + // parse the csv + var headerLine = $.csv.parsers.splitLines(csv, headerOptions); + var headers = $.csv.toArray(headerLine[0], options); + + // fetch the data + lines = $.csv.parsers.splitLines(csv, options); + + // reset the state for re-use + options.state.colNum = 1; + if (headers) { + options.state.rowNum = 2; + } else { + options.state.rowNum = 1; + } + + // convert data to objects + for (var i = 0, len = lines.length; i < len; i++) { + var entry = $.csv.toArray(lines[i], options); + var object = {}; + for (var j = 0; j < headers.length; j++) { + object[headers[j]] = entry[j]; + } + if (options.transform !== undefined) { + data.push(options.transform.call(undefined, object)); + } else { + data.push(object); + } + + // update row state + options.state.rowNum++; + } + + // onPostParse hook + if (options.onPostParse !== undefined) { + options.onPostParse(data, options.state); + } + + // push the value to a callback if one is defined + if (!config.callback) { + return data; + } else { + config.callback('', data); + } + }, + + /** + * $.csv.fromArrays(arrays) + * Converts a javascript array to a CSV String. + * + * @param {Array} arrays An array containing an array of CSV entries. + * @param {Object} [options] An object containing user-defined options. + * @param {Character} [separator] An override for the separator character. Defaults to a comma(,). + * @param {Character} [delimiter] An override for the delimiter character. Defaults to a double-quote("). + * + * This method generates a CSV file from an array of arrays (representing entries). + */ + fromArrays: function (arrays, options, callback) { + options = (options !== undefined ? options : {}); + var config = {}; + config.callback = ((callback !== undefined && typeof (callback) === 'function') ? callback : false); + config.separator = 'separator' in options ? options.separator : $.csv.defaults.separator; + config.delimiter = 'delimiter' in options ? options.delimiter : $.csv.defaults.delimiter; + + var output = ''; + var line; + var lineValues; + var i; + var j; + + for (i = 0; i < arrays.length; i++) { + line = arrays[i]; + lineValues = []; + for (j = 0; j < line.length; j++) { + var strValue = (line[j] === undefined || line[j] === null) ? '' : line[j].toString(); + if (strValue.indexOf(config.delimiter) > -1) { + strValue = strValue.replace(new RegExp(config.delimiter, 'g'), config.delimiter + config.delimiter); + } + + var escMatcher = '\n|\r|S|D'; + escMatcher = escMatcher.replace('S', config.separator); + escMatcher = escMatcher.replace('D', config.delimiter); + + if (strValue.search(escMatcher) > -1) { + strValue = config.delimiter + strValue + config.delimiter; + } + lineValues.push(strValue); + } + output += lineValues.join(config.separator) + '\n'; + } + + // push the value to a callback if one is defined + if (!config.callback) { + return output; + } else { + config.callback('', output); + } + }, + + /** + * $.csv.fromObjects(objects) + * Converts a javascript dictionary to a CSV string. + * + * @param {Object} objects An array of objects containing the data. + * @param {Object} [options] An object containing user-defined options. + * @param {Character} [separator] An override for the separator character. Defaults to a comma(,). + * @param {Character} [delimiter] An override for the delimiter character. Defaults to a double-quote("). + * @param {Character} [sortOrder] Sort order of columns (named after + * object properties). Use 'alpha' for alphabetic. Default is 'declare', + * which means, that properties will _probably_ appear in order they were + * declared for the object. But without any guarantee. + * @param {Character or Array} [manualOrder] Manually order columns. May be + * a strin in a same csv format as an output or an array of header names + * (array items won't be parsed). All the properties, not present in + * `manualOrder` will be appended to the end in accordance with `sortOrder` + * option. So the `manualOrder` always takes preference, if present. + * + * This method generates a CSV file from an array of objects (name:value pairs). + * It starts by detecting the headers and adding them as the first line of + * the CSV file, followed by a structured dump of the data. + */ + fromObjects: function (objects, options, callback) { + options = (options !== undefined ? options : {}); + var config = {}; + config.callback = ((callback !== undefined && typeof (callback) === 'function') ? callback : false); + config.separator = 'separator' in options ? options.separator : $.csv.defaults.separator; + config.delimiter = 'delimiter' in options ? options.delimiter : $.csv.defaults.delimiter; + config.headers = 'headers' in options ? options.headers : $.csv.defaults.headers; + config.sortOrder = 'sortOrder' in options ? options.sortOrder : 'declare'; + config.manualOrder = 'manualOrder' in options ? options.manualOrder : []; + config.transform = options.transform; + + if (typeof config.manualOrder === 'string') { + config.manualOrder = $.csv.toArray(config.manualOrder, config); + } + + if (config.transform !== undefined) { + var origObjects = objects; + objects = []; + + var i; + for (i = 0; i < origObjects.length; i++) { + objects.push(config.transform.call(undefined, origObjects[i])); + } + } + + var props = $.csv.helpers.collectPropertyNames(objects); + + if (config.sortOrder === 'alpha') { + props.sort(); + } // else {} - nothing to do for 'declare' order + + if (config.manualOrder.length > 0) { + var propsManual = [].concat(config.manualOrder); + let p; + for (p = 0; p < props.length; p++) { + if (propsManual.indexOf(props[p]) < 0) { + propsManual.push(props[p]); + } + } + props = propsManual; + } + + var o, p, line, output, propName; + if (config.headers) { + output.push(props); + } + + for (o = 0; o < objects.length; o++) { + line = []; + for (p = 0; p < props.length; p++) { + propName = props[p]; + if (propName in objects[o] && typeof objects[o][propName] !== 'function') { + line.push(objects[o][propName]); + } else { + line.push(''); + } + } + output.push(line); + } + + // push the value to a callback if one is defined + return $.csv.fromArrays(output, options, config.callback); + } + }; + + // Maintenance code to maintain backward-compatibility + // Will be removed in release 1.0 + $.csvEntry2Array = $.csv.toArray; + $.csv2Array = $.csv.toArrays; + $.csv2Dictionary = $.csv.toObjects; + + // CommonJS module is defined + if (typeof module !== 'undefined' && module.exports) { + module.exports = $.csv; + } +}).call(this); diff --git a/js/jquery.csv.min.js b/js/jquery.csv.min.js new file mode 100755 index 0000000..1655680 --- /dev/null +++ b/js/jquery.csv.min.js @@ -0,0 +1 @@ +RegExp.escape=function(r){return r.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")},function(){"use strict";var r;(r="undefined"!=typeof jQuery&&jQuery?jQuery:{}).csv={defaults:{separator:",",delimiter:'"',headers:!0},hooks:{castToScalar:function(r,e){if(isNaN(r))return r;if(/\./.test(r))return parseFloat(r);var a=parseInt(r);return isNaN(a)?null:a}},parsers:{parse:function(r,e){var a=e.separator,t=e.delimiter;e.state.rowNum||(e.state.rowNum=1),e.state.colNum||(e.state.colNum=1);var s=[],o=[],n=0,i="",l=!1;function c(){if(n=0,i="",e.start&&e.state.rowNum=e.end&&(l=!0),e.state.rowNum++,e.state.colNum=1}function u(){if(void 0===e.onParseValue)o.push(i);else{var r=e.onParseValue(i,e.state);!1!==r&&o.push(r)}i="",n=0,e.state.colNum++}var f=RegExp.escape(a),d=RegExp.escape(t),m=/(D|S|\r\n|\n|\r|[^DS\r\n]+)/,p=m.source;return p=(p=p.replace(/S/g,f)).replace(/D/g,d),m=new RegExp(p,"gm"),r.replace(m,function(r){if(!l)switch(n){case 0:if(r===a){i+="",u();break}if(r===t){n=1;break}if(/^(\r\n|\n|\r)$/.test(r)){u(),c();break}i+=r,n=3;break;case 1:if(r===t){n=2;break}i+=r,n=1;break;case 2:if(r===t){i+=r,n=1;break}if(r===a){u();break}if(/^(\r\n|\n|\r)$/.test(r)){u(),c();break}throw new Error("CSVDataError: Illegal State [Row:"+e.state.rowNum+"][Col:"+e.state.colNum+"]");case 3:if(r===a){u();break}if(/^(\r\n|\n|\r)$/.test(r)){u(),c();break}if(r===t)throw new Error("CSVDataError: Illegal Quote [Row:"+e.state.rowNum+"][Col:"+e.state.colNum+"]");throw new Error("CSVDataError: Illegal Data [Row:"+e.state.rowNum+"][Col:"+e.state.colNum+"]");default:throw new Error("CSVDataError: Unknown State [Row:"+e.state.rowNum+"][Col:"+e.state.colNum+"]")}}),0!==o.length&&(u(),c()),s},splitLines:function(e,a){if(e){var t=(a=a||{}).separator||r.csv.defaults.separator,s=a.delimiter||r.csv.defaults.delimiter;a.state=a.state||{},a.state.rowNum||(a.state.rowNum=1);var o=[],n=0,i="",l=!1,c=RegExp.escape(t),u=RegExp.escape(s),f=/(D|S|\n|\r|[^DS\r\n]+)/,d=f.source;return d=(d=d.replace(/S/g,c)).replace(/D/g,u),f=new RegExp(d,"gm"),e.replace(f,function(r){if(!l)switch(n){case 0:if(r===t){i+=r,n=0;break}if(r===s){i+=r,n=1;break}if("\n"===r){m();break}if(/^\r$/.test(r))break;i+=r,n=3;break;case 1:if(r===s){i+=r,n=2;break}i+=r,n=1;break;case 2:var e=i.substr(i.length-1);if(r===s&&e===s){i+=r,n=1;break}if(r===t){i+=r,n=0;break}if("\n"===r){m();break}if("\r"===r)break;throw new Error("CSVDataError: Illegal state [Row:"+a.state.rowNum+"]");case 3:if(r===t){i+=r,n=0;break}if("\n"===r){m();break}if("\r"===r)break;if(r===s)throw new Error("CSVDataError: Illegal quote [Row:"+a.state.rowNum+"]");throw new Error("CSVDataError: Illegal state [Row:"+a.state.rowNum+"]");default:throw new Error("CSVDataError: Unknown state [Row:"+a.state.rowNum+"]")}}),""!==i&&m(),o}function m(){if(n=0,a.start&&a.state.rowNum=a.end&&(l=!0),a.state.rowNum++}},parseEntry:function(r,e){var a=e.separator,t=e.delimiter;e.state.rowNum||(e.state.rowNum=1),e.state.colNum||(e.state.colNum=1);var s=[],o=0,n="";function i(){if(void 0===e.onParseValue)s.push(n);else{var r=e.onParseValue(n,e.state);!1!==r&&s.push(r)}n="",o=0,e.state.colNum++}if(!e.match){var l=RegExp.escape(a),c=RegExp.escape(t),u=/(D|S|\n|\r|[^DS\r\n]+)/.source;u=(u=u.replace(/S/g,l)).replace(/D/g,c),e.match=new RegExp(u,"gm")}return r.replace(e.match,function(r){switch(o){case 0:if(r===a){n+="",i();break}if(r===t){o=1;break}if("\n"===r||"\r"===r)break;n+=r,o=3;break;case 1:if(r===t){o=2;break}n+=r,o=1;break;case 2:if(r===t){n+=r,o=1;break}if(r===a){i();break}if("\n"===r||"\r"===r)break;throw new Error("CSVDataError: Illegal State [Row:"+e.state.rowNum+"][Col:"+e.state.colNum+"]");case 3:if(r===a){i();break}if("\n"===r||"\r"===r)break;if(r===t)throw new Error("CSVDataError: Illegal Quote [Row:"+e.state.rowNum+"][Col:"+e.state.colNum+"]");throw new Error("CSVDataError: Illegal Data [Row:"+e.state.rowNum+"][Col:"+e.state.colNum+"]");default:throw new Error("CSVDataError: Unknown State [Row:"+e.state.rowNum+"][Col:"+e.state.colNum+"]")}}),i(),s}},helpers:{collectPropertyNames:function(r){var e=[],a=[],t=[];for(e in r)for(a in r[e])r[e].hasOwnProperty(a)&&t.indexOf(a)<0&&"function"!=typeof r[e][a]&&t.push(a);return t}},toArray:function(e,a,t){a=void 0!==a?a:{};var s={};s.callback=void 0!==t&&"function"==typeof t&&t,s.separator="separator"in a?a.separator:r.csv.defaults.separator,s.delimiter="delimiter"in a?a.delimiter:r.csv.defaults.delimiter;var o=void 0!==a.state?a.state:{};a={delimiter:s.delimiter,separator:s.separator,onParseEntry:a.onParseEntry,onParseValue:a.onParseValue,state:o};var n=r.csv.parsers.parseEntry(e,a);if(!s.callback)return n;s.callback("",n)},toArrays:function(e,a,t){a=void 0!==a?a:{};var s={};s.callback=void 0!==t&&"function"==typeof t&&t,s.separator="separator"in a?a.separator:r.csv.defaults.separator,s.delimiter="delimiter"in a?a.delimiter:r.csv.defaults.delimiter;var o;if(void 0!==(a={delimiter:s.delimiter,separator:s.separator,onPreParse:a.onPreParse,onParseEntry:a.onParseEntry,onParseValue:a.onParseValue,onPostParse:a.onPostParse,start:a.start,end:a.end,state:{rowNum:1,colNum:1}}).onPreParse&&a.onPreParse(e,a.state),o=r.csv.parsers.parse(e,a),void 0!==a.onPostParse&&a.onPostParse(o,a.state),!s.callback)return o;s.callback("",o)},toObjects:function(e,a,t){a=void 0!==a?a:{};var s={};s.callback=void 0!==t&&"function"==typeof t&&t,s.separator="separator"in a?a.separator:r.csv.defaults.separator,s.delimiter="delimiter"in a?a.delimiter:r.csv.defaults.delimiter,s.headers="headers"in a?a.headers:r.csv.defaults.headers,a.start="start"in a?a.start:1,s.headers&&a.start++,a.end&&s.headers&&a.end++;var o,n=[];a={delimiter:s.delimiter,separator:s.separator,onPreParse:a.onPreParse,onParseEntry:a.onParseEntry,onParseValue:a.onParseValue,onPostParse:a.onPostParse,start:a.start,end:a.end,state:{rowNum:1,colNum:1},match:!1,transform:a.transform};var i={delimiter:s.delimiter,separator:s.separator,start:1,end:1,state:{rowNum:1,colNum:1}};void 0!==a.onPreParse&&a.onPreParse(e,a.state);var l=r.csv.parsers.splitLines(e,i),c=r.csv.toArray(l[0],a);o=r.csv.parsers.splitLines(e,a),a.state.colNum=1,a.state.rowNum=c?2:1;for(var u=0,f=o.length;u-1&&(u=u.replace(new RegExp(s.delimiter,"g"),s.delimiter+s.delimiter));var f="\n|\r|S|D";f=(f=f.replace("S",s.separator)).replace("D",s.delimiter),u.search(f)>-1&&(u=s.delimiter+u+s.delimiter),n.push(u)}c+=n.join(s.separator)+"\r\n"}if(!s.callback)return c;s.callback("",c)},fromObjects:function(e,a,t){a=void 0!==a?a:{};var s={};if(s.callback=void 0!==t&&"function"==typeof t&&t,s.separator="separator"in a?a.separator:r.csv.defaults.separator,s.delimiter="delimiter"in a?a.delimiter:r.csv.defaults.delimiter,s.headers="headers"in a?a.headers:r.csv.defaults.headers,s.sortOrder="sortOrder"in a?a.sortOrder:"declare",s.manualOrder="manualOrder"in a?a.manualOrder:[],s.transform=a.transform,"string"==typeof s.manualOrder&&(s.manualOrder=r.csv.toArray(s.manualOrder,s)),void 0!==s.transform){var o,n=e;for(e=[],o=0;o0){var l=[].concat(s.manualOrder);for(u=0;uPercent of Income:2%'], + ['Alabama',47,'Median Household Income:$47221
Percent of Income:3%'], + ['Arkansas',44,'Median Household Income $45907
Percent of Income:3%'], + ['Arizona',44,'Median Household Income:$57100
Percent of Income:2%'], + ['California',46,'Median Household Income:$66637
Percent of Income:2%'], + ['Colorado',52,'Median Household Income:$70566
Percent of Income:2%'], + ['Connecticut',54,'Median Household Income:$75923
Percent of Income:2%'], + ['Distric of Columbia',51,'Median Household Income:$70982
Percent of Income:2%'], + ['Delaware',47,'Median Household Income:$58046
Percent of Income:3%'], + ['Florida',42,'Median Household Income:$51176
Percent of Income:3%'], + ['Georgia',49,'Median Household Income:$53527
Percent of Income:3%'], + ['Hawaii',55,'Median Household Income:$53527
Percent of Income:1%'], + ['Iowa',54,'Median Household Income:$53527
Percent of Income:2%'], + ['Idaho',48,'Median Household Income:$56564
Percent of Income:2%'], + ['Illinois',51,'Median Household Income:$56564
Percent of Income:2%'], + ['Indiana', 52,'Median Household Income:$56094
Percent of Income:2%'], + ['Kansas',53,'Median Household Income:$56810
Percent of Income:2%'], + ['Kentucky',44,'Median Household Income:$45369
Percent of Income:3%'], + ['Lousiana',42,'Median Household Income:$42196
Percent of Income:3%'], + ['Massachussetts',54,'Median Household Income:$72266
Percent of Income:2%'], + ['Maryland',54,'Median Household Income:$73760
Percent of Income:2%'], + ['Maine',49,'Median Household Income:$50856
Percent of Income:3%'], + ['Michigan',51,'Median Household Income:$57091
Percent of Income:2%'], + ['Minnesota',55,'Median Household Income:$70218
Percent of Income:2%'], + ['Missouri',51,'Median Household Income:$70218
Percent of Income:2%'], + ['Mississippi',42,'Median Household Income:$41099
Percent of Income:2%'], + ['Montana',43,'Median Household Income:$57075
Percent of Income:2%'], + ['North Carolina',45,'Median Household Income:$53764
Percent of Income:2%'], + ['North Dakota',55,'Median Household Income:$60184
Percent of Income:2%'], + ['Nebraska',55,'Median Household Income:$59374
Percent of Income:2%'], + ['New Hampshire',58,'Median Household Income:$76260
Percent of Income:2%'], + ['New Jersey',55,'Median Household Income:$68468
Percent of Income:3%'], + ['New Mexico',36,'Median Household Income:$48451
Percent of Income:3%'], + ['Nevada',50,'Median Household Income:$55431
Percent of Income:2%'], + ['New York',50,'Median Household Income:$61437
Percent of Income:2%'], + ['Ohio',51,'Median Household Income:$53985
Percent of Income:2%'], + ['Oklahoma',48,'Median Household Income:$50943
Percent of Income:2%'], + ['Oregon',46,'Median Household Income:$59135
Percent of Income:2%'], + ['Pennsylvania',53,'Median Household Income:$60979
Percent of Income:2%'], + ['Rhode Island',51,'Median Household Income:$61528
Percent of Income:3%'], + ['South Carolina',46,'Median Household Income:$54336
Percent of Income:3%'], + ['South Dakota',49,'Median Household Income:$57450
Percent of Income:2%'], + ['Tennessee',46,'Median Household Income:$51344
Percent of Income:2%'], + ['Texas',49,'Median Household Income:$58146
Percent of Income:2%'], + ['Utah',60,'Median Household Income:$67481
Percent of Income:2%'], + ['Virginia',55,'Median Household Income:$66451
Percent of Income:2%'], + ['Vermont',47,'Median Household Income:$60837
Percent of Income:2%'], + ['Washington',49,'Median Household Income:$60837
Percent of Income:1%'], + ['Wisconsin',56,'Median Household Income:$59817
Percent of Income:2%'], + ['West Virginia',43,'Median Household Income:$44354
Percent of Income:3%'], + ['Wyoming',55,'Median Household Income:$57829
Percent of Income:3%'], + + + ]); + + var options = { + region: 'US', + resolution:'provinces', + tooltip: { + isHtml: true}, + }; + + var chart = new google.visualization.GeoChart(document.getElementById('regions_div2')); + + chart.draw(data, options); + } + + +//Using Highcharts to create pies +// women 19-27 data +Highcharts.chart('women_pieChart1', { + chart: { + type: 'pie', + options3d: { + enabled: true, + alpha: 45 + } + }, + title: { + text: 'State of preparedness of women' + }, + subtitle: { + text: 'ages 19-27' + }, + plotOptions: { + pie: { + innerSize: 10, + depth: 45 + } + }, + series: [{ + name: 'percent value', + data: [ + ['Ready', 0.8], + ['Somewhat Ready', 0.33], + ['Not Ready', 0.59] + ] + }] +}); + +// women 28-36 data +Highcharts.chart('women_pieChart2', { + chart: { + type: 'pie', + options3d: { + enabled: true, + alpha: 45 + } + }, + title: { + text: 'State of preparedness of women' + }, + subtitle: { + text: 'ages 28-36' + }, + plotOptions: { + pie: { + innerSize: 10, + depth: 45 + } + }, + series: [{ + name: 'percent value', + data: [ + ['Ready', 0.18], + ['Somewhat Ready', 0.53], + ['Not Ready', 0.29] + ] + }] +}); + +// men 19-27 data +Highcharts.chart('men_pieChart1', { + chart: { + type: 'pie', + options3d: { + enabled: true, + alpha: 45 + } + }, + title: { + text: 'State of preparedness of men' + }, + subtitle: { + text: 'ages 19-27' + }, + plotOptions: { + pie: { + innerSize: 10, + depth: 45 + } + }, + series: [{ + name: 'percent value', + // men 19-27 data + data: [ + ['Ready', 0.04], + ['Somewhat Ready', 0.33], + ['Not Ready', 0.63] + ] + }] +}); + +// men 28-36 data +Highcharts.chart('men_pieChart2', { + chart: { + type: 'pie', + options3d: { + enabled: true, + alpha: 45 + } + }, + title: { + text: 'State of preparedness of women' + }, + subtitle: { + text: 'ages 28-36' + }, + plotOptions: { + pie: { + innerSize: 10, + depth: 45 + } + }, + series: [{ + name: 'percent value', + // men 28-36 data + data: [ + ['Ready', 0.12], + ['Somewhat Ready', 0.36], + ['Not Ready', 0.52] + ] + }] +}); + + +// women 19-27 data +Highcharts.chart('women_pieChart1', { + chart: { + type: 'pie', + options3d: { + enabled: true, + alpha: 45 + } + }, + title: { + text: 'State of preparedness of women' + }, + subtitle: { + text: 'ages 19-27' + }, + plotOptions: { + pie: { + innerSize: 10, + depth: 45 + } + }, + series: [{ + name: 'percent value', + data: [ + ['Ready', 0.8], + ['Somewhat Ready', 0.33], + ['Not Ready', 0.59] + ] + }] +}); + +// women 28-36 data + +Highcharts.chart('women_pieChart2', { + chart: { + type: 'pie', + options3d: { + enabled: true, + alpha: 45 + } + }, + title: { + text: 'State of preparedness of women' + }, + subtitle: { + text: 'ages 28-36' + }, + plotOptions: { + pie: { + innerSize: 10, + depth: 45 + } + }, + series: [{ + name: 'percent value', + data: [ + ['Ready', 0.18], + ['Somewhat Ready', 0.53], + ['Not Ready', 0.29] + ] + }] +}); + +// men 19-27 data +Highcharts.chart('men_pieChart1', { + chart: { + type: 'pie', + options3d: { + enabled: true, + alpha: 45 + } + }, + title: { + text: 'State of preparedness of men' + }, + subtitle: { + text: 'ages 19-27' + }, + plotOptions: { + pie: { + innerSize: 10, + depth: 45 + } + }, + series: [{ + name: 'percent value', + // men 19-27 data + data: [ + ['Ready', 0.04], + ['Somewhat Ready', 0.33], + ['Not Ready', 0.63] + ] + }] +}); + +// men 28-36 data +Highcharts.chart('men_pieChart2', { + chart: { + type: 'pie', + options3d: { + enabled: true, + alpha: 45 + } + }, + title: { + text: 'State of preparedness of women' + }, + subtitle: { + text: 'ages 28-36' + }, + plotOptions: { + pie: { + innerSize: 10, + depth: 45 + } + }, + series: [{ + name: 'percent value', + // men 28-36 data + data: [ + ['Ready', 0.12], + ['Somewhat Ready', 0.36], + ['Not Ready', 0.52] + ] + }] +}); From a3384a22a1364a7276707715b2834879c6127d84 Mon Sep 17 00:00:00 2001 From: blue0knight Date: Fri, 30 Mar 2018 17:48:23 -0400 Subject: [PATCH 2/5] added method 3 --- index.html | 21 +++++++++++++++- js/main.js | 70 ++++++++++++++++++++++++++++-------------------------- 2 files changed, 56 insertions(+), 35 deletions(-) diff --git a/index.html b/index.html index 7d9ac90..95de56a 100644 --- a/index.html +++ b/index.html @@ -51,7 +51,26 @@

Region GeoChart Stats

- + + +
+
+
+

Region GeoChart Stats + Method 3 +

+

(data pulled from csv file
on project folder.

+
+
+
+ +
+
+
+
+
+
+
diff --git a/js/main.js b/js/main.js index b170cc8..b8abd8b 100644 --- a/js/main.js +++ b/js/main.js @@ -1,42 +1,44 @@ -//Method 1 from csv// -//not getting dimension // - -// google.charts.load('current', { -// callback: function () { -// $.get("data/data-states.csv", function(csvString) { -// var csvData = $.csv.toArrays(csvString, {onParseValue: $.csv.hooks.castToScalar}); +google.charts.load('current', { + callback: function () { + $.get("/data-states.csv", function(csvString) { + var csvData = $.csv.toArrays(csvString, {onParseValue: $.csv.hooks.castToScalar}); -// var data = new google.visualization.arrayToDataTable(csvData); + var data = new google.visualization.arrayToDataTable(csvData); -// var chart = new google.visualization.GeoChart(document.getElementById('regions_div')); + var chart = new google.visualization.GeoChart(document.getElementById('regions_div')); -// var options = { -// region: 'US', -// resolution:'provinces', -// dimensions: 'Percent of Population', -// colors: ['e8b9ab','#e95122'], -// tooltip: { -// isHtml: true}, -// } + var options = { + region: 'US', + resolution:'provinces', + colors: ['#00FF00','#0000FF'], + tooltip: { + isHtml: true}, + } -// var view = new google.visualization.DataView(data); -// view.setColumns([0, { -// type: 'string', -// label: 'Total Staff', -// calc: function (dt, row) { -// return { -// v: dt.getValue(row, 1), -// f: 'State:' + dt.getFormattedValue(row, 1) + ' Percent of Population: ' + dt.getFormattedValue(row, 2) + ' Median Household Income: ' + dt.getFormattedValue(row, 3) + ' Percent of Income: ' + dt.getFormattedValue(row, 4) -// } -// } -// }]); + var view = new google.visualization.DataView(data); + view.setColumns([0, { + type: 'string', + label: 'Percent of Population', + calc: function (dt, row) { + return { + v: dt.getValue(row, 1), + f: 'State: ' + + dt.getFormattedValue(row, 1) + ' Percent of Population: ' + + dt.getFormattedValue(row, 2) + ' Median Household Income: ' + + dt.getFormattedValue(row, 3) + ' Percent of Income: ' + + dt.getFormattedValue(row, 4) + } + } + }]); -// chart.draw(view, options); -// }); -// }, -// packages: ['geochart'] -// }); + chart.draw(view, options); + }); + }, + packages: ['geochart'] + }); + + //Method 2 ajax // @@ -58,7 +60,7 @@ function drawStatesMap() { url: "data/state.json", dataType: "JSON" }).done(function(data) { - var statesArray = [["State", "Median Household Income" +"Percent of Income"]]; + var statesArray = [["State", "Median Household Income:" +"" +"Percent of Income"]]; $.each(data.states, function() { var stateitem = [this.State, this[dimension]]; From 950546f87cbab0feb51dc0ecd4978bbaeb2a1363 Mon Sep 17 00:00:00 2001 From: blue0knight Date: Wed, 4 Apr 2018 11:24:57 -0400 Subject: [PATCH 3/5] used d3 piecharts instead of highcharts --- css/styles.css | 63 ++++++++++++++++--- data/men19to27.csv | 4 ++ data/men28to36.csv | 4 ++ data/women19to27.csv | 4 ++ data/women28to36.csv | 4 ++ index.html | 138 ++++++++++++++++++++++++++---------------- js/men19to27.js | 140 +++++++++++++++++++++++++++++++++++++++++++ js/men28to36.js | 139 ++++++++++++++++++++++++++++++++++++++++++ js/women19to27.js | 139 ++++++++++++++++++++++++++++++++++++++++++ js/women28to36.js | 139 ++++++++++++++++++++++++++++++++++++++++++ 10 files changed, 715 insertions(+), 59 deletions(-) create mode 100644 data/men19to27.csv create mode 100644 data/men28to36.csv create mode 100644 data/women19to27.csv create mode 100644 data/women28to36.csv create mode 100644 js/men19to27.js create mode 100644 js/men28to36.js create mode 100644 js/women19to27.js create mode 100644 js/women28to36.js diff --git a/css/styles.css b/css/styles.css index 64148a1..9b5cad3 100644 --- a/css/styles.css +++ b/css/styles.css @@ -9,6 +9,10 @@ body { padding: 0; } +span { + display: block;; +} + #hero { background: linear-gradient( rgba(255,255,255,.5), @@ -30,7 +34,7 @@ width: 25%; margin: 45px auto; } -h2 > span { +h2 > span, h4 > span { display: block; } @@ -46,10 +50,55 @@ h2 > span { background-color: lightgrey; } +/* for D# charts styling */ + +.arc text { + font: 10px sans-serif; + text-anchor: middle; +} + +.arc path { + stroke: #fff; +} + +.arc2 text { + font: 10px sans-serif; + text-anchor: middle; +} -/*.google-visualization-tooltip{ - position:fixed !important; - bottom:10000px !important; - left:50% !important; - margin:500px 0 0 0 !important; - }*/ \ No newline at end of file +.arc2 path { + stroke: #fff; +} + +#men_pieChart1, #men_pieChart2, #women_pieChart1, #women_pieChart2 { + height: 360px; + margin: 0 auto; + position: relative; + width: 360px; +} + +.tooltipMen1, .tooltipMen2, .tooltipWomen1, .tooltipWomen2 { + background: #eee; + box-shadow: 0 0 5px #999999; + color: #333; + display: none; + font-size: 12px; + left: 130px; + padding: 10px; + position: absolute; + text-align: center; + top: 95px; + width: 80px; + z-index: 10; +} +.legend { + font-size: 12px; +} +rect { + cursor: pointer; + stroke-width: 2; +} +rect.disabled { + fill: transparent !important; +} + diff --git a/data/men19to27.csv b/data/men19to27.csv new file mode 100644 index 0000000..f3ed008 --- /dev/null +++ b/data/men19to27.csv @@ -0,0 +1,4 @@ +Preparedness,PercentValue +ready,4 +somewhat ready,33 +not ready,63 \ No newline at end of file diff --git a/data/men28to36.csv b/data/men28to36.csv new file mode 100644 index 0000000..6abe520 --- /dev/null +++ b/data/men28to36.csv @@ -0,0 +1,4 @@ +Preparedness,PercentValue +ready,12 +somewhat ready,36 +not ready,52 \ No newline at end of file diff --git a/data/women19to27.csv b/data/women19to27.csv new file mode 100644 index 0000000..5417b4c --- /dev/null +++ b/data/women19to27.csv @@ -0,0 +1,4 @@ +Preparedness,PercentValue +ready,8 +somewhat ready,33 +not ready,59 \ No newline at end of file diff --git a/data/women28to36.csv b/data/women28to36.csv new file mode 100644 index 0000000..b4e0278 --- /dev/null +++ b/data/women28to36.csv @@ -0,0 +1,4 @@ +Preparedness,PercentValue +ready,18 +somewhat ready,53 +not ready,29 \ No newline at end of file diff --git a/index.html b/index.html index 95de56a..6bbc988 100644 --- a/index.html +++ b/index.html @@ -72,58 +72,86 @@

Region GeoChart Stats

-
- -
-
-
-

State of Preparedness by Gender - and Age Group -

-

(click button to toggle between stats)

-
-
+
+ +
+
+
+

State of Preparedness by Gender + and Age Group +

+

(click button to toggle between stats)

+
-
-
- -
-
- -
-
- -
-
-
-
+
+
+
+ +
+
+ + +
+
+ + + +
+

State of Preparedness of Women + Ages 19 to 27

+

(data visualization using D3 piecharts.Data from attached csv file on project folder)

+
-
-
-
- -
-
- -
-
-
-
+ +
+

State of Preparedness of Women + Ages 28 to 36

+

(data visualization using D3 piecharts.Data from attached csv file on project folder)

+ +
+
+
+
+
+ +
+ + +
+
+ + + +
+

State of Preparedness of Men + Ages 19 to 27

+

((data visualization using D3 piecharts.Data from attached csv file on project folder)

+
-
-
-
-
- -
+ +
+

State of Preparedness of Men + Ages 28 to 36

+

(data visualization using D3 piecharts.Data from attached csv file on project folder)

+ +
+
+
+
+ + + + + +
@@ -131,12 +159,18 @@

State of Preparedness by Gender - - - + + + + + + + + + diff --git a/js/men19to27.js b/js/men19to27.js new file mode 100644 index 0000000..bf18cc1 --- /dev/null +++ b/js/men19to27.js @@ -0,0 +1,140 @@ + +(function(d3) { +'use strict'; + +var width = 360; +var height = 360; +var radius = Math.min(width, height) / 2; +var donutWidth = 75; +var legendRectSize = 18; +var legendSpacing = 4; + +var color = d3.scaleOrdinal(d3.schemeCategory10); + +var svg = d3.select('#men_pieChart1') + .append('svg') + .attr('width', width) + .attr('height', height) + .append('g') + .attr('transform', 'translate(' + (width / 2) + + ',' + (height / 2) + ')'); + +var arc = d3.arc() + .innerRadius(radius - donutWidth) + .outerRadius(radius); + +var pie = d3.pie() + .value(function(d) { return d.PercentValue; }) + .sort(null); + +var tooltip = d3.select('#men_pieChart1') + .append('div') + .attr('class', 'tooltipMen1'); + +tooltip.append('div') + .attr('class', 'Preparedness'); + +// tooltip.append('div') +// .attr('class', 'PercentValue'); + +tooltip.append('div') + .attr('class', 'percent'); + +d3.csv('data/men19to27.csv', function(error, dataset) { + dataset.forEach(function(d) { + d.PercentValue = +d.PercentValue; + d.enabled = true; // NEW + }); + + var path = svg.selectAll('path') + .data(pie(dataset)) + .enter() + .append('path') + .attr('d', arc) + .attr('fill', function(d, i) { + return color(d.data.Preparedness); + }) // UPDATED (removed semicolon) + .each(function(d) { this._current = d; }); // NEW + + path.on('mouseover', function(d) { + var total = d3.sum(dataset.map(function(d) { + return (d.enabled) ? d.PercentValue : 0; // UPDATED + })); + var percent = Math.round(1000 * d.data.PercentValue / total) / 10; + tooltip.select('.Preparedness').html(d.data.Preparedness); + tooltip.select('.PercentValue').html(d.data.PercentValue); + tooltip.select('.percent').html(percent + '%'); + tooltip.style('display', 'block'); + }); + + path.on('mouseout', function() { + tooltip.style('display', 'none'); + }); + + // OPTIONAL + // path.on('mousemove', function(d) { + // tooltip.style('top', (d3.event.pageY + 10) + 'px') + // .style('left', (d3.event.pageX + 10) + 'px'); + // }); + + + var legend = svg.selectAll('.legend') + .data(color.domain()) + .enter() + .append('g') + .attr('class', 'legend') + .attr('transform', function(d, i) { + var height = legendRectSize + legendSpacing; + var offset = height * color.domain().length / 2; + var horz = -2 * legendRectSize; + var vert = i * height - offset; + return 'translate(' + horz + ',' + vert + ')'; + }); + + legend.append('rect') + .attr('width', legendRectSize) + .attr('height', legendRectSize) + .style('fill', color) + .style('stroke', color) // UPDATED (removed semicolon) + .on('click', function(Preparedness) { // NEW + var rect = d3.select(this); // NEW + var enabled = true; // NEW + var totalEnabled = d3.sum(dataset.map(function(d) { // NEW + return (d.enabled) ? 1 : 0; // NEW + })); // NEW + + if (rect.attr('class') === 'disabled') { // NEW + rect.attr('class', ''); // NEW + } else { // NEW + if (totalEnabled < 2) return; // NEW + rect.attr('class', 'disabled'); // NEW + enabled = false; // NEW + } // NEW + + pie.value(function(d) { // NEW + if (d.Preparedness === Preparedness) d.enabled = enabled; // NEW + return (d.enabled) ? d.PercentValue : 0; // NEW + }); // NEW + + path = path.data(pie(dataset)); // NEW + + path.transition() // NEW + .duration(750) // NEW + .attrTween('d', function(d) { // NEW + var interpolate = d3.interpolate(this._current, d); // NEW + this._current = interpolate(0); // NEW + return function(t) { // NEW + return arc(interpolate(t)); // NEW + }; // NEW + }); // NEW + }); // NEW + + legend.append('text') + .attr('x', legendRectSize + legendSpacing) + .attr('y', legendRectSize - legendSpacing) + .text(function(d) { return d; }); + +}); + +})(window.d3); + \ No newline at end of file diff --git a/js/men28to36.js b/js/men28to36.js new file mode 100644 index 0000000..71ba47e --- /dev/null +++ b/js/men28to36.js @@ -0,0 +1,139 @@ + + (function(d3) { + 'use strict'; + + var width = 360; + var height = 360; + var radius = Math.min(width, height) / 2; + var donutWidth = 75; + var legendRectSize = 18; + var legendSpacing = 4; + + var color = d3.scaleOrdinal(d3.schemeCategory10); + + var svg = d3.select('#men_pieChart2') + .append('svg') + .attr('width', width) + .attr('height', height) + .append('g') + .attr('transform', 'translate(' + (width / 2) + + ',' + (height / 2) + ')'); + + var arc = d3.arc() + .innerRadius(radius - donutWidth) + .outerRadius(radius); + + var pie = d3.pie() + .value(function(d) { return d.PercentValue; }) + .sort(null); + + var tooltip = d3.select('#men_pieChart2') + .append('div') + .attr('class', 'tooltipMen2'); + + tooltip.append('div') + .attr('class', 'Preparedness'); + + // tooltip.append('div') + // .attr('class', 'PercentValue'); + + tooltip.append('div') + .attr('class', 'percent'); + + d3.csv('data/men28to36.csv', function(error, dataset) { + dataset.forEach(function(d) { + d.PercentValue = +d.PercentValue; + d.enabled = true; // NEW + }); + + var path = svg.selectAll('path') + .data(pie(dataset)) + .enter() + .append('path') + .attr('d', arc) + .attr('fill', function(d, i) { + return color(d.data.Preparedness); + }) // UPDATED (removed semicolon) + .each(function(d) { this._current = d; }); // NEW + + path.on('mouseover', function(d) { + var total = d3.sum(dataset.map(function(d) { + return (d.enabled) ? d.PercentValue : 0; // UPDATED + })); + var percent = Math.round(1000 * d.data.PercentValue / total) / 10; + tooltip.select('.Preparedness').html(d.data.Preparedness); + tooltip.select('.PercentValue').html(d.data.PercentValue); + tooltip.select('.percent').html(percent + '%'); + tooltip.style('display', 'block'); + }); + + path.on('mouseout', function() { + tooltip.style('display', 'none'); + }); + + /* OPTIONAL + path.on('mousemove', function(d) { + tooltip.style('top', (d3.event.pageY + 10) + 'px') + .style('left', (d3.event.pageX + 10) + 'px'); + }); + */ + + var legend = svg.selectAll('.legend') + .data(color.domain()) + .enter() + .append('g') + .attr('class', 'legend') + .attr('transform', function(d, i) { + var height = legendRectSize + legendSpacing; + var offset = height * color.domain().length / 2; + var horz = -2 * legendRectSize; + var vert = i * height - offset; + return 'translate(' + horz + ',' + vert + ')'; + }); + + legend.append('rect') + .attr('width', legendRectSize) + .attr('height', legendRectSize) + .style('fill', color) + .style('stroke', color) // UPDATED (removed semicolon) + .on('click', function(Preparedness) { // NEW + var rect = d3.select(this); // NEW + var enabled = true; // NEW + var totalEnabled = d3.sum(dataset.map(function(d) { // NEW + return (d.enabled) ? 1 : 0; // NEW + })); // NEW + + if (rect.attr('class') === 'disabled') { // NEW + rect.attr('class', ''); // NEW + } else { // NEW + if (totalEnabled < 2) return; // NEW + rect.attr('class', 'disabled'); // NEW + enabled = false; // NEW + } // NEW + + pie.value(function(d) { // NEW + if (d.Preparedness === Preparedness) d.enabled = enabled; // NEW + return (d.enabled) ? d.PercentValue : 0; // NEW + }); // NEW + + path = path.data(pie(dataset)); // NEW + + path.transition() // NEW + .duration(750) // NEW + .attrTween('d', function(d) { // NEW + var interpolate = d3.interpolate(this._current, d); // NEW + this._current = interpolate(0); // NEW + return function(t) { // NEW + return arc(interpolate(t)); // NEW + }; // NEW + }); // NEW + }); // NEW + + legend.append('text') + .attr('x', legendRectSize + legendSpacing) + .attr('y', legendRectSize - legendSpacing) + .text(function(d) { return d; }); + + }); + + })(window.d3); diff --git a/js/women19to27.js b/js/women19to27.js new file mode 100644 index 0000000..8980bef --- /dev/null +++ b/js/women19to27.js @@ -0,0 +1,139 @@ + +(function(d3) { + 'use strict'; + + var width = 360; + var height = 360; + var radius = Math.min(width, height) / 2; + var donutWidth = 75; + var legendRectSize = 18; + var legendSpacing = 4; + + var color = d3.scaleOrdinal(d3.schemeCategory20); + + var svg = d3.select('#women_pieChart1') + .append('svg') + .attr('width', width) + .attr('height', height) + .append('g') + .attr('transform', 'translate(' + (width / 2) + + ',' + (height / 2) + ')'); + + var arc = d3.arc() + .innerRadius(radius - donutWidth) + .outerRadius(radius); + + var pie = d3.pie() + .value(function(d) { return d.PercentValue; }) + .sort(null); + + var tooltip = d3.select('#women_pieChart1') + .append('div') + .attr('class', 'tooltipWomen1'); + + tooltip.append('div') + .attr('class', 'Preparedness'); + + // tooltip.append('div') + // .attr('class', 'PercentValue'); + + tooltip.append('div') + .attr('class', 'percent'); + + d3.csv('data/women19to27.csv', function(error, dataset) { + dataset.forEach(function(d) { + d.PercentValue = +d.PercentValue; + d.enabled = true; // NEW + }); + + var path = svg.selectAll('path') + .data(pie(dataset)) + .enter() + .append('path') + .attr('d', arc) + .attr('fill', function(d, i) { + return color(d.data.Preparedness); + }) // UPDATED (removed semicolon) + .each(function(d) { this._current = d; }); // NEW + + path.on('mouseover', function(d) { + var total = d3.sum(dataset.map(function(d) { + return (d.enabled) ? d.PercentValue : 0; // UPDATED + })); + var percent = Math.round(1000 * d.data.PercentValue / total) / 10; + tooltip.select('.Preparedness').html(d.data.Preparedness); + tooltip.select('.PercentValue').html(d.data.PercentValue); + tooltip.select('.percent').html(percent + '%'); + tooltip.style('display', 'block'); + }); + + path.on('mouseout', function() { + tooltip.style('display', 'none'); + }); + + // OPTIONAL + // path.on('mousemove', function(d) { + // tooltip.style('top', (d3.event.pageY + 10) + 'px') + // .style('left', (d3.event.pageX + 10) + 'px'); + // }); + + + var legend = svg.selectAll('.legend') + .data(color.domain()) + .enter() + .append('g') + .attr('class', 'legend') + .attr('transform', function(d, i) { + var height = legendRectSize + legendSpacing; + var offset = height * color.domain().length / 2; + var horz = -2 * legendRectSize; + var vert = i * height - offset; + return 'translate(' + horz + ',' + vert + ')'; + }); + + legend.append('rect') + .attr('width', legendRectSize) + .attr('height', legendRectSize) + .style('fill', color) + .style('stroke', color) // UPDATED (removed semicolon) + .on('click', function(Preparedness) { // NEW + var rect = d3.select(this); // NEW + var enabled = true; // NEW + var totalEnabled = d3.sum(dataset.map(function(d) { // NEW + return (d.enabled) ? 1 : 0; // NEW + })); // NEW + + if (rect.attr('class') === 'disabled') { // NEW + rect.attr('class', ''); // NEW + } else { // NEW + if (totalEnabled < 2) return; // NEW + rect.attr('class', 'disabled'); // NEW + enabled = false; // NEW + } // NEW + + pie.value(function(d) { // NEW + if (d.Preparedness === Preparedness) d.enabled = enabled; // NEW + return (d.enabled) ? d.PercentValue : 0; // NEW + }); // NEW + + path = path.data(pie(dataset)); // NEW + + path.transition() // NEW + .duration(750) // NEW + .attrTween('d', function(d) { // NEW + var interpolate = d3.interpolate(this._current, d); // NEW + this._current = interpolate(0); // NEW + return function(t) { // NEW + return arc(interpolate(t)); // NEW + }; // NEW + }); // NEW + }); // NEW + + legend.append('text') + .attr('x', legendRectSize + legendSpacing) + .attr('y', legendRectSize - legendSpacing) + .text(function(d) { return d; }); + + }); + +})(window.d3); diff --git a/js/women28to36.js b/js/women28to36.js new file mode 100644 index 0000000..8ccda87 --- /dev/null +++ b/js/women28to36.js @@ -0,0 +1,139 @@ + + (function(d3) { + 'use strict'; + + var width = 360; + var height = 360; + var radius = Math.min(width, height) / 2; + var donutWidth = 75; + var legendRectSize = 18; + var legendSpacing = 4; + + var color = d3.scaleOrdinal(d3.schemeCategory20); + + var svg = d3.select('#women_pieChart2') + .append('svg') + .attr('width', width) + .attr('height', height) + .append('g') + .attr('transform', 'translate(' + (width / 2) + + ',' + (height / 2) + ')'); + + var arc = d3.arc() + .innerRadius(radius - donutWidth) + .outerRadius(radius); + + var pie = d3.pie() + .value(function(d) { return d.PercentValue; }) + .sort(null); + + var tooltip = d3.select('#women_pieChart2') + .append('div') + .attr('class', 'tooltipWomen2'); + + tooltip.append('div') + .attr('class', 'Preparedness'); + + // tooltip.append('div') + // .attr('class', 'PercentValue'); + + tooltip.append('div') + .attr('class', 'percent'); + + d3.csv('data/women28to36.csv', function(error, dataset) { + dataset.forEach(function(d) { + d.PercentValue = +d.PercentValue; + d.enabled = true; // NEW + }); + + var path = svg.selectAll('path') + .data(pie(dataset)) + .enter() + .append('path') + .attr('d', arc) + .attr('fill', function(d, i) { + return color(d.data.Preparedness); + }) // UPDATED (removed semicolon) + .each(function(d) { this._current = d; }); // NEW + + path.on('mouseover', function(d) { + var total = d3.sum(dataset.map(function(d) { + return (d.enabled) ? d.PercentValue : 0; // UPDATED + })); + var percent = Math.round(1000 * d.data.PercentValue / total) / 10; + tooltip.select('.Preparedness').html(d.data.Preparedness); + tooltip.select('.PercentValue').html(d.data.PercentValue); + tooltip.select('.percent').html(percent + '%'); + tooltip.style('display', 'block'); + }); + + path.on('mouseout', function() { + tooltip.style('display', 'none'); + }); + + /* OPTIONAL + path.on('mousemove', function(d) { + tooltip.style('top', (d3.event.pageY + 10) + 'px') + .style('left', (d3.event.pageX + 10) + 'px'); + }); + */ + + var legend = svg.selectAll('.legend') + .data(color.domain()) + .enter() + .append('g') + .attr('class', 'legend') + .attr('transform', function(d, i) { + var height = legendRectSize + legendSpacing; + var offset = height * color.domain().length / 2; + var horz = -2 * legendRectSize; + var vert = i * height - offset; + return 'translate(' + horz + ',' + vert + ')'; + }); + + legend.append('rect') + .attr('width', legendRectSize) + .attr('height', legendRectSize) + .style('fill', color) + .style('stroke', color) // UPDATED (removed semicolon) + .on('click', function(Preparedness) { // NEW + var rect = d3.select(this); // NEW + var enabled = true; // NEW + var totalEnabled = d3.sum(dataset.map(function(d) { // NEW + return (d.enabled) ? 1 : 0; // NEW + })); // NEW + + if (rect.attr('class') === 'disabled') { // NEW + rect.attr('class', ''); // NEW + } else { // NEW + if (totalEnabled < 2) return; // NEW + rect.attr('class', 'disabled'); // NEW + enabled = false; // NEW + } // NEW + + pie.value(function(d) { // NEW + if (d.Preparedness === Preparedness) d.enabled = enabled; // NEW + return (d.enabled) ? d.PercentValue : 0; // NEW + }); // NEW + + path = path.data(pie(dataset)); // NEW + + path.transition() // NEW + .duration(750) // NEW + .attrTween('d', function(d) { // NEW + var interpolate = d3.interpolate(this._current, d); // NEW + this._current = interpolate(0); // NEW + return function(t) { // NEW + return arc(interpolate(t)); // NEW + }; // NEW + }); // NEW + }); // NEW + + legend.append('text') + .attr('x', legendRectSize + legendSpacing) + .attr('y', legendRectSize - legendSpacing) + .text(function(d) { return d; }); + + }); + + })(window.d3); From f28a414df757cff30c0a08a05babf0e6fd270c84 Mon Sep 17 00:00:00 2001 From: blue0knight Date: Wed, 4 Apr 2018 11:38:09 -0400 Subject: [PATCH 4/5] removed highland pie chart scripts --- js/main.js | 255 ----------------------------------------------------- 1 file changed, 255 deletions(-) diff --git a/js/main.js b/js/main.js index b8abd8b..b538eb5 100644 --- a/js/main.js +++ b/js/main.js @@ -159,258 +159,3 @@ google.setOnLoadCallback(drawStatesMap); chart.draw(data, options); } - -//Using Highcharts to create pies -// women 19-27 data -Highcharts.chart('women_pieChart1', { - chart: { - type: 'pie', - options3d: { - enabled: true, - alpha: 45 - } - }, - title: { - text: 'State of preparedness of women' - }, - subtitle: { - text: 'ages 19-27' - }, - plotOptions: { - pie: { - innerSize: 10, - depth: 45 - } - }, - series: [{ - name: 'percent value', - data: [ - ['Ready', 0.8], - ['Somewhat Ready', 0.33], - ['Not Ready', 0.59] - ] - }] -}); - -// women 28-36 data -Highcharts.chart('women_pieChart2', { - chart: { - type: 'pie', - options3d: { - enabled: true, - alpha: 45 - } - }, - title: { - text: 'State of preparedness of women' - }, - subtitle: { - text: 'ages 28-36' - }, - plotOptions: { - pie: { - innerSize: 10, - depth: 45 - } - }, - series: [{ - name: 'percent value', - data: [ - ['Ready', 0.18], - ['Somewhat Ready', 0.53], - ['Not Ready', 0.29] - ] - }] -}); - -// men 19-27 data -Highcharts.chart('men_pieChart1', { - chart: { - type: 'pie', - options3d: { - enabled: true, - alpha: 45 - } - }, - title: { - text: 'State of preparedness of men' - }, - subtitle: { - text: 'ages 19-27' - }, - plotOptions: { - pie: { - innerSize: 10, - depth: 45 - } - }, - series: [{ - name: 'percent value', - // men 19-27 data - data: [ - ['Ready', 0.04], - ['Somewhat Ready', 0.33], - ['Not Ready', 0.63] - ] - }] -}); - -// men 28-36 data -Highcharts.chart('men_pieChart2', { - chart: { - type: 'pie', - options3d: { - enabled: true, - alpha: 45 - } - }, - title: { - text: 'State of preparedness of women' - }, - subtitle: { - text: 'ages 28-36' - }, - plotOptions: { - pie: { - innerSize: 10, - depth: 45 - } - }, - series: [{ - name: 'percent value', - // men 28-36 data - data: [ - ['Ready', 0.12], - ['Somewhat Ready', 0.36], - ['Not Ready', 0.52] - ] - }] -}); - - -// women 19-27 data -Highcharts.chart('women_pieChart1', { - chart: { - type: 'pie', - options3d: { - enabled: true, - alpha: 45 - } - }, - title: { - text: 'State of preparedness of women' - }, - subtitle: { - text: 'ages 19-27' - }, - plotOptions: { - pie: { - innerSize: 10, - depth: 45 - } - }, - series: [{ - name: 'percent value', - data: [ - ['Ready', 0.8], - ['Somewhat Ready', 0.33], - ['Not Ready', 0.59] - ] - }] -}); - -// women 28-36 data - -Highcharts.chart('women_pieChart2', { - chart: { - type: 'pie', - options3d: { - enabled: true, - alpha: 45 - } - }, - title: { - text: 'State of preparedness of women' - }, - subtitle: { - text: 'ages 28-36' - }, - plotOptions: { - pie: { - innerSize: 10, - depth: 45 - } - }, - series: [{ - name: 'percent value', - data: [ - ['Ready', 0.18], - ['Somewhat Ready', 0.53], - ['Not Ready', 0.29] - ] - }] -}); - -// men 19-27 data -Highcharts.chart('men_pieChart1', { - chart: { - type: 'pie', - options3d: { - enabled: true, - alpha: 45 - } - }, - title: { - text: 'State of preparedness of men' - }, - subtitle: { - text: 'ages 19-27' - }, - plotOptions: { - pie: { - innerSize: 10, - depth: 45 - } - }, - series: [{ - name: 'percent value', - // men 19-27 data - data: [ - ['Ready', 0.04], - ['Somewhat Ready', 0.33], - ['Not Ready', 0.63] - ] - }] -}); - -// men 28-36 data -Highcharts.chart('men_pieChart2', { - chart: { - type: 'pie', - options3d: { - enabled: true, - alpha: 45 - } - }, - title: { - text: 'State of preparedness of women' - }, - subtitle: { - text: 'ages 28-36' - }, - plotOptions: { - pie: { - innerSize: 10, - depth: 45 - } - }, - series: [{ - name: 'percent value', - // men 28-36 data - data: [ - ['Ready', 0.12], - ['Somewhat Ready', 0.36], - ['Not Ready', 0.52] - ] - }] -}); From 9aa387c98b2850d3631192dfc413bb0fdc15d182 Mon Sep 17 00:00:00 2001 From: blue0knight Date: Wed, 4 Apr 2018 11:39:58 -0400 Subject: [PATCH 5/5] changed title of page --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index 6bbc988..f20a3ae 100644 --- a/index.html +++ b/index.html @@ -9,7 +9,7 @@ - GeoCharts and Highcharts2 + GeoCharts and D3 Pie Charts