Diferencia entre revisiones de «Usuario:Fbstj/edits-pie»

De La Coppermind
Ir a la navegación Ir a la búsqueda
m (+)
m (+)
 
Línea 111: Línea 111:
 
"name": "table",
 
"name": "table",
 
"url": "wikiapi://coppermind.net/?action=query&format=json&list=allusers&auprop=editcount&aulimit=max&augroup=keeper&auwitheditsonly=1",
 
"url": "wikiapi://coppermind.net/?action=query&format=json&list=allusers&auprop=editcount&aulimit=max&augroup=keeper&auwitheditsonly=1",
  +
// We are only interested in the content of query.allusers subelement.
  +
"format": {"property": "query.allusers","type": "json"},
  +
"transform": [
  +
// sort in descending order using category size as the sort key
  +
{"type": "sort","by": "-editcount"},
  +
// To visualize, use "pie" transformation to add layout_start, layout_end, and layout_mid fields to each page object
  +
// These fields contain angles at which to start and stop drawing arcs. First element's start will be 0, and last element's end will be 360 degrees (in radians)
  +
{"type": "pie","field": "editcount"}
  +
]
  +
}
  +
],
  +
// "legends": [{"title": "{{{legend|Legend}}}","fill": "color"}],
  +
// Scales are like functions -- marks use them to convert a data value into a visual value, like x or y coordinate on the graph, or a color value.
  +
"scales": [
  +
{
  +
// This scale will be used to assign a color to each slice, using a palette of 10 colors
  +
"name": "color",
  +
"domain": {"data": "table","field": "name"},
  +
"range": "category20",
  +
"type": "ordinal"
  +
}
  +
],
  +
"marks": [
  +
{
  +
// This mark draws the actual pie chart from the data source
  +
// Each element is an arc between layout_start and layout_end angles (as calculated by the pie transformation)
  +
// drawn with a given radius, stroke, and fill.
  +
"from": {"data": "table"},
  +
"type": "arc",
  +
"properties": {
  +
"enter": {
  +
"fill": {"scale": "color","field": "name"},
  +
"outerRadius": {"value": 200},
  +
"startAngle": {"field": "layout_start"},
  +
"endAngle": {"field": "layout_end"},
  +
"stroke": {"value": "white"},
  +
"strokeWidth": {"value": 1}
  +
}
  +
}
  +
},
  +
{
  +
// This mark draws labels around the pie chart after the pie chart has been drawn
  +
"type": "text",
  +
// Before drawing, we need to perform a number of calculations to figure out the exact location and orientation of the text
  +
"from": {
  +
"data": "table",
  +
"transform": [
  +
// For each data point (datum), each of these transformations will be ran in order.
  +
// Formula transformation evaluates the expression and assigns result to the datapoint
  +
// Size of the pie slice, in degrees: sliceSize = (end - start) * 180 / Pi
  +
{ "type": "formula", "field": "sliceSize", "expr": "(datum.layout_end - datum.layout_start)*180/PI" },
  +
// Draw text only if the slice of the arc is more than 2 degrees to avoid overcrowding
  +
{ "type": "filter", "test": "datum.sliceSize > 2" },
  +
// Remove namespace from the text - keeps only text after the first ':' symbol, limits to 40 chars.
  +
{ "type": "formula", "field": "name", "expr": "substring(datum.name, 1+indexof(datum.name,':'), 40) +': '+ datum.editcount + ' ('+ round(datum.sliceSize * 100 / 180) +'%)'" },
  +
// Determine the side of the pie chart we are on - left or right.
  +
{ "type": "formula", "field": "invert", "expr": "datum.layout_mid*180/PI < 180 ? 1 : -1" },
  +
// If on the left, the text should be right-aligned (go from the rim inward)
  +
{ "type": "formula", "field": "align", "expr": "datum.invert < 0 ? 'left' : 'right'" },
  +
// At what angle should the text be drawn relative to the point on the circle
  +
{ "type": "formula", "field": "angle", "expr": "(datum.layout_mid*180/PI)-90*datum.invert" },
  +
// Make font smaller for smaller pie slices
  +
{ "type": "formula", "field": "fontSize", "expr": "datum.sliceSize > 20 ? 15 : (datum.sliceSize > 10 ? 14 : 10)" },
  +
// Make font bold for largest pie slices
  +
{ "type": "formula", "field": "fontWeight", "expr": "datum.sliceSize > 15 ? 'bold' : 'normal'" }
  +
]
  +
},
  +
"properties": {
  +
"enter": {
  +
// Use the fields calculated in the transformation to draw category names
  +
"align": {"field": "align"},
  +
"angle": {"field": "angle"},
  +
"baseline": {"value": "middle"},
  +
"fill": {"value": "black"},
  +
"fontSize": {"field": "fontSize"},
  +
"fontWeight": {"field": "fontWeight"},
  +
"radius": {"value": 270},
  +
"text": {"field": "name"},
  +
"theta": {"field": "layout_mid"}
  +
}
  +
}
  +
}
  +
]
  +
}
  +
}}
  +
  +
