Extension:Graph/Demo/Sparql

Number of museums per country
This graph pulls data from three wikidata queries
 * 1) Number of museums by country
 * 2) Country names - note that labels are localized using a list "ru,en", meaning first it will try to find a label in Russian, followed by English if Russian is not available.
 * 3) Country populations

This graph draws a map based on topojson map data, keyed by Wikidata ID. For each region, it looks up the number of museums, population, and region name from the 3 above queries. The color is determined by logarithmicly scaling museums/population. On mouseover, the country's name and museum count is shown.

{ "version": 2, "width": 500, "height": 260, "padding": 12, "background": "#edf1f7", "data": [ {     "name": "countryNames", "url": "wikidatasparql:///?query=PREFIX%20wikibase%3A%20%3Chttp%3A%2F%2Fwikiba.se%2Fontology%23%3E%0APREFIX%20wd%3A%20%3Chttp%3A%2F%2Fwww.wikidata.org%2Fentity%2F%3E%20%0APREFIX%20wdt%3A%20%3Chttp%3A%2F%2Fwww.wikidata.org%2Fprop%2Fdirect%2F%3E%0A%0ASELECT%20%3Fid%20%3Fvalue%20WHERE%20%7B%0A%20%20%20%7B%20SELECT%20DISTINCT%20%3Fid%20%20WHERE%20%7B%0A%20%20%20%20%20%3Fplace%20wdt%3AP17%20%3Fid%20.%0A%20%20%20%7D%20%7D%0A%20%20%20%3Fid%20wdt%3AP299%20%3Fcode%20.%0A%20%20%20SERVICE%20wikibase%3Alabel%20%7B%0A%20%20%20%20%20bd%3AserviceParam%20wikibase%3Alanguage%20%22en%2Cen%22%20.%0A%20%20%20%20%20%3Fid%20rdfs%3Alabel%20%3Fvalue%0A%20%20%20%7D%0A%7D%0A", "format": { "type": "json", "property": "results.bindings" },     "transform": [ { "type": "formula", "field": "id", "expr": "slice(datum.id.value, lastindexof(datum.id.value,'Q'))" }, { "type": "formula", "field": "value", "expr": "datum.value.value" } ]   },    {      "name": "countryPopulation", "url": "wikidatasparql:///?query=PREFIX%20wikibase%3A%20%3Chttp%3A%2F%2Fwikiba.se%2Fontology%23%3E%0APREFIX%20wd%3A%20%3Chttp%3A%2F%2Fwww.wikidata.org%2Fentity%2F%3E%20%0APREFIX%20wdt%3A%20%3Chttp%3A%2F%2Fwww.wikidata.org%2Fprop%2Fdirect%2F%3E%0A%0ASELECT%20%3Fid%20%3Fvalue%20WHERE%20%7B%0A%20%20%20%7B%20SELECT%20DISTINCT%20%3Fid%20%20WHERE%20%7B%0A%20%20%20%20%20%3Fplace%20wdt%3AP17%20%3Fid%20.%0A%20%20%20%7D%20%7D%0A%20%20%20%3Fid%20wdt%3AP299%20%3Fcode%20.%0A%20%20%20%3Fid%20wdt%3AP1082%20%3Fvalue%20.%0A%7D%0A", "format": { "type": "json", "property": "results.bindings" },     "transform": [ { "type": "formula", "field": "id", "expr": "slice(datum.id.value, lastindexof(datum.id.value,'Q'))" }, { "type": "formula", "field": "value", "expr": "parseFloat(datum.value.value)" } ]   },    {      "name": "museumCounts", "url":"wikidatasparql:///?query=PREFIX%20wikibase%3A%20%3Chttp%3A%2F%2Fwikiba.se%2Fontology%23%3E%0APREFIX%20wd%3A%20%3Chttp%3A%2F%2Fwww.wikidata.org%2Fentity%2F%3E%20%0APREFIX%20wdt%3A%20%3Chttp%3A%2F%2Fwww.wikidata.org%2Fprop%2Fdirect%2F%3E%0A%0ASELECT%20DISTINCT%20%3Fid%20(count(*)%20as%20%3Fvalue)%20WHERE%20%7B%0A%20%20%20%3Fplace%20wdt%3AP31%2Fwdt%3AP279*%20wd%3AQ33506%20.%0A%20%20%20%3Fplace%20wdt%3AP17%20%3Fid%20.%0A%7D%0A%0AGROUP%20BY%20%3Fid", "format": { "type": "json", "property": "results.bindings" },     "transform": [ { "type": "formula", "field": "id", "expr": "slice(datum.id.value, lastindexof(datum.id.value,'Q'))" }, { "type": "formula", "field": "value", "expr": "parseFloat(datum.value.value)" } ]   },    {      "name": "map", "url": "wikiraw:///Extension:Graph/Demo/RawData:WorldMap-json", "format": {"type": "topojson","feature": "countries"}, "transform": [ {         "type": "geopath", "value": "data", "scale": 80, "center": [-180,125], "translate": [0,0], "projection": "equirectangular" },       {          "type": "lookup", "keys": ["id"], "on": "countryNames", "onKey": "id", "as": ["name"], "default": {"value": {"value": "???"}} },       { "type": "formula", "field": "name", "expr": "datum.name.value" }, {         "type": "lookup", "keys": ["id"], "on": "countryPopulation", "onKey": "id", "as": ["population"], "default": {"value": {"value": 0}} },       { "type": "formula", "field": "population", "expr": "datum.population.value" }, {         "type": "lookup", "keys": ["id"], "on": "museumCounts", "onKey": "id", "as": ["museums"], "default": {"value": {"value": 0}} },       { "type": "formula", "field": "museums", "expr": "datum.museums.value" }, {         "type": "formula", "field": "rate", "expr": "datum.population > 0 && datum.museums > 0 ? (datum.museums / datum.population) : 0.000000001" }     ]    }  ],  "signals": [ {     "name": "tooltipSignal", "init": {"expr": "{x: 0, y: 0, datum: {name:, population:, museums:''}}"}, "streams": [ {           "type": "@map:mouseover", "expr": "{x: eventX, y: eventY, datum: eventItem.datum}" },       {            "type": "@map:mouseout", "expr": "{x: 0, y: 0, datum: {name:, population:, museums:''}}" }     ]     }  ],  "scales": [ {     "name": "color", "type": "log", "domain": {"data": "map","field": "rate"}, "zero": false, "range": ["#FFEDBC", "#f83600"] } ],  "marks": [ {     "type": "text", "properties": { "enter": { "text": {"value": "Museums"}, "x": {"value": 0}, "y": {"value": 25}, "fontSize": {"value": 32}, "fontWeight": {"value": "bold"}, "fill": {"value": "steelblue"} }     }    },    {      "name": "map", "type": "path", "from": {"data": "map"}, "properties": { "enter": {"path": {"field": "layout_path"}}, "update": { "fill":{ "rule": [ {               "predicate": { "name": "isNotNull", "id": {"field": "rate"} },               "scale": "color", "field": "rate" },             {"value": "grey"} ]         }        },        "hover": {"fill": {"value": "#989898"}} }   },    {      "type": "text", "properties": { "enter": { "x": {"value": 500}, "y": {"value": 10}, "align": {"value": "right"}, "fontSize": {"value": 17}, "fill": {"value": "black"} },       "update": { "text": {"template": "\u007b{tooltipSignal.datum.name}} \u007b{tooltipSignal.datum.museums}}"} }     }    }  ],  "predicates": [ {     "name": "isNotNull", "type": "!=", "operands": [{"value": null}, {"arg": "id"}] } ],  "legends": [ {     "fill": "color", "title": "Per Capita", "offset": -300, "properties": { "labels": { "text": {"value": ""} },       "gradient": { "stroke": {"value": "transparent"} },       "title": { "fontSize": {"value": 14} },       "legend": { "x": {"value": 0}, "y": {"value": 180} }     }    }  ] }

