Template:Pie chart: Difference between revisions
wp>Sdkb Adding footer parameter, from discussion at Wikipedia:Village_pump_(technical)#Pie_chart_troubles |
mNo edit summary Tag: 2017 source edit |
||
(3 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
<includeonly><div class=" | <includeonly> | ||
<templatestyles src="Template:Pie chart/styles.css" /> | |||
<div class="thumb t{{{thumb|right}}}"> | |||
<div class="thumbinner" style="width:202px"> | |||
<!-- Graph --> | <!-- Graph --> | ||
<div style="background-color:white;margin:auto;position:relative;width: | <div style="background-color:white;margin:auto;position:relative;width:200px;height:200px;overflow:hidden"> | ||
{{#if:{{{value15|}}}|{{Pie chart/slice|{{{color15|sienna}}}|{{#expr: | |||
{{{value1}}}+{{{value2}}}+{{{value3}}}+{{{value4}}}+{{{value5}}}+{{{value6}}}+{{{value7}}}+{{{value8}}}+{{{value9}}}+{{{value10}}}+{{{value11}}}+{{{value12}}}+{{{value13}}}+{{{value14}}}+{{{value15}}} | {{{value1}}}+{{{value2}}}+{{{value3}}}+{{{value4}}}+{{{value5}}}+{{{value6}}}+{{{value7}}}+{{{value8}}}+{{{value9}}}+{{{value10}}}+{{{value11}}}+{{{value12}}}+{{{value13}}}+{{{value14}}}+{{{value15}}} | ||
}}}}}} | }}}}}} | ||
{{#if:{{{value14|}}}|{{Pie chart/slice|{{{color14|sienna}}}|{{#expr: | |||
{{{value1}}}+{{{value2}}}+{{{value3}}}+{{{value4}}}+{{{value5}}}+{{{value6}}}+{{{value7}}}+{{{value8}}}+{{{value9}}}+{{{value10}}}+{{{value11}}}+{{{value12}}}+{{{value13}}}+{{{value14}}} | {{{value1}}}+{{{value2}}}+{{{value3}}}+{{{value4}}}+{{{value5}}}+{{{value6}}}+{{{value7}}}+{{{value8}}}+{{{value9}}}+{{{value10}}}+{{{value11}}}+{{{value12}}}+{{{value13}}}+{{{value14}}} | ||
}}}}}} | }}}}}} | ||
{{#if:{{{value13|}}}|{{Pie chart/slice|{{{color13|sienna}}}|{{#expr: | |||
{{{value1}}}+{{{value2}}}+{{{value3}}}+{{{value4}}}+{{{value5}}}+{{{value6}}}+{{{value7}}}+{{{value8}}}+{{{value9}}}+{{{value10}}}+{{{value11}}}+{{{value12}}}+{{{value13}}} | {{{value1}}}+{{{value2}}}+{{{value3}}}+{{{value4}}}+{{{value5}}}+{{{value6}}}+{{{value7}}}+{{{value8}}}+{{{value9}}}+{{{value10}}}+{{{value11}}}+{{{value12}}}+{{{value13}}} | ||
}}}}}} | }}}}}} | ||
{{#if:{{{value12|}}}|{{Pie chart/slice|{{{color12|sienna}}}|{{#expr: | |||
{{{value1}}}+{{{value2}}}+{{{value3}}}+{{{value4}}}+{{{value5}}}+{{{value6}}}+{{{value7}}}+{{{value8}}}+{{{value9}}}+{{{value10}}}+{{{value11}}}+{{{value12}}} | {{{value1}}}+{{{value2}}}+{{{value3}}}+{{{value4}}}+{{{value5}}}+{{{value6}}}+{{{value7}}}+{{{value8}}}+{{{value9}}}+{{{value10}}}+{{{value11}}}+{{{value12}}} | ||
}}}}}} | }}}}}} | ||
{{#if:{{{value11|}}}|{{Pie chart/slice|{{{color11|sienna}}}|{{#expr: | |||
{{{value1}}}+{{{value2}}}+{{{value3}}}+{{{value4}}}+{{{value5}}}+{{{value6}}}+{{{value7}}}+{{{value8}}}+{{{value9}}}+{{{value10}}}+{{{value11}}} | {{{value1}}}+{{{value2}}}+{{{value3}}}+{{{value4}}}+{{{value5}}}+{{{value6}}}+{{{value7}}}+{{{value8}}}+{{{value9}}}+{{{value10}}}+{{{value11}}} | ||
}}}}}} | }}}}}} | ||
{{#if:{{{value10|}}}|{{Pie chart/slice|{{{color10|sienna}}}|{{#expr: | |||
{{{value1}}}+{{{value2}}}+{{{value3}}}+{{{value4}}}+{{{value5}}}+{{{value6}}}+{{{value7}}}+{{{value8}}}+{{{value9}}}+{{{value10}}} | {{{value1}}}+{{{value2}}}+{{{value3}}}+{{{value4}}}+{{{value5}}}+{{{value6}}}+{{{value7}}}+{{{value8}}}+{{{value9}}}+{{{value10}}} | ||
}}}}}} | }}}}}} | ||
{{#if:{{{value9|}}}|{{Pie chart/slice|{{{color9|purple}}}|{{#expr: | |||
{{{value1}}}+{{{value2}}}+{{{value3}}}+{{{value4}}}+{{{value5}}}+{{{value6}}}+{{{value7}}}+{{{value8}}}+{{{value9}}} | {{{value1}}}+{{{value2}}}+{{{value3}}}+{{{value4}}}+{{{value5}}}+{{{value6}}}+{{{value7}}}+{{{value8}}}+{{{value9}}} | ||
}}}}}} | }}}}}} | ||
{{#if:{{{value8|}}}|{{Pie chart/slice|{{{color8|orange}}}|{{#expr: | |||
{{{value1}}}+{{{value2}}}+{{{value3}}}+{{{value4}}}+{{{value5}}}+{{{value6}}}+{{{value7}}}+{{{value8}}} | {{{value1}}}+{{{value2}}}+{{{value3}}}+{{{value4}}}+{{{value5}}}+{{{value6}}}+{{{value7}}}+{{{value8}}} | ||
}}}}}} | }}}}}} | ||
{{#if:{{{value7|}}}|{{Pie chart/slice|{{{color7|brown}}}|{{#expr: | |||
{{{value1}}}+{{{value2}}}+{{{value3}}}+{{{value4}}}+{{{value5}}}+{{{value6}}}+{{{value7}}} | {{{value1}}}+{{{value2}}}+{{{value3}}}+{{{value4}}}+{{{value5}}}+{{{value6}}}+{{{value7}}} | ||
}}}}}} | }}}}}} | ||
{{#if:{{{value6|}}}|{{Pie chart/slice|{{{color6|aqua}}}|{{#expr: | |||
{{{value1}}}+{{{value2}}}+{{{value3}}}+{{{value4}}}+{{{value5}}}+{{{value6}}} | {{{value1}}}+{{{value2}}}+{{{value3}}}+{{{value4}}}+{{{value5}}}+{{{value6}}} | ||
}}}}}} | }}}}}} | ||
{{#if:{{{value5|}}}|{{Pie chart/slice|{{{color5|fuchsia}}}|{{#expr: | |||
{{{value1}}}+{{{value2}}}+{{{value3}}}+{{{value4}}}+{{{value5}}} | {{{value1}}}+{{{value2}}}+{{{value3}}}+{{{value4}}}+{{{value5}}} | ||
}}}}}} | }}}}}} | ||
{{#if:{{{value4|}}}|{{Pie chart/slice|{{{color4|yellow}}}|{{#expr: | |||
{{{value1}}}+{{{value2}}}+{{{value3}}}+{{{value4}}} | {{{value1}}}+{{{value2}}}+{{{value3}}}+{{{value4}}} | ||
}}}}}} | }}}}}} | ||
{{#if:{{{value3|}}}|{{Pie chart/slice|{{{color3|blue}}}|{{#expr: | |||
{{{value1}}}+{{{value2}}}+{{{value3}}} | {{{value1}}}+{{{value2}}}+{{{value3}}} | ||
}}}}}} | }}}}}} | ||
{{#if:{{{value2|}}}|{{Pie chart/slice|{{{color2|green}}}|{{#expr: | |||
{{{value1}}}+{{{value2}}} | {{{value1}}}+{{{value2}}} | ||
}}}}}} | }}}}}} | ||
{{#if:{{{value1|}}}|{{Pie chart/slice|{{{color1|red}}}| | |||
{{{value1}}} | {{{value1}}} | ||
}}}} | }}}} | ||
<div style="position:absolute;left:0;top:0">[[File:Circle frame.svg|200px|link=]]</div> | |||
</div> | </div> | ||
<!-- Legend --> | <!-- Legend --> | ||
Line 111: | Line 70: | ||
}}{{#if:{{{label14|}}}|{{legend|{{{color14|sienna}}}|{{{label14}}} ({{{value14}}}%)}} | }}{{#if:{{{label14|}}}|{{legend|{{{color14|sienna}}}|{{{label14}}} ({{{value14}}}%)}} | ||
}}{{#if:{{{label15|}}}|{{legend|{{{color15|sienna}}}|{{{label15}}} ({{{value15}}}%)}} | }}{{#if:{{{label15|}}}|{{legend|{{{color15|sienna}}}|{{{label15}}} ({{{value15}}}%)}} | ||
}}{{#if:{{{other|}}}|{{legend|white|Other ({{#expr:100-{{{value1|0}}}-{{{value2|0}}}-{{{value3|0}}}-{{{value4|0}}}-{{{value5|0}}}-{{{value6|0}}}-{{{value7|0}}}-{{{value8|0}}}-{{{value9|0}}}-{{{value10|0}}}-{{{value11|0}}}-{{{value12|0}}}-{{{value13|0}}}-{{{value14|0}}}-{{{value15|0}}}}}%)}}}} | |||
}}{{#if:{{{other|}}}|{{legend|white|Other ({{#expr:100-{{{value1|0}}}-{{{value2|0}}}-{{{value3|0}}}-{{{value4|0}}}-{{{value5|0}}}-{{{value6|0}}}-{{{value7|0}}}-{{{value8|0}}}-{{{value9|0}}}-{{{value10|0}}}-{{{value11|0}}}-{{{value12|0}}}-{{{value13|0}}}-{{{value14|0}}}-{{{value15 | |||
</div> | </div> | ||
</div></div></includeonly><noinclude> | </div> | ||
</div> | |||
</includeonly> | |||
<noinclude> | |||
{{documentation}} | {{documentation}} | ||
<!-- Add categories to the /doc subpage, interwikis to Wikidata. | <!-- Add categories to the /doc subpage, interwikis to Wikidata. --> | ||
</noinclude> | </noinclude> |
Latest revision as of 16:19, 31 July 2024
Usage
The labels and values 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.
{{Pie chart | radius = 100 | thumb = | caption = | other = | label1 =remember | value1 =16.6 | color1 =2 | label2 =understand | value2 =16.6 | color2 =3 | label3 =apply | value3 =16.6 | color3 =5 | label4 =analyze | value4 =16.6 | color4 =6 | label5 =evaluate | value5 =16.6 | color5 =9 | label6 =design | value6 =16.6 | color6 =10 }}
- The parameter
|radius=
specifies the radius of the pie chart in pixels. Do not include a "px" suffix. If omitted, it will default to 100. - The parameter
|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
. - The parameter
|caption=
specifies a string of text that appears on a line just before the legend. - The parameter
|footer=
specifies a string of text that appears below the legend. - The parameter
|other=
, if specified, will cause an "Other" item to appear in the legend. - 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. Also note that it is shown in the legend as written (just after the label), without any rounding or other reformatting. - Each
|colorN=
is a CSS color code or name. If omitted, it will default to the following hues:
- light blue
- strong blue
- light green
- strong green
- fuchsia
- red
- light orange
- strong orange
- light purple
- strong purple
- light yellow
- brown
Limitations
- Minor issues with printing exist. We also need to implement a good fallback for use with the Wikipedia book tool.
- The values need to be percentages.
- 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; tested with version 26.)
- No labels can be put on the slices themselves.
- Inherently, it is not possible to save a copy of the chart using the browser's "Save Image" function.
- Max. number of slices that can be displayed: 30
How it works
This is an experimental template that draws pie charts using a single image, a lot of (inline) CSS code generated by parser functions, and absolutely no JavaScript. It 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 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.
Example
The following example of Template:Pie chart generates the pie chart shown at right.
{{Pie chart | caption=[[Religion in the Czech Republic]] as of 2001. | other = yes | label1 = [[Atheist]]s and [[Agnosticism|agnostics]] | value1 = 59 | color1 = silver | label2 = [[Catholic Church|Catholics]] | value2 = 26.8 | color2 = #008 | label3 = [[Protestantism|Protestants]] | value3 = 2.5 | color3 = #08f }}
See also
Formatted/colorized template source for Template:Pie chart
|
---|
<includeonly>
<templatestyles src="Template:Pie chart/styles.css" />
<div class="thumb t{{{thumb|right}}}">
<div class="thumbinner" style="width:202px">
<!-- Graph -->
<div style="background-color:white;margin:auto;position:relative;width:200px;height:200px;overflow:hidden">
{{#if:{{{value15|}}} |
Formatted/colorized template source for Template:Pie chart/slice
|
---|
<includeonly><div style="border:solid transparent;position:absolute;width:{{{radius|100}}}px;line-height:0;{{#switch:{{#expr:floor({{{2}}}/25)}}
<!-- 0-25% --> |
Formatted/colorized template source for Template:Legend
|
---|
<includeonly><!--
--><templatestyles src="Legend/styles.css" /><!--
--><div class="legend"><!--
--><span class="legend-color" style="<!--
-->{{#if:{{{border|}}} |
Formatted/colorized template source for Template:Trim
|
---|
<includeonly>{{safesubst:#if:1|{{{1|}}}}}</includeonly><noinclude> {{Documentation}} </noinclude>: |