== Active Users ==
  +
This is flawed as it shows total edits for all [[Special: ActiveUsers|"active users"]] and so is overwhelmed by recent big editors
  +
{{#tag:graph|
  +
{
  +
"version": 2,
  +
"width": 300,
  +
"height": 300,
  +
"data": [
  +
{
  +
// Data is retrieved from the MediaWiki API. By default it uses current wiki's "Extension by category"
  +
"name": "table",
  +
"url": "wikiapi://coppermind.net/?action=query&format=json&list=allusers&auprop=editcount&aulimit=max&auactiveusers=1",
 
// We are only interested in the content of query.allusers subelement.
 
// We are only interested in the content of query.allusers subelement.
 
"format": {"property": "query.allusers","type": "json"},
 
"format": {"property": "query.allusers","type": "json"},

Revisión actual del 17:56 10 oct 2021

Editors

https://coppermind.net/w/api.php?action=query&format=json&list=allusers&augroup=editor&auprop=editcount&auwitheditsonly=1

NB: the percentages are a little iffy as Special: Statistics shows an edit-total which makes my % more like 25%.

<graph> {

 "version": 2,
 "width": 300,
 "height": 300,
 "data": [
   {
     // Data is retrieved from the MediaWiki API.  By default it uses current wiki's "Extension by category"
     "name": "table",
     "url": "wikiapi://coppermind.net/?action=query&format=json&list=allusers&auprop=editcount&aulimit=max&augroup=editor&auwitheditsonly=1",
     // We are only interested in the content of query.allusers subelement.
     "format": {"property": "query.allusers","type": "json"},
     "transform": [
       // sort in descending order using category size as the sort key
       {"type": "sort","by": "-editcount"},
       // To visualize, use "pie" transformation to add layout_start, layout_end, and layout_mid fields to each page object
       // These fields contain angles at which to start and stop drawing arcs. First element's start will be 0, and last element's end will be 360 degrees (in radians)
       {"type": "pie","field": "editcount"}
     ]
   }
 ],

// "legends": [{"title": "Legend","fill": "color"}],

 // Scales are like functions -- marks use them to convert a data value into a visual value, like x or y coordinate on the graph, or a color value.
 "scales": [
   {
     // This scale will be used to assign a color to each slice, using a palette of 10 colors
     "name": "color",
     "domain": {"data": "table","field": "name"},
     "range": "category20",
     "type": "ordinal"
   }
 ],
 "marks": [
   {
     // This mark draws the actual pie chart from the data source
     // Each element is an arc between layout_start and layout_end angles (as calculated by the pie transformation)
     // drawn with a given radius, stroke, and fill.
     "from": {"data": "table"},
     "type": "arc",
     "properties": {
       "enter": {
         "fill": {"scale": "color","field": "name"},
         "outerRadius": {"value": 200},
         "startAngle": {"field": "layout_start"},
         "endAngle": {"field": "layout_end"},
         "stroke": {"value": "white"},
         "strokeWidth": {"value": 1}
       }
     }
   },
   {
     // This mark draws labels around the pie chart after the pie chart has been drawn
     "type": "text",
     // Before drawing, we need to perform a number of calculations to figure out the exact location and orientation of the text
     "from": {
       "data": "table",
       "transform": [
         // For each data point (datum), each of these transformations will be ran in order.
         // Formula transformation evaluates the expression and assigns result to the datapoint
         // Size of the pie slice, in degrees:  sliceSize = (end - start) * 180 / Pi
         { "type": "formula", "field": "sliceSize", "expr": "(datum.layout_end - datum.layout_start)*180/PI" },
         // Draw text only if the slice of the arc is more than 2 degrees to avoid overcrowding
         { "type": "filter", "test": "datum.sliceSize > 2" },
         // Remove namespace from the text - keeps only text after the first ':' symbol, limits to 40 chars.
         { "type": "formula", "field": "name", "expr": "substring(datum.name, 1+indexof(datum.name,':'), 40) +': '+ datum.editcount + ' ('+ round(datum.sliceSize * 100 / 180) +'%)'" },
         // Determine the side of the pie chart we are on - left or right.
         { "type": "formula", "field": "invert", "expr": "datum.layout_mid*180/PI < 180 ? 1 : -1" },
         // If on the left, the text should be right-aligned (go from the rim inward)
         { "type": "formula", "field": "align", "expr": "datum.invert < 0 ? 'left' : 'right'" },
         // At what angle should the text be drawn relative to the point on the circle
         { "type": "formula", "field": "angle", "expr": "(datum.layout_mid*180/PI)-90*datum.invert" },
         // Make font smaller for smaller pie slices
         { "type": "formula", "field": "fontSize", "expr": "datum.sliceSize > 20 ? 15 : (datum.sliceSize > 10 ? 14 : 10)" },
         // Make font bold for largest pie slices 
         { "type": "formula", "field": "fontWeight", "expr": "datum.sliceSize > 15 ? 'bold' : 'normal'" }
       ]
     },
     "properties": {
       "enter": {
         // Use the fields calculated in the transformation to draw category names
         "align": {"field": "align"},
         "angle": {"field": "angle"},
         "baseline": {"value": "middle"},
         "fill": {"value": "black"},
         "fontSize": {"field": "fontSize"},
         "fontWeight": {"field": "fontWeight"},
         "radius": {"value": 270},
         "text": {"field": "name"},
         "theta": {"field": "layout_mid"}
       }
     }
   }
 ]

} </graph>

Keepers

<graph> {

 "version": 2,
 "width": 300,
 "height": 300,
 "data": [
   {
     // Data is retrieved from the MediaWiki API.  By default it uses current wiki's "Extension by category"
     "name": "table",
     "url": "wikiapi://coppermind.net/?action=query&format=json&list=allusers&auprop=editcount&aulimit=max&augroup=keeper&auwitheditsonly=1",
     // We are only interested in the content of query.allusers subelement.
     "format": {"property": "query.allusers","type": "json"},
     "transform": [
       // sort in descending order using category size as the sort key
       {"type": "sort","by": "-editcount"},
       // To visualize, use "pie" transformation to add layout_start, layout_end, and layout_mid fields to each page object
       // These fields contain angles at which to start and stop drawing arcs. First element's start will be 0, and last element's end will be 360 degrees (in radians)
       {"type": "pie","field": "editcount"}
     ]
   }
 ],

// "legends": [{"title": "Legend","fill": "color"}],

 // Scales are like functions -- marks use them to convert a data value into a visual value, like x or y coordinate on the graph, or a color value.
 "scales": [
   {
     // This scale will be used to assign a color to each slice, using a palette of 10 colors
     "name": "color",
     "domain": {"data": "table","field": "name"},
     "range": "category20",
     "type": "ordinal"
   }
 ],
 "marks": [
   {
     // This mark draws the actual pie chart from the data source
     // Each element is an arc between layout_start and layout_end angles (as calculated by the pie transformation)
     // drawn with a given radius, stroke, and fill.
     "from": {"data": "table"},
     "type": "arc",
     "properties": {
       "enter": {
         "fill": {"scale": "color","field": "name"},
         "outerRadius": {"value": 200},
         "startAngle": {"field": "layout_start"},
         "endAngle": {"field": "layout_end"},
         "stroke": {"value": "white"},
         "strokeWidth": {"value": 1}
       }
     }
   },
   {
     // This mark draws labels around the pie chart after the pie chart has been drawn
     "type": "text",
     // Before drawing, we need to perform a number of calculations to figure out the exact location and orientation of the text
     "from": {
       "data": "table",
       "transform": [
         // For each data point (datum), each of these transformations will be ran in order.
         // Formula transformation evaluates the expression and assigns result to the datapoint
         // Size of the pie slice, in degrees:  sliceSize = (end - start) * 180 / Pi
         { "type": "formula", "field": "sliceSize", "expr": "(datum.layout_end - datum.layout_start)*180/PI" },
         // Draw text only if the slice of the arc is more than 2 degrees to avoid overcrowding
         { "type": "filter", "test": "datum.sliceSize > 2" },
         // Remove namespace from the text - keeps only text after the first ':' symbol, limits to 40 chars.
         { "type": "formula", "field": "name", "expr": "substring(datum.name, 1+indexof(datum.name,':'), 40) +': '+ datum.editcount + ' ('+ round(datum.sliceSize * 100 / 180) +'%)'" },
         // Determine the side of the pie chart we are on - left or right.
         { "type": "formula", "field": "invert", "expr": "datum.layout_mid*180/PI < 180 ? 1 : -1" },
         // If on the left, the text should be right-aligned (go from the rim inward)
         { "type": "formula", "field": "align", "expr": "datum.invert < 0 ? 'left' : 'right'" },
         // At what angle should the text be drawn relative to the point on the circle
         { "type": "formula", "field": "angle", "expr": "(datum.layout_mid*180/PI)-90*datum.invert" },
         // Make font smaller for smaller pie slices
         { "type": "formula", "field": "fontSize", "expr": "datum.sliceSize > 20 ? 15 : (datum.sliceSize > 10 ? 14 : 10)" },
         // Make font bold for largest pie slices 
         { "type": "formula", "field": "fontWeight", "expr": "datum.sliceSize > 15 ? 'bold' : 'normal'" }
       ]
     },
     "properties": {
       "enter": {
         // Use the fields calculated in the transformation to draw category names
         "align": {"field": "align"},
         "angle": {"field": "angle"},
         "baseline": {"value": "middle"},
         "fill": {"value": "black"},
         "fontSize": {"field": "fontSize"},
         "fontWeight": {"field": "fontWeight"},
         "radius": {"value": 270},
         "text": {"field": "name"},
         "theta": {"field": "layout_mid"}
       }
     }
   }
 ]

} </graph>

Active Users

This is flawed as it shows total edits for all "active users" and so is overwhelmed by recent big editors <graph> {

 "version": 2,
 "width": 300,
 "height": 300,
 "data": [
   {
     // Data is retrieved from the MediaWiki API.  By default it uses current wiki's "Extension by category"
     "name": "table",
     "url": "wikiapi://coppermind.net/?action=query&format=json&list=allusers&auprop=editcount&aulimit=max&auactiveusers=1",
     // We are only interested in the content of query.allusers subelement.
     "format": {"property": "query.allusers","type": "json"},
     "transform": [
       // sort in descending order using category size as the sort key
       {"type": "sort","by": "-editcount"},
       // To visualize, use "pie" transformation to add layout_start, layout_end, and layout_mid fields to each page object
       // These fields contain angles at which to start and stop drawing arcs. First element's start will be 0, and last element's end will be 360 degrees (in radians)
       {"type": "pie","field": "editcount"}
     ]
   }
 ],

// "legends": [{"title": "Legend","fill": "color"}],

 // Scales are like functions -- marks use them to convert a data value into a visual value, like x or y coordinate on the graph, or a color value.
 "scales": [
   {
     // This scale will be used to assign a color to each slice, using a palette of 10 colors
     "name": "color",
     "domain": {"data": "table","field": "name"},
     "range": "category20",
     "type": "ordinal"
   }
 ],
 "marks": [
   {
     // This mark draws the actual pie chart from the data source
     // Each element is an arc between layout_start and layout_end angles (as calculated by the pie transformation)
     // drawn with a given radius, stroke, and fill.
     "from": {"data": "table"},
     "type": "arc",
     "properties": {
       "enter": {
         "fill": {"scale": "color","field": "name"},
         "outerRadius": {"value": 200},
         "startAngle": {"field": "layout_start"},
         "endAngle": {"field": "layout_end"},
         "stroke": {"value": "white"},
         "strokeWidth": {"value": 1}
       }
     }
   },
   {
     // This mark draws labels around the pie chart after the pie chart has been drawn
     "type": "text",
     // Before drawing, we need to perform a number of calculations to figure out the exact location and orientation of the text
     "from": {
       "data": "table",
       "transform": [
         // For each data point (datum), each of these transformations will be ran in order.
         // Formula transformation evaluates the expression and assigns result to the datapoint
         // Size of the pie slice, in degrees:  sliceSize = (end - start) * 180 / Pi
         { "type": "formula", "field": "sliceSize", "expr": "(datum.layout_end - datum.layout_start)*180/PI" },
         // Draw text only if the slice of the arc is more than 2 degrees to avoid overcrowding
         { "type": "filter", "test": "datum.sliceSize > 2" },
         // Remove namespace from the text - keeps only text after the first ':' symbol, limits to 40 chars.
         { "type": "formula", "field": "name", "expr": "substring(datum.name, 1+indexof(datum.name,':'), 40) +': '+ datum.editcount + ' ('+ round(datum.sliceSize * 100 / 180) +'%)'" },
         // Determine the side of the pie chart we are on - left or right.
         { "type": "formula", "field": "invert", "expr": "datum.layout_mid*180/PI < 180 ? 1 : -1" },
         // If on the left, the text should be right-aligned (go from the rim inward)
         { "type": "formula", "field": "align", "expr": "datum.invert < 0 ? 'left' : 'right'" },
         // At what angle should the text be drawn relative to the point on the circle
         { "type": "formula", "field": "angle", "expr": "(datum.layout_mid*180/PI)-90*datum.invert" },
         // Make font smaller for smaller pie slices
         { "type": "formula", "field": "fontSize", "expr": "datum.sliceSize > 20 ? 15 : (datum.sliceSize > 10 ? 14 : 10)" },
         // Make font bold for largest pie slices 
         { "type": "formula", "field": "fontWeight", "expr": "datum.sliceSize > 15 ? 'bold' : 'normal'" }
       ]
     },
     "properties": {
       "enter": {
         // Use the fields calculated in the transformation to draw category names
         "align": {"field": "align"},
         "angle": {"field": "angle"},
         "baseline": {"value": "middle"},
         "fill": {"value": "black"},
         "fontSize": {"field": "fontSize"},
         "fontWeight": {"field": "fontWeight"},
         "radius": {"value": 270},
         "text": {"field": "name"},
         "theta": {"field": "layout_mid"}
       }
     }
   }
 ]

} </graph>