Largest cities
Uses sparql query with cityLabel, population, and gps columns.

{ "version": 2, "width": 500, "height": 260, "padding": 12, "background": "#edf1f7", "data": [ {     "name": "map", "url": "wikiraw:///Extension:Graph/Demo/RawData:WorldMap-json", "format": {"type": "topojson","feature": "countries"}, "transform": [ { "type": "formula", "field": "rate", "expr": "1" }, {         "type": "geopath", "value": "data", "scale": 80, "center": [-180,125], "translate": [0,0], "projection": "equirectangular" }     ]    },    {      "name": "points", "url": "wikidatasparql:///?query=PREFIX%20wd%3A%20%3Chttp%3A%2F%2Fwww.wikidata.org%2Fentity%2F%3E%0APREFIX%20wdt%3A%20%3Chttp%3A%2F%2Fwww.wikidata.org%2Fprop%2Fdirect%2F%3E%0APREFIX%20wikibase%3A%20%3Chttp%3A%2F%2Fwikiba.se%2Fontology%23%3E%0A%0ASELECT%20DISTINCT%20%3FcityLabel%20%3Fpopulation%20%3Fgps%0AWHERE%20%0A%7B%0A%20%20%3Fcity%20wdt%3AP31%2Fwdt%3AP279*%20wd%3AQ515%20.%0A%20%20%3Fcity%20wdt%3AP1082%20%3Fpopulation%20.%0A%20%20%3Fcity%20wdt%3AP625%20%3Fgps%20.%0A%20%20SERVICE%20wikibase%3Alabel%20%7B%0A%20%20%20%20bd%3AserviceParam%20wikibase%3Alanguage%20%22en%22%20.%0A%20%20%7D%0A%7D%0AORDER%20BY%20DESC(%3Fpopulation)%20LIMIT%2015", "format": { "type": "json", "property": "results.bindings" },     "transform": [ { "type": "formula", "field": "cityLabel", "expr": "datum.cityLabel.value" }, { "type": "formula", "field": "population", "expr": "parseInt(datum.population.value)" }, { "type": "formula", "field": "lon", "expr": "parseFloat(substring(datum.gps.value, 1+indexof(datum.gps.value,'('), indexof(datum.gps.value,' ')))" },       { "type": "formula", "field": "lat", "expr": "parseFloat(substring(datum.gps.value, 1+indexof(datum.gps.value,' '), indexof(datum.gps.value,')')))" }, {"type": "sort", "by": "-population"}, {         "type": "geo", "projection": "equirectangular", "scale": 80, "center": [-180,125], "translate": [0,0], "lon": "lon", "lat": "lat" }     ]    }  ],  "signals": [ {     "name": "mouseoverSignal", "init": null, "streams": [ {           "type": "@circle:mouseover", "expr": "eventItem.datum" },       {          "type": "@circle:mouseout", "expr": null }     ]    }  ],  "scales": [ {     "name": "size", "type": "linear", "domain": {"data": "points", "field": "population"}, "range": [10, 1000] } ],  "marks": [ {     "type": "text", "properties": { "enter": { "text": {"value": "Largest cities"}, "x": {"value": 0}, "y": {"value": 25}, "fontSize": {"value": 32}, "fontWeight": {"value": "bold"}, "fill": {"value": "steelblue"} }     }    },    {      "name": "map", "type": "path", "from": {"data": "map"}, "properties": { "enter": { "fill": {"value": "grey"}, "path": {"field": "layout_path"} }     }    },    {      "name": "circle", "type": "symbol", "from": {"data": "points"}, "properties": { "enter": { "size": {"scale": "size", "field": "population"}, "fill": {"value": "steelblue"}, "fillOpacity": {"value": 0.8}, "stroke": {"value": "white"}, "strokeWidth": {"value": 1.5}, "x": {"field": "layout_x"}, "y": {"field": "layout_y"} }     }    },    {      "type": "text", "properties": { "enter": { "x": {"value": 500}, "y": {"value": 10}, "align": {"value": "right"}, "fontSize": {"value": 17}, "fill": {"value": "black"} },       "update": { "text": { "rule": [ {               "predicate": { "name": "isNotNull", "value": {"signal": "mouseoverSignal"} },               "template": "\u007b{mouseoverSignal.cityLabel}} \u007b{mouseoverSignal.population|number:'.2s'}}" },             { "value": "" } ]         }        }      }    }  ],  "predicates": [ {     "name": "isNotNull", "type": "!=", "operands": [{"value": null}, {"arg": "value"}] } ] }

Largest disasters
Uses sparql query with event, class, number of people affected, and the gps coordinates columns.

code