Skip to content

Instantly share code, notes, and snippets.

@darthmall
Created February 9, 2013 03:05
Show Gist options
  • Save darthmall/4743663 to your computer and use it in GitHub Desktop.
Save darthmall/4743663 to your computer and use it in GitHub Desktop.
Bubble chart of highest income tax rate vs highest income tax bracket in 2012. Sized by GDP per capita.

Bubble chart of highest income tax rate vs highest income tax bracket in 2012. Sized by GDP per capita.

<!DOCTYPE html>
<meta charset="utf-8">
<link type="text/css" rel="stylesheet" href="colorbrewer.css">
<style>
body {
font-family: "Gill Sans", "Helvetica Neue", Helvetica, sans-serif;
font-size: 10px;
line-height: 1.2em;
}
.fade {
opacity: 0.1;
}
.point,
.point circle,
.point text {
-webkit-trasition: opacity 350ms ease-in-out;
}
.point circle {
fill-opacity: 0.3;
}
.point text {
display: none;
}
.point .visible {
display: block;
}
.axis .domain {
display: none;
}
.axis .title {
font-size: 12px;
text-anchor: middle;
}
.axis line {
stroke: #ddd;
}
.axis text {
fill: #ccc;
}
</style>
<body>
<div>
<label for="filter">filter:</label>
<input id="filter" type="text"/>
</div>
<script src="http://d3js.org/d3.v3.min.js"></script>
<script src="http://d3js.org/topojson.v0.min.js"></script>
<script>
var margin = {top: 10, right: 10, bottom: 40, left: 50};
var width = 960 - margin.left - margin.right,
height = 500 - margin.top - margin.bottom;
var svg = d3.select('body').append('svg')
.attr('width', width + margin.left + margin.right)
.attr('height', height + margin.top + margin.bottom)
.append('g')
.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
var x = d3.scale.linear().range([0, width]),
y = d3.scale.linear().range([height, 0]),
r = d3.scale.sqrt().range([2, 20]),
color = d3.scale.category10();
var xAxis = d3.svg.axis().scale(x).orient('bottom'),
yAxis = d3.svg.axis().scale(y).orient('left');
var format = d3.format(',g');
filter.addEventListener('input', updateFilter);
d3.json('taxes.json', function (err, data) {
data = data.rows.sort(function (a, b) { return b.income - a.income; });
x.domain(d3.extent(data, function (d) { return d.income; }));
y.domain(d3.extent(data, function (d) { return d.taxRate; }));
r.domain(d3.extent(data, function (d) { return d.gdp_per_cap; }));
var point = svg.selectAll('.point').data(data)
.enter().append('g')
.attr('class', 'point')
.attr('transform', function (d) { return 'translate(' + x(d.income) + ',' + y(d.taxRate) + ')'; });
point.append('circle')
.attr('r', function (d) { return r(d.gdp_per_cap); })
.attr('fill', function (d) { return color(d.continent); })
.on('mouseover', function (d) {
svg.selectAll('.' + d.adm0_a3).classed('visible', true);
})
.on('mouseout', function (d) {
svg.selectAll('.' + d.adm0_a3).classed('visible', false);
});
point.append('text')
.attr('class', function (d) { return d.adm0_a3; })
.attr('dx', 2)
.attr('dy', -2)
.text(function (d) { return d.name; })
svg.append('g')
.attr('class', 'x axis')
.attr('transform', 'translate(0,' + height + ')')
.call(xAxis)
.append('text')
.attr('class', 'title')
.attr('transform', 'translate(' + (width/2) + ',' + margin.bottom + ')')
.text('Minimum Income Level of Highest Tax Bracket');
svg.append('g')
.attr('class', 'y axis')
.call(yAxis)
.append('text')
.attr('class', 'title')
.attr('dy', '1em')
.attr('transform', 'translate(' + (-margin.left) + ',' + (height / 2) + ')rotate(-90)')
.text('Tax Rate of Highest Tax Bracked in 2012');
});
function updateFilter(event) {
var empty = event.target.value.length === 0,
query = new RegExp('^' + event.target.value, 'i');
svg.selectAll('.point')
.classed('fade', function (d) { return !empty && query.exec(d.name) === null; });
}
</script>
</body>
{
"rows" : [
{
"name" : "Canada",
"adm0_a3" : "CAN",
"continent" : "North America",
"oecd" : true,
"taxRate" : 0.48,
"income" : 134247,
"gdp_per_cap" : 50345.43489231263
},
{
"name" : "Swaziland",
"adm0_a3" : "SWZ",
"continent" : "Africa",
"oecd" : false,
"taxRate" : 0.33,
"income" : 12820,
"gdp_per_cap" : 3725.280897989595
},
{
"name" : "Argentina",
"adm0_a3" : "ARG",
"continent" : "Latin America",
"oecd" : false,
"taxRate" : 0.35,
"income" : 27132,
"gdp_per_cap" : 10941.958717432743
},
{
"name" : "Guatemala",
"adm0_a3" : "GTM",
"continent" : "Latin America",
"oecd" : false,
"taxRate" : 0.31,
"income" : 37288,
"gdp_per_cap" : 3178.084704352095
},
{
"name" : "Germany",
"adm0_a3" : "DEU",
"continent" : "Europe",
"oecd" : true,
"taxRate" : 0.45,
"income" : 329611,
"gdp_per_cap" : 44059.82592239108
},
{
"name" : "Spain",
"adm0_a3" : "ESP",
"continent" : "Europe",
"oecd" : true,
"taxRate" : 0.52,
"income" : 394380,
"gdp_per_cap" : 31942.9424558115
},
{
"name" : "Netherlands",
"adm0_a3" : "NLD",
"continent" : "Europe",
"oecd" : true,
"taxRate" : 0.52,
"income" : 74264,
"gdp_per_cap" : 50076.282409625725
},
{
"name" : "Tanzania",
"adm0_a3" : "TZA",
"continent" : "Africa",
"oecd" : false,
"taxRate" : 0.3,
"income" : 432,
"gdp_per_cap" : 532.32008406
},
{
"name" : "New Zealand",
"adm0_a3" : "NZL",
"continent" : "Oceana",
"oecd" : true,
"taxRate" : 0.33,
"income" : 56259,
"gdp_per_cap" : 36253.91556308364
},
{
"name" : "Yemen",
"adm0_a3" : "YEM",
"continent" : "Asia",
"oecd" : false,
"taxRate" : 0.15,
"income" : 1104,
"gdp_per_cap" : 1361.1962365148959
},
{
"name" : "Jamaica",
"adm0_a3" : "JAM",
"continent" : "Latin America",
"oecd" : false,
"taxRate" : 0.25,
"income" : 4985,
"gdp_per_cap" : 5329.543201324636
},
{
"name" : "Albania",
"adm0_a3" : "ALB",
"continent" : "Europe",
"oecd" : false,
"taxRate" : 0.1,
"income" : 275,
"gdp_per_cap" : 4029.7301800882033
},
{
"name" : "Samoa",
"adm0_a3" : "WSM",
"continent" : "Oceana",
"oecd" : false,
"taxRate" : 0.27,
"income" : 8556,
"gdp_per_cap" : 3485.413670959655
},
{
"name" : "Macau",
"adm0_a3" : "MAC",
"continent" : "Asia",
"oecd" : false,
"taxRate" : 0.12,
"income" : 52067,
"gdp_per_cap" : 65550.49819983619
},
{
"name" : "India",
"adm0_a3" : "IND",
"continent" : "Asia",
"oecd" : false,
"taxRate" : 0.3,
"income" : 18500,
"gdp_per_cap" : 1488.5128605113478
},
{
"name" : "Turkey",
"adm0_a3" : "TUR",
"continent" : "Asia",
"oecd" : true,
"taxRate" : 0.35,
"income" : 49949,
"gdp_per_cap" : 10524.004205303881
},
{
"name" : "Afghanistan",
"adm0_a3" : "AFG",
"continent" : "Asia",
"oecd" : false,
"taxRate" : 0.2,
"income" : 24000,
"gdp_per_cap" : 542.9368752248247
},
{
"name" : "Bangladesh",
"adm0_a3" : "BGD",
"continent" : "Asia",
"oecd" : false,
"taxRate" : 0.25,
"income" : 14500,
"gdp_per_cap" : 743.4141957717354
},
{
"name" : "France",
"adm0_a3" : "FRA",
"continent" : "Europe",
"oecd" : true,
"taxRate" : 0.45,
"income" : 93113,
"gdp_per_cap" : 42377.41812863245
},
{
"name" : "Peru",
"adm0_a3" : "PER",
"continent" : "Latin America",
"oecd" : false,
"taxRate" : 0.3,
"income" : 73503,
"gdp_per_cap" : 6017.906231594672
},
{
"name" : "Norway",
"adm0_a3" : "NOR",
"continent" : "Europe",
"oecd" : true,
"taxRate" : 0.478,
"income" : 138574,
"gdp_per_cap" : 98102.46220863143
},
{
"name" : "Malawi",
"adm0_a3" : "MWI",
"continent" : "Africa",
"oecd" : false,
"taxRate" : 0.3,
"income" : 1062,
"gdp_per_cap" : 365.4535861583037
},
{
"name" : "Singapore",
"adm0_a3" : "SGP",
"continent" : "Asia",
"oecd" : false,
"taxRate" : 0.2,
"income" : 257664,
"gdp_per_cap" : 46241.024454019454
},
{
"name" : "Korea (South)",
"adm0_a3" : "KOR",
"continent" : "Asia",
"oecd" : true,
"taxRate" : 0.38,
"income" : 270000,
"gdp_per_cap" : 22424.062301746617
},
{
"name" : "China",
"adm0_a3" : "CHN",
"continent" : "Asia",
"oecd" : false,
"taxRate" : 0.45,
"income" : 152160,
"gdp_per_cap" : 5444.785303333319
},
{
"name" : "Armenia",
"adm0_a3" : "ARM",
"continent" : "Asia",
"oecd" : false,
"taxRate" : 0.25,
"income" : 5200,
"gdp_per_cap" : 3305.4867040621434
},
{
"name" : "Dominican Republic",
"adm0_a3" : "DOM",
"continent" : "Latin America",
"oecd" : false,
"taxRate" : 0.25,
"income" : 9486,
"gdp_per_cap" : 5530.05615316855
},
{
"name" : "Ukraine",
"adm0_a3" : "UKR",
"continent" : "Europe",
"oecd" : false,
"taxRate" : 0.17,
"income" : 15025,
"gdp_per_cap" : 3615.3819728928997
},
{
"name" : "Finland",
"adm0_a3" : "FIN",
"continent" : "Europe",
"oecd" : true,
"taxRate" : 0.49,
"income" : 92416,
"gdp_per_cap" : 48823.29888827012
},
{
"name" : "Indonesia",
"adm0_a3" : "IDN",
"continent" : "Asia",
"oecd" : false,
"taxRate" : 0.3,
"income" : 50000,
"gdp_per_cap" : 3494.6045738883286
},
{
"name" : "Sweden",
"adm0_a3" : "SWE",
"continent" : "Europe",
"oecd" : true,
"taxRate" : 0.566,
"income" : 85054,
"gdp_per_cap" : 57091.0466622885
},
{
"name" : "United States",
"adm0_a3" : "USA",
"continent" : "North America",
"oecd" : true,
"taxRate" : 0.35,
"income" : 388350,
"gdp_per_cap" : 48111.96690959092
},
{
"name" : "Angola",
"adm0_a3" : "AGO",
"continent" : "Africa",
"oecd" : false,
"taxRate" : 0.17,
"income" : 2415,
"gdp_per_cap" : 5318.040368201604
},
{
"name" : "Portugal",
"adm0_a3" : "PRT",
"continent" : "Europe",
"oecd" : true,
"taxRate" : 0.465,
"income" : 201528,
"gdp_per_cap" : 22315.84197716566
},
{
"name" : "South Africa",
"adm0_a3" : "ZAF",
"continent" : "Africa",
"oecd" : false,
"taxRate" : 0.4,
"income" : 74930,
"gdp_per_cap" : 8070.032090409671
},
{
"name" : "Cyprus",
"adm0_a3" : "CYP",
"continent" : "Asia",
"oecd" : false,
"taxRate" : 0.35,
"income" : 78876,
"gdp_per_cap" : 30670.313598
},
{
"name" : "Malaysia",
"adm0_a3" : "MYS",
"continent" : "Asia",
"oecd" : false,
"taxRate" : 0.26,
"income" : 32950,
"gdp_per_cap" : 9977.318518098507
},
{
"name" : "Austria",
"adm0_a3" : "AUT",
"continent" : "Europe",
"oecd" : true,
"taxRate" : 0.5,
"income" : 78876,
"gdp_per_cap" : 49608.761432474166
},
{
"name" : "Vietnam",
"adm0_a3" : "VNM",
"continent" : "Asia",
"oecd" : false,
"taxRate" : 0.35,
"income" : 3840,
"gdp_per_cap" : 1407.1054348379466
},
{
"name" : "Mozambique",
"adm0_a3" : "MOZ",
"continent" : "Africa",
"oecd" : false,
"taxRate" : 0.32,
"income" : 55000,
"gdp_per_cap" : 534.8061175883065
},
{
"name" : "Uganda",
"adm0_a3" : "UGA",
"continent" : "Africa",
"oecd" : false,
"taxRate" : 0.3,
"income" : 1968,
"gdp_per_cap" : 487.1054980501931
},
{
"name" : "Japan",
"adm0_a3" : "JPN",
"continent" : "Asia",
"oecd" : true,
"taxRate" : 0.5,
"income" : 225000,
"gdp_per_cap" : 45902.671607675584
},
{
"name" : "Brazil",
"adm0_a3" : "BRA",
"continent" : "Latin America",
"oecd" : false,
"taxRate" : 0.275,
"income" : 25492,
"gdp_per_cap" : 12593.892927030683
},
{
"name" : "Panama",
"adm0_a3" : "PAN",
"continent" : "Latin America",
"oecd" : false,
"taxRate" : 0.25,
"income" : 49005,
"gdp_per_cap" : 7498.379389474362
},
{
"name" : "Costa Rica",
"adm0_a3" : "CRI",
"continent" : "Latin America",
"oecd" : false,
"taxRate" : 0.15,
"income" : 1953,
"gdp_per_cap" : 8646.804190241668
},
{
"name" : "Luxembourg",
"adm0_a3" : "LUX",
"continent" : "Europe",
"oecd" : true,
"taxRate" : 0.41,
"income" : 54942,
"gdp_per_cap" : 114508.38168923276
},
{
"name" : "Ireland",
"adm0_a3" : "IRL",
"continent" : "Europe",
"oecd" : true,
"taxRate" : 0.48,
"income" : 43120,
"gdp_per_cap" : 48423.21178218558
},
{
"name" : "Ecuador",
"adm0_a3" : "ECU",
"continent" : "Latin America",
"oecd" : false,
"taxRate" : 0.35,
"income" : 93888,
"gdp_per_cap" : 4496.46699877816
},
{
"name" : "Australia",
"adm0_a3" : "AUS",
"continent" : "Oceana",
"oecd" : true,
"taxRate" : 0.45,
"income" : 185166,
"gdp_per_cap" : 60979.02893623972
},
{
"name" : "Chile",
"adm0_a3" : "CHL",
"continent" : "Latin America",
"oecd" : true,
"taxRate" : 0.4,
"income" : 148830,
"gdp_per_cap" : 14394.46075911614
},
{
"name" : "Belgium",
"adm0_a3" : "BEL",
"continent" : "Europe",
"oecd" : true,
"taxRate" : 0.5,
"income" : 47720,
"gdp_per_cap" : 46662.5282622739
},
{
"name" : "Thailand",
"adm0_a3" : "THA",
"continent" : "Asia",
"oecd" : false,
"taxRate" : 0.37,
"income" : 129200,
"gdp_per_cap" : 4972.373665068626
},
{
"name" : "Sierra Leone",
"adm0_a3" : "SLE",
"continent" : "Africa",
"oecd" : false,
"taxRate" : 0.3,
"income" : 150,
"gdp_per_cap" : 373.9835202417812
},
{
"name" : "Denmark",
"adm0_a3" : "DNK",
"continent" : "Europe",
"oecd" : true,
"taxRate" : 0.554,
"income" : 74885,
"gdp_per_cap" : 59852.17346565826
},
{
"name" : "Philippines",
"adm0_a3" : "PHL",
"continent" : "Asia",
"oecd" : false,
"taxRate" : 0.32,
"income" : 11800,
"gdp_per_cap" : 2369.517867279269
},
{
"name" : "Morocco",
"adm0_a3" : "MAR",
"continent" : "Africa",
"oecd" : false,
"taxRate" : 0.38,
"income" : 21168,
"gdp_per_cap" : 3053.5306724
},
{
"name" : "Croatia",
"adm0_a3" : "HRV",
"continent" : "Europe",
"oecd" : false,
"taxRate" : 0.4,
"income" : 18469,
"gdp_per_cap" : 14180.444899890439
},
{
"name" : "Uruguay",
"adm0_a3" : "URY",
"continent" : "Latin America",
"oecd" : false,
"taxRate" : 0.25,
"income" : 143280,
"gdp_per_cap" : 13866.255125304271
},
{
"name" : "Lebanon",
"adm0_a3" : "LBN",
"continent" : "Asia",
"oecd" : false,
"taxRate" : 0.2,
"income" : 84000,
"gdp_per_cap" : 9413.128913124952
},
{
"name" : "Colombia",
"adm0_a3" : "COL",
"continent" : "Latin America",
"oecd" : false,
"taxRate" : 0.33,
"income" : 64081,
"gdp_per_cap" : 7104.034988356221
},
{
"name" : "Fiji",
"adm0_a3" : "FJI",
"continent" : "Oceana",
"oecd" : false,
"taxRate" : 0.2,
"income" : 27915,
"gdp_per_cap" : 4396.700614526509
},
{
"name" : "Italy",
"adm0_a3" : "ITA",
"continent" : "Europe",
"oecd" : true,
"taxRate" : 0.43,
"income" : 98595,
"gdp_per_cap" : 36102.86429300824
},
{
"name" : "Malta",
"adm0_a3" : "MLT",
"continent" : "Europe",
"oecd" : false,
"taxRate" : 0.35,
"income" : 25636,
"gdp_per_cap" : 21209.002729004478
},
{
"name" : "Venezuela",
"adm0_a3" : "VEN",
"continent" : "Latin America",
"oecd" : false,
"taxRate" : 0.34,
"income" : 106020,
"gdp_per_cap" : 10809.556349489845
},
{
"name" : "Israel",
"adm0_a3" : "ISR",
"continent" : "Asia",
"oecd" : true,
"taxRate" : 0.48,
"income" : 132718,
"gdp_per_cap" : 31282.27090084759
},
{
"name" : "Iceland",
"adm0_a3" : "ISL",
"continent" : "Europe",
"oecd" : true,
"taxRate" : 0.462,
"income" : 67619,
"gdp_per_cap" : 43969.19210125973
},
{
"name" : "Senegal",
"adm0_a3" : "SEN",
"continent" : "Africa",
"oecd" : false,
"taxRate" : 0.5,
"income" : 25000,
"gdp_per_cap" : 1119.3572876997914
},
{
"name" : "Papua New Guinea",
"adm0_a3" : "PNG",
"continent" : "Oceana",
"oecd" : false,
"taxRate" : 0.42,
"income" : 120175,
"gdp_per_cap" : 1844.525039915777
},
{
"name" : "Zimbabwe",
"adm0_a3" : "ZWE",
"continent" : "Africa",
"oecd" : false,
"taxRate" : 0.464,
"income" : 120000,
"gdp_per_cap" : 757.0890178881276
},
{
"name" : "Jordan",
"adm0_a3" : "JOR",
"continent" : "Asia",
"oecd" : false,
"taxRate" : 0.14,
"income" : 33709,
"gdp_per_cap" : 4665.94353968012
},
{
"name" : "Poland",
"adm0_a3" : "POL",
"continent" : "Europe",
"oecd" : true,
"taxRate" : 0.32,
"income" : 26958,
"gdp_per_cap" : 13462.854740753246
},
{
"name" : "Honduras",
"adm0_a3" : "HND",
"continent" : "Latin America",
"oecd" : false,
"taxRate" : 0.25,
"income" : 25750,
"gdp_per_cap" : 2247.231181032661
},
{
"name" : "Mexico",
"adm0_a3" : "MEX",
"continent" : "Latin America",
"oecd" : true,
"taxRate" : 0.3,
"income" : 30288,
"gdp_per_cap" : 10047.125202159128
},
{
"name" : "Serbia",
"adm0_a3" : "SRB",
"continent" : "Europe",
"oecd" : false,
"taxRate" : 0.15,
"income" : 45354,
"gdp_per_cap" : 6310.365103784727
},
{
"name" : "United Kingdom",
"adm0_a3" : "GBR",
"continent" : "Europe",
"oecd" : true,
"taxRate" : 0.5,
"income" : 242760,
"gdp_per_cap" : 39038.45827040004
},
{
"name" : "Greece",
"adm0_a3" : "GRC",
"continent" : "Europe",
"oecd" : true,
"taxRate" : 0.45,
"income" : 131460,
"gdp_per_cap" : 25621.670459203237
},
{
"name" : "Sri Lanka",
"adm0_a3" : "LKA",
"continent" : "Asia",
"oecd" : false,
"taxRate" : 0.24,
"income" : 23400,
"gdp_per_cap" : 2835.408275380022
},
{
"name" : "Botswana",
"adm0_a3" : "BWA",
"continent" : "Africa",
"oecd" : false,
"taxRate" : 0.25,
"income" : 19354,
"gdp_per_cap" : 8532.617221681237
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment