Djangoでグラフ(グラフ)を描く

django-google-charts

多くのWeb開発者は、図を使用して比較的大量のデータを視覚化する必要に直面することがあります(以下、これをグラフと呼びますが、これは完全に真実ではありません)。 このタスクは新しいものではなく、ネットワーク上には既製のソリューションが数多くあります。画像、Canvas、SVG、Flash、Silverlightを使用して、サーバー側とクライアント側で作業するソリューションです。

この記事では、 django-google-chartsと、Djangoを実行しているサイトでのプロットにGoogle Chart Toolsを使用するいくつかの機能について説明します

多くの場合、グラフをページに追加する必要がある場合、開発者は最も抵抗の少ないパスに従います。インターネット上のサンプルからJavaScriptをコピーし、アプリケーションからのデータを何らかの方法で表示します。 次のようになります:

var chart_data = [ {% for row in chart_data %} [{{ row.0 }}, {{ row.1 }}], {% endfor %} ]; 

なぜこれが悪いのですか?

一時的な解決策として、この設計はまだ適していますが、それ以上ではありません。

問題の声明


グラフを描くための良い解決策:
  1. サイトに新しいグラフィックを簡単かつ明確に追加し、不要なものを削除できます。
  2. 一般的な要素(配色など)を決定するためのDRY原則に準拠しています。
  3. 再利用できます。
  4. 新しいAPIを発明しません。

ソリューションオプション


django-google-chartsチャート作成アプリケーションは、私の現在のプロジェクトの小さなハックから生まれました。 Alarma:これは最初の公開リリースであり、奇妙なバグが発生する可能性があります。 訂正やコメントを歓迎します。

設置

 $ pip install django-google-charts #  $ easy_install django-google-charts 

'googlecharts'INSTALLED_APPS追加します。

仕組み(一般的なビュー)

 {% load googlecharts %} {% googlecharts %} {% data  " " %} {# ()   #} {% col "" "" %}...{% endcol %} {#  #} {% col "" "" %}...{% endcol %} {#   #} ... {% enddata %} {% options " " %} {# ()   #} ... {% endoptions %} {% graph "#id" "" "" %} {#   #} {% endgooglecharts %} 

各タグの目的について少し説明します。

{% googlecharts %}...{% endgooglecharts %}

必要なスクリプトを接続し、構造全体のコンテナです。 面白くない。

{% data "" %}...{% enddata %}

名前付きデータセット。 名前を省略でき"default""default"取得)。

{% col "" "" %}...{% endcol %}

フォーマット。 Google Visualization APIのデータタイプは次のとおりです。

 'string' 'number' 'boolean' 'date' 'datetime' 'timeofday' 

詳細はドキュメントをご覧ください。

特殊変数valはタグ内で渡されます。この場所でフォーマットできます:

 {% col "string" "Date" %}'{{ val|date:"M j" }}'{% endcol %} {# ,  #} {% col "number" %}{{ val|floatformat:2 }}{% endcol %} 

結果は宣言された型に対応する必要があります。 文字列自体を引用符で囲みません。

例。 次のコンテキスト変数を{% data %}ブロックに渡したと仮定します。

 [['foo', 32], ['bar', 64], ['baz', 96]] 

入力行の要素数に応じて、2つのタグ{% col %}が必要です。 最初のものは、入力 'foo'、 'bar'および 'baz'を受け取ります。 それぞれ、32、64、および96。実装(最も単純な)は次のようになります。

 {% col "string" "Name" %}"{{ val }}"{% endcol %} {% col "number" "Value" %}{{ val }}{% endcol %} 

{% options "" %}...{% endoptions %}

チャートオプション。

 {% options %} kind: "LineChart", options: { width: 300, height: 240 // ... } {% endoptions %} 

タグ内にはJavaScriptオブジェクトがあり、グローバル変数を使用して関数を呼び出すことができます。 チャートタイプと各タイプでサポートされているオプションをここにリストします

{% graph "id_" "" "" %}

ページ上の要素にグラフを表示します。 最後の2つのパラメーターは省略でき、結果は"default" "default"です。

使用例


次のようなモデルがあるとします:

 class Payment(models.Model): amount = models.DecimalField(max_digits=11, decimal_places=4) datetime = models.DateTimeField() 

django-qsstats-magicを使用して、グラフに表示するデータを準備できます。

 from qsstats import QuerySetStats def view_func(request): start_date = ... end_date = ... queryset = Payment.objects.all() #   ... qsstats = QuerySetStats(queryset, date_field='datetime', aggregate=Count('id')) # ...     values = qsstats.time_series(start_date, end_date, interval='days') return render_to_response('template.html', {'values': values}) 

time_seriesメソッドは、次の形式でデータを返します。

 [[date, value], [date, value], ...] 

template.htmlファイルで:

 {% load googlecharts %} <div id="count_graph"></div> {% googlecharts %} {% data values "count" %} {% col "string" "Date" %}"{{ val|date:"M j" }}"{% endcol %} {% col "number" "# of payments" %}{{ val }}{% endcol %} {% enddata %} {% options %} kind: "LineChart", options: { backgroundColor: "#f9f9f9", colors: ["#09f"], gridlineColor: "#ddd", legend: "none", vAxis: {minValue: 0}, chartArea: {left: 40, top: 20, width: 240, height: 180}, width: 300, height: 240 } {% endoptions %} {% graph "count_graph" "count" %} {#     #} {% endgooglecharts %} 

スケーリング

ここで、ページに別のグラフを追加するには、次を実行する必要があります。

-データの収集(views.py):

  #         summary = qsstats.time_series(start_date, end_date, interval='days', aggregate=Sum('amount')) return render_to_response('template.html', {'values': values, 'summary': summary}) 

-template.htmlに追加:

 <div id="count_sum"></div> ... {% data summary "sum" %} {% col "string" "Date" %}"{{ val|date:"M j" }}"{% endcol %} {% col "number" "Paid amount, USD" %}{{ val|floatformat:2 }}{% endcol %} {% enddata %} ... {% graph "count_sum" "sum" %} {#    ,  #} 

Github


django-google-chartsのソースコードには、デモプロジェクトも含まれています。 開始するには、次を実行します。

 $ python manage.py syncdb --noinput #    sqlite  /tmp $ python manage.py populatedb #     $ python manage.py runserver 

テストプロジェクトは次のようになります。

django-google-charts

最初のパブリックリリースの制限(軟膏で飛ぶ)

  1. 1ページにつき1つのタグ{% googlecharts %}のみ。
  2. (ほとんど)エラーチェックはありません。特にJavaScriptでは。
  3. わずかなドキュメント。
それを読んだすべての人に感謝します。 グラフィックをどのように描きますか?

Source: https://habr.com/ru/post/J126704/


All Articles