Package: django_chartit
Django Chartit is a Django app that can be used to easily create charts from the data
in your database. The charts are rendered usingHighchartsandjQueryJavaScript libraries. Data in your database can be plotted as simple line
charts, column charts, area charts, scatter plots, and many more chart types.
Data can also be plotted as Pivot Charts where the data is grouped and/or
pivoted by specific column(s).Changelog0.2.9 (January 17, 2017)Enable pylint during testing but don’t block Travis-CI on failures. Closes#42.Handle unicode data in pie and scatter plot charts under Python 2.7.PR#47.0.2.8 (December 4, 2016)PivotChartandPivotDataPoolwill be deprecated soon. Both
are marked with deprecation warnings. There is a lot of duplication and
special handling between those classes and theChartandDataPoolclasses which make it harder to expand the feature set for django-chartit.
The next release will focus on consolidating all the functionality intoChartandDataPoolso that users will still be able to draw pivot
charts. You will have to construct your pivot charts manually though!DataPoolterms now supports model properties. Fixes#35.
Model properties arenotsupported forPivotDataPool!WARNING: when using model properties chartit can’t make use of
``QuerySet.values()`` internally. This means results will not be groupped
by the values of the fields you supplied. This may lead to unexpected
query results/charts!DataPoolnow supportsRawQuerySetas data source. Fixes#44.RawQuerySetisnotsupported forPivotDataPool!WARNING: when using ``RawQuerySet`` don’t use double underscores
in field names because these are interpreted internally by chartit and
will cause exceptions. For example don’t do this
``SELECT AVG(rating) as rating__avg`` instead write it as
``SELECT AVG(rating) as rating_avg``!README now tells how to executedemoproject/0.2.7 (September 14, 2016)Don’t usesuper(self.__class__)b/c that breaks chart class
inheritance.
Fixes#410.2.6 (August 16, 2016)Mergechartit_tests/withdemoproject/Load test DB with real data to use during testingAdd more testsUpdate the path to demoproject.settings when building docs. Fixes
a problem which caused some API docs to be emptyFix ValueError: not enough values to unpack (expected 2, got 0)
with PivotChart when the QuerySet returns empty dataDropped requirement onsimplejsonProperly handle unicode data in Pivot charts. Fixes#5Demo project updated with Chart and PivotChart examples of
rendering DateField values on the X axisAllow charting ofextra()orannotate()fields. Fixes#8and#12RefactorRecursiveDefaultDictto allow chart objects to be
serialized to/from cache. Fixes#10Add information about supported 3rd party JavaScript versions. Fixes#140.2.5 (August 3, 2016)Workaround Python 3 vs. Python 2 list sort issue which breaks
charts with multiple data sources displayed on the same axis!Make demoproject/ compatible with Django 1.100.2.4 (August 2, 2016)Fix forget_all_field_names()andget_field_by_name()removal
in Django 1.10. Fixes#39Updated for django.db.sql.query.Query.aggregates removal0.2.3 (July 30, 2016)New to_json() method for charts. Useful for creating Highcharts in AJAXMerged withdjango-chartit2fork byGrant McConnaugheywhich adds
Python 3 and latest Django 1.8.x and 1.9.x supportAllow dictionary fields in conjunction with lambda fields. Closes#26Documentation improvementsLots of code cleanups and style improvements0.2.2 as django-chartit2 (January 28, 2016)Fixed another issue that prevented installation via PyPI0.2.0 as django-chartit2 (January 20, 2016):Fixed issue that could prevent installation via PyPI0.1 (November 5, 2011)Initial release of django-chartitFeaturesPlot charts from models.Plot data from multiple models on the same axis on a chart.Plot pivot charts from models. Data can be pivoted by across multiple
columns.Legend pivot charts by multiple columns.Combine data from multiple models to plot on same pivot charts.Plot a pareto chart, paretoed by a specific column.Plot only a top few items per category in a pivot chart.Python 3 compatibilityDjango 1.8 and 1.9 compatibilityDocumentation to ReadTheDocsAutomated testing via Travis CITest coverage tracking via CoverallsInstallationYou can install Django-Chartit from PyPI. Just do$ pip install django_chartitThen, addchartittoINSTALLED_APPSin “settings.py”.You also need supporting JavaScript libraries. See theRequired JavaScript Librariessection for more details.How to UsePlotting a chart or pivot chart on a webpage involves the following steps.Create aDataPoolorPivotDataPoolobject that specifies what data
you need to retrieve and from where.Create aChartorPivotChartobject to plot the data in theDataPoolorPivotDataPoolrespectively.Return theChart/PivotChartobject from a djangoviewfunction
to the django template.Use theload_chartstemplate tag to load the charts to HTML tags with
specificids.It is easier to explain the steps above with examples. So read on.How to Create ChartsHere is a short example of how to create a line chart. Let’s say we have a
simple model with 3 fields - one for month and two for temperatures of Boston
and Houston.class MonthlyWeatherByCity(models.Model):
    month = models.IntegerField()
    boston_temp = models.DecimalField(max_digits=5, decimal_places=1)
    houston_temp = models.DecimalField(max_digits=5, decimal_places=1)And let’s say we want to create a simple line chart of month on the x-axis
