Added Pie chart support to StatisticsChart plugin
svn: r3989
This commit is contained in:
parent
c4871857fe
commit
19dd2dccb0
@ -1,3 +1,9 @@
|
||||
2005-01-29 Eero Tamminen <eerot@sf>
|
||||
* src/plugins/StatisticsChart.py:
|
||||
- Added support for Don's Pie charts + color styles for it
|
||||
- Added bar_items option to decide when Report is going to use
|
||||
Bar charts and when Pie charts
|
||||
|
||||
2005-01-29 Eero Tamminen <eerot@sf>
|
||||
* src/plugins/StatisticsChart.py:
|
||||
- Add first versions of following statistics:
|
||||
|
@ -447,15 +447,16 @@ class StatisticsChart(Report.Report):
|
||||
filterfun = filters[filter_num]
|
||||
|
||||
options = options_class.handler.options_dict
|
||||
self.bar_items = options['bar_items']
|
||||
year_from = options['year_from']
|
||||
year_to = options['year_to']
|
||||
gender = options['gender']
|
||||
|
||||
# title needs both data extraction method name + gender name
|
||||
if gender == Person.male:
|
||||
genders = _("men")
|
||||
genders = _("Men")
|
||||
elif gender == Person.female:
|
||||
genders = _("women")
|
||||
genders = _("Women")
|
||||
else:
|
||||
genders = None
|
||||
|
||||
@ -477,11 +478,11 @@ class StatisticsChart(Report.Report):
|
||||
# generate sorted item lookup index index
|
||||
lookup = self.index_items(table[1], sortby, reverse)
|
||||
# document heading
|
||||
mapping['title'] = table[0]
|
||||
mapping['chart_title'] = table[0]
|
||||
if genders:
|
||||
heading = "%(genders)s born %(year_from)04d-%(year_to)04d: %(title)s" % mapping
|
||||
heading = "%(genders)s born %(year_from)04d-%(year_to)04d: %(chart_title)s" % mapping
|
||||
else:
|
||||
heading = "Persons born %(year_from)04d-%(year_to)04d: %(title)s" % mapping
|
||||
heading = "Persons born %(year_from)04d-%(year_to)04d: %(chart_title)s" % mapping
|
||||
self.data.append((heading, table[1], lookup))
|
||||
#DEBUG
|
||||
#print heading
|
||||
@ -518,25 +519,13 @@ class StatisticsChart(Report.Report):
|
||||
Define the graphics styles used by the report. Paragraph definitions
|
||||
have already been defined in the document. The styles used are:
|
||||
|
||||
SC-bar - A red bar with 0.5pt black line.
|
||||
SC-text - Contains the SC-Name paragraph style used for
|
||||
the individual's name
|
||||
SC-title - Contains the SC-Title paragraph style used for
|
||||
the title of the document
|
||||
SC-text - Contains the SC-Name paragraph style used for
|
||||
the individual's name
|
||||
SC-color-N - The colors for drawing pies.
|
||||
SC-bar - A red bar with 0.5pt black line.
|
||||
"""
|
||||
g = BaseDoc.GraphicsStyle()
|
||||
g.set_line_width(0.8)
|
||||
g.set_color((0,0,0))
|
||||
g.set_fill_color((255,0,0))
|
||||
self.doc.add_draw_style("SC-bar",g)
|
||||
|
||||
g = BaseDoc.GraphicsStyle()
|
||||
g.set_paragraph_style("SC-Text")
|
||||
g.set_color((0,0,0))
|
||||
g.set_fill_color((255,255,255))
|
||||
g.set_line_width(0)
|
||||
self.doc.add_draw_style("SC-text",g)
|
||||
|
||||
g = BaseDoc.GraphicsStyle()
|
||||
g.set_paragraph_style("SC-Title")
|
||||
g.set_color((0,0,0))
|
||||
@ -545,17 +534,111 @@ class StatisticsChart(Report.Report):
|
||||
g.set_width(self.doc.get_usable_width())
|
||||
self.doc.add_draw_style("SC-title",g)
|
||||
|
||||
g = BaseDoc.GraphicsStyle()
|
||||
g.set_paragraph_style("SC-Text")
|
||||
g.set_color((0,0,0))
|
||||
g.set_fill_color((255,255,255))
|
||||
g.set_line_width(0)
|
||||
self.doc.add_draw_style("SC-text",g)
|
||||
|
||||
width = 0.8
|
||||
self.colors = 7
|
||||
# red
|
||||
g = BaseDoc.GraphicsStyle()
|
||||
g.set_paragraph_style('SC-Text')
|
||||
g.set_color((0,0,0))
|
||||
g.set_fill_color((255,0,0))
|
||||
g.set_line_width(width)
|
||||
self.doc.add_draw_style("SC-color-0",g)
|
||||
# green
|
||||
g = BaseDoc.GraphicsStyle()
|
||||
g.set_paragraph_style('SC-Text')
|
||||
g.set_color((0,0,0))
|
||||
g.set_fill_color((0,255,0))
|
||||
g.set_line_width(width)
|
||||
self.doc.add_draw_style("SC-color-1",g)
|
||||
# blue
|
||||
g = BaseDoc.GraphicsStyle()
|
||||
g.set_paragraph_style('SC-Text')
|
||||
g.set_color((0,0,0))
|
||||
g.set_fill_color((0,0,255))
|
||||
g.set_line_width(width)
|
||||
self.doc.add_draw_style("SC-color-2",g)
|
||||
# yellow
|
||||
g = BaseDoc.GraphicsStyle()
|
||||
g.set_paragraph_style('SC-Text')
|
||||
g.set_color((0,0,0))
|
||||
g.set_fill_color((255,255,0))
|
||||
g.set_line_width(width)
|
||||
self.doc.add_draw_style("SC-color-3",g)
|
||||
# purple
|
||||
g = BaseDoc.GraphicsStyle()
|
||||
g.set_paragraph_style('SC-Text')
|
||||
g.set_color((0,0,0))
|
||||
g.set_fill_color((255,0,255))
|
||||
g.set_line_width(width)
|
||||
self.doc.add_draw_style("SC-color-4",g)
|
||||
# cyan
|
||||
g = BaseDoc.GraphicsStyle()
|
||||
g.set_paragraph_style('SC-Text')
|
||||
g.set_color((0,0,0))
|
||||
g.set_fill_color((0,255,255))
|
||||
g.set_line_width(width)
|
||||
self.doc.add_draw_style("SC-color-5",g)
|
||||
# gray
|
||||
g = BaseDoc.GraphicsStyle()
|
||||
g.set_paragraph_style('SC-Text')
|
||||
g.set_color((0,0,0))
|
||||
g.set_fill_color((200,200,200))
|
||||
g.set_line_width(width)
|
||||
self.doc.add_draw_style("SC-color-6",g)
|
||||
|
||||
g = BaseDoc.GraphicsStyle()
|
||||
g.set_color((0,0,0))
|
||||
g.set_fill_color((255,0,0))
|
||||
g.set_line_width(width)
|
||||
self.doc.add_draw_style("SC-bar",g)
|
||||
|
||||
|
||||
def write_report(self):
|
||||
"output the selected statistics..."
|
||||
|
||||
for data in self.data:
|
||||
self.doc.start_page()
|
||||
self.output_chart(data[0], data[1], data[2])
|
||||
if len(data[2]) < self.bar_items:
|
||||
self.output_piechart(data[0], data[1], data[2])
|
||||
else:
|
||||
self.output_barchart(data[0], data[1], data[2])
|
||||
self.doc.end_page()
|
||||
|
||||
|
||||
def output_chart(self, title, data, lookup):
|
||||
def output_piechart(self, title, data, lookup):
|
||||
|
||||
# set layout variables
|
||||
middle = self.doc.get_usable_width() / 2
|
||||
|
||||
# start output
|
||||
self.doc.center_text('SC-title', title, middle, 0)
|
||||
yoffset = ReportUtils.pt2cm(self.doc.style_list['SC-Title'].get_font().get_size())
|
||||
|
||||
# collect data for output
|
||||
color = 0
|
||||
chart_data = []
|
||||
for key in lookup:
|
||||
style = "SC-color-%d" % color
|
||||
# graphics style, value, and it's label
|
||||
chart_data.append((style, data[key], key))
|
||||
color = (color+1) % self.colors
|
||||
|
||||
# output data...
|
||||
radius = middle - 2
|
||||
yoffset = yoffset + 1 + radius
|
||||
ReportUtils.draw_pie_chart(self.doc, middle, yoffset, radius, chart_data, -90)
|
||||
yoffset = yoffset + radius + 1
|
||||
ReportUtils.draw_legend(self.doc, 2, yoffset, chart_data)
|
||||
|
||||
|
||||
def output_barchart(self, title, data, lookup):
|
||||
|
||||
pt2cm = ReportUtils.pt2cm
|
||||
font = self.doc.style_list['SC-Text'].get_font()
|
||||
@ -626,7 +709,8 @@ class StatisticsChartOptions(ReportOptions.ReportOptions):
|
||||
'reverse' : 0,
|
||||
'year_from' : 1700,
|
||||
'year_to' : time.localtime()[0],
|
||||
'no_years' : 0
|
||||
'no_years' : 0,
|
||||
'bar_items' : 8
|
||||
}
|
||||
for key in _Extract.extractors:
|
||||
self.options_dict[key] = 0
|
||||
@ -643,11 +727,13 @@ class StatisticsChartOptions(ReportOptions.ReportOptions):
|
||||
["Do not sort in reverse", "Sort in reverse"],
|
||||
True),
|
||||
'year_from' : ("=num", "Birth year from which to include people",
|
||||
"earlier than 'year_to' value"),
|
||||
"Earlier than 'year_to' value"),
|
||||
'year_to' : ("=num", "Birth year until which to include people",
|
||||
"smaller than %d" % self.options_dict['year_to']),
|
||||
"Smaller than %d" % self.options_dict['year_to']),
|
||||
'no_years' : ("=0/1", "Whether to include people without birth years",
|
||||
["Do not include", "Include"], True)
|
||||
["Do not include", "Include"], True),
|
||||
'bar_items' : ("=num", "Use barchart instead of piechart with this many or more items",
|
||||
"Number of items with which piecharts still look good...")
|
||||
}
|
||||
for key in _Extract.extractors:
|
||||
self.options_help[key] = ("=0/1", _Extract.extractors[key][0],
|
||||
@ -765,6 +851,13 @@ class StatisticsChartOptions(ReportOptions.ReportOptions):
|
||||
tip = _("Select which genders are included into statistics.")
|
||||
dialog.add_option(_("Genders included"), self.gender_menu, tip)
|
||||
|
||||
# max. pie item selection
|
||||
tip = _("With fewer items pie chart and legend will be used instead of a bar chart.")
|
||||
self.bar_items = gtk.Entry(2)
|
||||
self.bar_items.set_text(str(self.options_dict['bar_items']))
|
||||
dialog.add_option("Min. bar char items", self.bar_items, tip)
|
||||
|
||||
# -------------------------------------------------
|
||||
# List of available charts on a separate option tab
|
||||
idx = 0
|
||||
half = (len(_Extract.extractors)+1)/2
|
||||
@ -786,7 +879,7 @@ class StatisticsChartOptions(ReportOptions.ReportOptions):
|
||||
hbox.show_all()
|
||||
|
||||
# Note about children
|
||||
label = gtk.Label(_("Note that children can be both biological or adopted."))
|
||||
label = gtk.Label(_("Note that both biological and adopted children are taken into account."))
|
||||
dialog.add_frame_option("Chart Selection", "", label)
|
||||
|
||||
|
||||
@ -800,6 +893,7 @@ class StatisticsChartOptions(ReportOptions.ReportOptions):
|
||||
self.options_dict['year_from'] = int(self.from_box.get_text())
|
||||
self.options_dict['no_years'] = int(self.no_years.get_active())
|
||||
self.options_dict['gender'] = _options.genders[self.gender_menu.get_active()][0]
|
||||
self.options_dict['bar_items'] = int(self.bar_items.get_text())
|
||||
for key in _Extract.extractors:
|
||||
self.options_dict[key] = int(self.charts[key].get_active())
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user