Extension:Graph/Demo

From RobotX
Jump to navigation Jump to search


This page shows some examples of what Graph extension can produce.


Graphs use [<tvar|url1>http://vega.github.io/vega/ Vega grammar] ([<tvar|url2>https://github.com/vega/vega/wiki documentation]) as underlying technology.


Vega team is working on [<tvar|url>http://vega.github.io/ other tools] to make Graphs easier to use.


For interactive graphs [<tvar|url>https://github.com/vega/vega/wiki/Tutorial this tutorial] will explain building graphs step by step.


For other graph ideas, see [<tvar|url>http://vega.github.io/vega-editor/?spec=bar Vega examples].

Graph templates

The easiest way to use graphs is via pre-built templates such as the Graph:Chart (available on many Wikipedias), or more specialized PieChart.


Graph:Chart supports many common graph types such as line, area, and pie charts:


{{Graph:Chart|width=600|height=100|xAxisTitle=X|yAxisTitle=Y
 |type=rect|x=1,2,3,4,5,6,7,8|y=10,12,6,14,2,10,7,9}}

{{Graph:Chart|width=100|height=100|type=pie|legend=Legende
 |x=A,B,C,D,E,F,G,H,I|y1=100,200,150,300,100,100,150,50,200
 |y2=7,8,9,8,8,9,10,9,5|showValues=}}

{{Graph:Chart|width=400|height=100|xAxisTitle=X|yAxisTitle=Y
 |legend=Legend|type=stackedarea|x=1,2,3,4,5,6|y1=10,12,6,14,2,10
 |y2=2,4,6,8,13,11|interpolate=monotone|colors=seagreen,orchid}}


Vega 2.0 interactive examples

See tutorial how to build this: Template:Extension:Graph/Demo/HistoricalFertilityRates

Extension:Graph/Demo/Dimpvis Template:Extension:Graph/Demo/Dimpvis

Extension:Graph/Demo/Airports Template:Extension:Graph/Demo/Airports

Extension:Graph/Demo/OverviewDetail Template:Extension:Graph/Demo/OverviewDetail

Extension:Graph/Demo/IndexChart Template:Extension:Graph/Demo/IndexChart


Using RESTBase API

Show pageview graphs for a range of dates, using pageview analytics API.


See Template:Graph:PageViews .


Current page and en.wikipedia.org's main page for the last 30 days

{{Template:Graph:PageViews}}



Current page and en.wikipedia main page for the last 30 days - per type Template:Extension:Graph/Demo/Pageviews2

Using MediaWiki API

This graph shows edit history for a wiki page.


See

  1. REDIRECT Template:Template link expanded

.

Current Page


This graph shows the number of pages in each subcategory.


See graph source code.

Category:Extensions by category.
Template:Extension:Graph/Demo/CategoryPie

Using Wikidata Query Service API

See more examples.

Template:Extension:Graph/Demo/Sparql/Largest disasters


Trees

Cartesian tree

Extension:Graph/Demo/CartesianTree

Template:Extension:Graph/Demo/CartesianTree


Radial tree

Extension:Graph/Demo/RadialTree

Template:Extension:Graph/Demo/RadialTree


Dendrogram

Extension:Graph/Demo/Dendrogram

Template:Extension:Graph/Demo/Dendrogram


Timeline / lifeline


More maps examples

This transcludes the page Extension:Graph/Demo/Map.


The <graph> tag's JSON data on that page specifies that its countries data comes from a separate URL, Extension:Graph/Demo/RawData:WorldMap-iso2-json, that contains map data in JSON format.


(MediaWiki doesn't know this wiki page should be formatted as JSON yet, it will eventually use a JSON content handler.)


One of the elements in the <graph> tag's JSON data specifies a highlight color for each country, in the format "country-code":"highlight-color":

{"BR":"pink","US":"blue","CN":"red","DZ":"green","AU":"purple"}


Vega usually works with data in the format [{"id":"country-code", "v":"highlight-color"}, ...], so I created a helper Lua function to convert the data:

{{#invoke:Graph:Utils|expandDict|{"BR":"pink","US":"blue","CN":"red","DZ":"green","AU":"purple"} }}


The Lua function's output is data in Vega's format:

[{"id":"US","v":"blue"},{"id":"AU","v":"purple"},{"id":"CN","v":"red"},{"id":"BR","v":"pink"},{"id":"DZ","v":"green"}]

Template:Extension:Graph/Demo/Map


Here is a more complex data processing example: MapTemplate is expanded with the data from Lua which takes it from the 2010 population distribution in the world (data based on UN data).


To generate this graph, I use Lua module Graph:Utils's function parseCsv to extract the year 2010 column from the Extension:Graph/Demo/RawData:PopulationByCountryHistoric-csv page (in csv format), and pass that data as the first unnamed parameter to the MapTemplate graph.


Additional optional parameter specifies that it should be scaled to 80%.


{{Extension:Graph/Demo/MapTemplate|{{#invoke:Graph:Utils|parseCsv|Extension:Graph/Demo/RawData:PopulationByCountryHistoric-csv|2010}}|scale=180}}

Template:Extension:Graph/Demo/MapTemplate


Note how the legend it wrongly positioned.


That won't happen at lower scales.

Passing MediaWiki template parameters

If you're using a wiki page as a template, you can pass parameters to it, like any other MediaWiki template.


As an example, the graph specification in TemplateSample does not hardcode a fill color for marks.properties.update.fill.value; instead it sets the fill color to {{{1|#ccc}}}.


So if you visit that page or transclude it with no parameter, the graph fills with color #ccc; but if you transclude that page you can specify the fill color as the first template parameter.


{{Extension:Graph/Demo/TemplateSample}}
{{Extension:Graph/Demo/TemplateSample | blue}}
{{Extension:Graph/Demo/TemplateSample | #f00dee}}

Template:Extension:Graph/Demo/TemplateSample Template:Extension:Graph/Demo/TemplateSample Template:Extension:Graph/Demo/TemplateSample


Using a template for repeated graphs

This is very useful if you have multiple graphs of the same form: you can put the verbose graph JSON and additional repetive wikitext in a template and only pass the parameters to it that vary, such as title and values. See a sample of this approach.

Overlaying two types of data

Falkensee graph sample, see code.

Template:Extension:Graph/Demo/falkensee


Embedded directly with <graph>

This example is a <graph> tag containing the graph JSON inside the current page.



Horizontal bar graph

Extension:Graph/Demo/HorizontalBarGraphSample

Template:Extension:Graph/Demo/HorizontalBarGraphSample


Editing graph data

Editing JSON by hand is fiddly and prone to error. so you should use a JSON checker such as JSONLint or a JSON editor such as the Vega Live Editor to edit JSON before you copy and paste it into the wiki page. If the <graph> tag's data is directly embedded in the page such as the example above, then if you use VisualEditor to edit the page you can directly edit graph data.