Jump to content

Template:Graph:Population history

From mediawiki.org
Template documentation


This graph's main version resides at mediawiki Template:Graph:Population_history. Please make all the changes there and copy it everywhere else (until the copying is automated)

{{Graph:Population history|Q84}}
Show London's population history from Wikidata
{{Graph:Population history

| table=Wikidata/St.Petersburg.tab
| atable=Original/St.Petersburg population annotations.tab}}
Show population of St.Petersburg from the table on Commons, with annotations

Inserts a graph with the population history for the given city.

Template parameters[Edit template data]

This template prefers block formatting of parameters.

ParameterDescriptionTypeStatus
City Wikidata ID1

Wikidata ID of the city or region

Default
Q84
Stringoptional
Title of the data page on Commonstable

Data page name on Commons, without the Data: prefix. The table must contain "year" and "population" columns.

Stringoptional
Raw values for this graphvalues

Supply all values as a list of JSON objects: {"year":1980, "population":1000}, {"year":1984, "population":1045}, ...

Unknownoptional
Title of the annotations data page on Commonsatable

Data page name on Commons, without the Data: prefix. The table must contain "year" column, and optional "text" and "color" columns.

Stringoptional
Raw annotation valuesavalues

Supply all annotation values as a list of JSON objects: {"year":1980, "text":"Big event"}, ...

Unknownoptional
Filter expressionfilter

Optionally, filter the data with an expression, e.g. datum.year >= 1900 && datum.year < 2000

Unknownoptional
Graph colorcolor

Shade with which to highlight the data in the chart

Default
#00f
Example
#f00
Stringoptional
Interpolateinterpolate

How data points should be connected, e.g. linear, step-before, step-after, basis, basis-open, cardinal, cardinal-open, monotone

Default
monotone
Example
linear
Stringoptional
Graph scalescale

Scaling could be one of these: linear, log, pow, sqrt, quantile, quantize, and threshold

Default
linear
Example
log
Stringoptional
Maximum Y value axismax

This optional value might be useful to align multiple graphs side-by-side

Default
Automatically scaled to the data.
Example
10000
Numberoptional
Widthwidth

Width for the chart in pixels, if different from the default.

Default
400
Numberoptional
Heightheight

Height for the chart in pixels, if different from the default.

Default
200
Numberoptional
<graph>
{
  //
  // ATTENTION: This code is maintained at https://www.mediawiki.org/wiki/Template:Graph:Population_history
  //            Please do not modify it anywhere else, as it may get copied and override your changes.
  //            Suggestions can be made at https://www.mediawiki.org/wiki/Template_talk:Graph:Population_history
  //

  "version": 2,
  "width": 400,
  "height": 200,

  // The population data could be from Commons dataset, Wikidata, or hardcoded values
  "data": [
    {
      "name": "table",
"url": "wikidatasparql:///?query=SELECT%20%28MAX%28%3Fpopulation_entry%29%20as%20%3Fpopulation%29%20%3Fyear%20WHERE%20%7B%0A%20%20%20%20%23%20set%20the%20item%20here%20-%20e.g.%20city%2C%20country%0A%09BIND%28wd%3AQ84%20as%20%3Fitem%29%0A%20%20%20%20%3Fitem%20p%3AP1082%20%3Fpopstatement%20.%0A%20%20%20%20%3Fpopstatement%20ps%3AP1082%20%3Fpopulation_entry%20.%0A%20%20%20%20OPTIONAL%20%7B%0A%20%20%20%20%20%20%3Fpopstatement%20pq%3AP585%20%3Fdate%20.%0A%20%20%20%20%20%20BIND%28year%28%3Fdate%29%20as%20%3Fyear%29%0A%20%20%20%20%7D%0A%7D%20GROUP%20BY%20%3Fyear%20ORDER%20BY%20ASC%28%3Fyear%29",
      "format": { "type": "json" },
      // Convert year integer (2016) into a date object (2016-01-01)
      "transform": [
      	// Optionally filter data with an template expression parameter
      	// e.g.  filter = datum.year > 1900 && datum.year < 2000

      	{ "type": "formula", "field": "date", "expr": "datetime(datum.year,0,1)" }
      ]
    },

    // Each annotation is expected to be an integer year, string text,
    // and optional string color (e.g. "#4d2800")
    {
      "name": "annotations",
"values": [],
      "transform": [
        { "type": "formula", "field": "date", "expr": "datetime(datum.year,0,1)" },
        { "type": "formula", "field": "color", "expr": "datum.color||'#000'" }
      ]
    }
  ],

  "scales": [
    // The dates are scaled to the "x" axis - the width of the graph
    {
      "name": "x",
      "type": "time",
      "range": "width",
      "domain": {"data": "table","field": "date"}
    },
    // The population are scaled to the "y" axis - the height of the graph
    // Optional scale parameter can change "linear" to other scales like log
    // Optional max parameter can fix the upper bound of the graph
    {
      "name": "y",
      "type": "linear",
      "range": "height",
      "domain": {"data": "table","field": "population"},
      "clamp": true,

      "nice": true
    }
  ],

  // Simple axis with horizontal grid lines
  "axes": [
    {"type": "x", "scale": "x", "ticks": 5},
    {"type": "y", "scale": "y", "ticks": 5, "grid": true, "orient":"right"}
  ],

  // The graph is drawn with two elements a thick line at the top,
  // and a semi-transparent area below
  "marks": [
    {
      "type": "area",
      "from": {"data": "table"},
      "properties": {
        "enter": {
          "x": {"scale": "x", "field": "date"},
          "y": {"scale": "y", "value": 0},
          "y2": {"scale": "y", "field": "population"},
          "fill": {"value": "#99B2CC"},
          "fillOpacity": {"value": 0.35},
          "interpolate": {"value": "monotone"}
        }
      }
    },
    // If annotations are given, draw dashed line with associated text
    {
      "type": "rule",
      "from": {"data": "annotations"},
      "properties": {
        "enter": {
          "x": {"scale": "x", "field":"date"},
          "y": {"value": 0},
          "y2": {"signal": "height"},
          "stroke": {"field": "color"},
          "strokeWidth": {"value": 2},
          "opacity": {"value": 0.6},
          "strokeDash": {"value": [8,3]}
        }
      }
    },
    {
      "type": "line",
      "from": {"data": "table"},
      "properties": {
        "enter": {
          "x": {"scale": "x","field": "date"},
          "y": {"scale": "y","field": "population"},
          "stroke": {"value": "#99B2CC"},
          "strokeWidth": {"value": 3},
          "interpolate": {"value": "monotone"}
        }
      }
    },
    // The small white circles should be drawn after annotations but before text
    {
      "type": "symbol",
      "from": {"data": "table"},
      "properties": {
        "enter": {
          "x": {"scale": "x","field": "date"},
          "y": {"scale": "y","field": "population"},
          "stroke": {"value": "#99B2CC"},
          "fill": {"value": "#fff"},
          "size": {"value": 30}
        }
      }
    },
    // Annotation text
    {
      "type": "text",
      "from": {"data": "annotations"},
      "properties": {
        "enter": {
          "x": {"scale": "x", "field":"date"},
          "y": {"value": 0},
          "align": {"value": "right"},
          "baseline": {"value": "bottom"},
          "angle": {"value": 270},
          "dx": {"value": -4},
          "dy": {"value": -2},
          "text": {"field": "text"},
          "stroke": {"field": "color"}
        }
      }
    }

  ]
}
</graph>