Jump to content

Template:Graph:PageViews

From Wikipedia, the free encyclopedia
<graph>
{
  //
  // ATTENTION: This code is maintained at https://www.mediawiki.org/wiki/Template:Graph:PageViews
  //            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:PageViews
  //            The graph uses PageViews API https://wikitech.wikimedia.org/wiki/Analytics/AQS/Pageviews
  //

  "$schema": "https://vega.github.io/schema/vega/v5.json",
  "width": 800,
  "height": 200,
  "autosize": {
    "type": "fit",
    "resize": false,
    "contains": "padding"
  },
  // The data for this graph comes from the PageView API.  The request is made for N days back up to now.
  "data": [
    {
      "name": "pageviews",
      "url": "https://wikimedia.org/api/rest_v1/metrics/pageviews/per-article/en.wikipedia.beta.wmflabs.org/all-access/user/Template%3AGraph%3APageViews/daily/2024102200/2024112100",
      "format": {
        "type": "json",
        "property": "items"
      },

      // The response is parsed here, converting date strings of form "20160223" into date 2016-02-23
      "transform": [
        { "type": "formula", "as": "year", "expr": "parseInt(substring(datum.timestamp,0,4))" },
        { "type": "formula", "as": "month", "expr": "parseInt(substring(datum.timestamp,4,6))" },
        { "type": "formula", "as": "day", "expr": "parseInt(substring(datum.timestamp,6,8))" },
        { "type": "formula", "as": "date", "expr": "datetime(datum.year,datum.month-1,datum.day)" }
      ]
    }
  ],

  "scales": [
    // The dates are scaled to the "x" axis - the width of the graph
    {
      "name": "x",
      "type": "time",
      "range": "width",
      "domain": {"data": "pageviews","fields": ["date"]}
    },
    // The pageviews 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": "pageviews","fields": ["views"]},
      "clamp": true,

      "nice": true
    }
  ],

  // Simple axis with horizontal grid lines
  "axes": [
    {
      "orient": "bottom",
      "scale": "x",
      "tickCount": 5
    },
    {
      "orient": "left",
      "scale": "y",
      "grid": true,
      "tickCount": 5
    }
  ],

  // The graph is drawn with two elements a thick line at the top, and a semi-transparent area below
  "marks": [
    {
      "type": "line",
      "from": {"data": "pageviews"},
      "encode": {
        "enter": {
          "x": {"scale": "x","field": "date"},
          "y": {"scale": "y","field": "views"},
          "stroke": {"value": "#36c"},
          "strokeWidth": {"value": 3},
          "interpolate": {"value": "monotone"}
        }
      }
    },
    {
      "type": "area",
      "from": {"data": "pageviews"},
      "encode": {
        "enter": {
          "x": {"scale": "x","field": "date"},
          "y": {"scale": "y","value": 0},
          "y2": {"scale": "y","field": "views"},
          "fill": {"value": "#36c"},
          "fillOpacity": {"value": 0.35},
          "interpolate": {"value": "monotone"}
        }
      }
    }
  ],
  "config": {
    "axis": {
      "labelColor": "#54595d",
      "tickColor": "#54595d",
      "tickWidth": 1.5,
      "gridColor": "#a2a9b1",
      "gridOpacity": 0.4,
      "gridWidth": 2,
      "domainWidth": 2
    }
  }
}
</graph>