Template:Pie chart
This is a template that draws pie charts using a single image, a lot of (inline) CSS code generated by parser functions, and absolutely no JavaScript. Some details of how it works are given below.
Usage
lembaThe labels, values, and colors of up to 30 slices may be specified. All the parameters for six slices are included below; to include more slices, copy the code for one of the others, changing the digit at the end of each parameter name. When making a pie chart, ensure that the segments are ordered by size (largest to smallest) and in a clockwise direction.
{{Pie chart | thumb = | radius = | caption= | footer = | label1 = | value1 = | color1 = | label2 = | value2 = | color2 = | label3 = | value3 = | color3 = | label4 = | value4 = | color4 = | label5 = | value5 = | color5 = | label6 = | value6 = | color6 = | other = | other-color = }}
Parameters
lemba|thumb=
specifies which side of the page the chart is floated to and defaults toright
, as with image files. To make the chart appear on the left side of the page, specify|thumb=left
.|radius=
specifies the radius of the pie chart in pixels. Do not include a "px" suffix. If omitted, it will default to 100.|caption=
specifies a string of text that appears on a line just before the legend.|footer=
specifies a string of text that appears below the legend.|other=
, if set equal to any visible string (even "0" or "no"), an "Other" item will appear in the legend, corresponding to the final slice that makes the values add up to 100. (If the total is already over 100, then the "Other" percentage will be negative.)|other-color=
can be used to override the default white color of the "Other" slice.- Each
|labelN=
is a string of text that appears in the legend entry for a slice. Omitting it will cause a legend entry to not be shown for that slice. - Each
|valueN=
is the percentage that the slice represents. Do not include the percent sign (e.g., for eighty percent, use the value "80", not "80%" or ".80"). Collectively, the values must add to 100 or less (in the latter case, a final slice completes the pie, whether|other=
is specified or not). Also note that each value is shown in the legend exactly as written, without any rounding or other reformatting. - Each
|colorN=
is a CSS color code or name. If omitted, the default color palette seen in the pie chart to the right is used. If you need to graph more than 14 values (not counting the "Other" slice), then you should specify|color15=
onwards in the template call.
Limitations
lemba- Google Chrome and Safari do not appear to anti-alias borders, so the lines are a bit jagged. (For Chrome, this issue seems to be resolved, as of version 26.)
- Due to how the graphing is implemented, it is not possible to save a copy of the chart using the browser's "Save Image" function (however, a screenshot can be taken).
- If
|other=
is set, the final slice is always labeled as "Other" in the legend. This is not configurable. If you don't like that, just add to the template call another slice with the appropriate value (to sum to 100) and the desired label, and don't use|other=
. - No labels can be put on the slices themselves.
- The maximum number of slices that can be displayed is 30.
- Currently the default colors used for slices 15 onwards are all the same as the default color of slice 14.
- If the specified values add to 100 and
|other=
is set, the calculated percentage for that slice can sometimes turn out to be very strange (e.g., "1.4210854715202E-14%" instead of "0%")
Examples
lembaThe following code generates the pie chart shown at right. Note that the default chart size and colors are used, and the value of "1" for the "other" parameter is only used for its "truth value" as a visible string—i.e., to say, yes, we want an "Other" entry in the legend (the same chart would result if "0" were used).
{{Pie chart |value1 = 42 |label1 = One |value2 = 32 |label2 = Two |value3 = 12 |label3 = Three |value4 = 3 |label4 = Four |value5 = 2 |label5 = Five |value6 = 1 |label6 = Six |other = 1 }}
Here's a more real-world example.
{{Pie chart | caption= [[Religion in the Czech Republic]] in 2001. | label1 = [[Atheist]]s and [[agnostic]]s | value1 = 59 | color1 = darkgreen | label2 = [[Catholic]]s | value2 = 26.8 | color2 = brown | label3 = [[Protestant]]s | value3 = 2.5 | color3 = #08f | other = yes | other-color = silver }}
How it works
lembaThis template uses a technique for drawing diagonal lines in CSS exploiting the fact that borders set on elements are miter joined. Thus, it is possible to set one border to an opaque color, with the others fully transparent, to form a diagonal line. The angle of the line can be controlled by adjusting the widths of two adjacent borders (one of them opaque) relative to each other.
Pie slices are drawn in clockwise order in a counterclockwise direction. These pie slices are positioned:
- Inside a square element of (2 * radius)x(2 * radius) pixels
- with
border-radius: radiuspx
for a circular shape - with a white (or other specified color) background visible in the empty space that occurs if the "other" slice is present
- and with
overflow: hidden;
set.
This allows only the part of each slice that is inside the circle to be visible on the page.
Most of the code in {{Pie chart/slice}} is divided into five sections, the first four corresponding to quadrants of the circle and the last to cleanly cover the case in which one slice occupies 100% of the chart.
See also
lemba- {{Brick chart}}
- {{Composition bar}}
- Module:Chart