and the temperatures of the two cities on the y-axis.from chartit import DataPool, Chart

def weather_chart_view(request):
    #Step 1: Create a DataPool with the data we want to retrieve.
    weatherdata = \
        DataPool(
           series=
            [{'options': {
               'source': MonthlyWeatherByCity.objects.all()},
              'terms': [
                'month',
                'houston_temp',
                'boston_temp']}
             ])

    #Step 2: Create the Chart object
    cht = Chart(
            datasource = weatherdata,
            series_options =
              [{'options':{
                  'type': 'line',
                  'stacking': False},
                'terms':{
                  'month': [
                    'boston_temp',
                    'houston_temp']
                  }}],
            chart_options =
              {'title': {
                   'text': 'Weather Data of Boston and Houston'},
               'xAxis': {
                    'title': {
                       'text': 'Month number'}}})

    #Step 3: Send the chart object to the template.
    return render_to_response({'weatherchart': cht})And you can use theload_chartsfilter in the django template to render
the chart.<head>
    <!-- code to include the highcharts and jQuery libraries goes here -->
    <!-- load_charts filter takes a comma-separated list of id's where -->
    <!-- the charts need to be rendered to                             -->
    {% load chartit %}
    {{ weatherchart|load_charts:"container" }}
</head>
<body>
    <div id='container'> Chart will be rendered here </div>
</body>How to Create Pivot ChartsHere is an example of how to create a pivot chart. Let’s say we have the
following model.class DailyWeather(models.Model):
    month = models.IntegerField()
    day = models.IntegerField()
    temperature = models.DecimalField(max_digits=5, decimal_places=1)
    rainfall = models.DecimalField(max_digits=5, decimal_places=1)
    city = models.CharField(max_length=50)
    state = models.CharField(max_length=2)We want to plot a pivot chart of month (along the x-axis) versus the average
rainfall (along the y-axis) of the top 3 cities with highest average
rainfall in each month.from django.db.models import Avg
from chartit import PivotDataPool, PivotChart

def rainfall_pivot_chart_view(request):
    # Step 1: Create a PivotDataPool with the data we want to retrieve.
    rainpivotdata = PivotDataPool(
        series=[{
            'options': {
                'source': DailyWeather.objects.all(),
                'categories': ['month'],
                'legend_by': 'city',
                'top_n_per_cat': 3,
            },
            'terms': {
                'avg_rain': Avg('rainfall'),
            }
        }]
    )

    # Step 2: Create the PivotChart object
    rainpivcht = PivotChart(
        datasource=rainpivotdata,
        series_options=[{
            'options': {
                'type': 'column',
                'stacking': True
            },
            'terms': ['avg_rain']
        }],
        chart_options={
            'title': {
                'text': 'Rain by Month in top 3 cities'
            },
            'xAxis': {
                'title': {
                    'text': 'Month'
                }
            }
        }
    )

    # Step 3: Send the PivotChart object to the template.
    return render_to_response({'rainpivchart': rainpivcht})And you can use theload_chartsfilter in the django template to render
the chart.<head>
    <!-- code to include the highcharts and jQuery libraries goes here -->
    <!-- load_charts filter takes a comma-separated list of id's where -->
    <!-- the charts need to be rendered to                             -->
    {% load chartit %}
    {{ rainpivchart|load_charts:"container" }}
</head>
<body>
    <div id='container'> Chart will be rendered here </div>
</body>Rendering multiple chartsIt is possible to render multiple charts in the same template. The first
argument toload_chartsis the Chart object or a list of Chart objects,
and the second is a comma separated list of HTML IDs where the charts will
be rendered.When calling Django’srenderyou have to pass all you charts as a list:return render(request, 'index.html',
             {
                'chart_list' : [chart_1, chart_2],
             }
        )Then in your template you have to use the proper syntax:<head>
    {% load chartit %}
    {{ chart_list|load_charts:"chart_1,chart_2" }}
</head>
<body>
    <div id="chart_1">First chart will be rendered here</div>
    <div id="chart_2">Second chart will be rendered here</div>
</body>DemoThe above examples are just a brief taste of what you can do with
Django-Chartit. For more examples and to look at the charts in actions, check
out thedemoproject/directory. To execute the demo run the commandscd demoproject/
PYTHONPATH=../ python ./manage.py migrate
PYTHONPATH=../ python ./manage.py runserverDocumentationFull documentation is availablehere.Required JavaScript LibrariesThe following JavaScript Libraries are required for using Django-Chartit.jQuery- versions 1.6.4 and 1.7 are known
to work well with django-chartit.Highcharts- versions 2.1.7 and 2.2.0 are known
to work well with django-chartit.NoteWhileDjango-Chartititself is licensed under the BSD license,Highchartsis licensed under theHighcharts licenseandjQueryis licensed under both
MIT License and GNU General Public License (GPL) Version 2. It is your own
responsibility to abide by respective licenses when downloading and using
the supporting JavaScript libraries.