グラフカスタマイズ-インタラクティブな円グラフ

Curlでは様々なグラフが提供されており、また色々とカスタマイズが可能ですが、どのようにカスタマイズしたらよいか悩んでいる人もいるのではないでしょうか。

このシリーズでは、円グラフのカスタマイズ例をご紹介していきます。

まず、Curlの円グラフはPieSetとPieChartから構成されています。

簡単に説明するとPieSetが実際の円グラフで、PieChartはその円グラフを入れる箱のようなものです。

 今回は、PieSetを継承して作成した、マウスオーバーをするとその項目がハイライトされるInterractivePieSetをご紹介します。

API説明

InteractivePieSetクラス

マウスオーバーした領域をハイライトします。

パッケージ

COM.CURLAP.ADVANCED-CHART

スーパークラス

PieSet

プロパティ

sample-color-array:{Array-of FillPattern} 色を保持するフィールド

highlight-color:FillPattern ハイライトした際の色

コンストラクタ

default
引数1(records:RecordSet)  表示用データ
引数2(major:String)          円の比率を決定する基準レコード名
引数3(event-name:String) 凡例に用いるレコード名

下記の引数は任意になります
引数4(colors:{Array-of FillPattern} = self.sample-color-array) 円グラフの色
引数5(highlight-color:FillPattern = “red”) ハイライトする色(独自色)
引数6(just-hilight?:bool = true)ハイライトの際に、ただ色を薄くするだけかの判断
引数7(wedge-border-color:FillPattern = “white”)円グラフを縁取る色

メソッド

なし

利用方法

InteractivePieSetとして宣言します。独自の引数のほかに、PieSetの引数も使用することが可能です。 
今回は、円グラフのカスタマイズの記事で使用したPieSetを引用してInteractivePieSetを宣言します。

 

    let pieset:InteractivePieSet= {InteractivePieSet
                            rs,
                            “Number”,
                            “Event”,
                            ||ここから下の引数はPieSetと同じです
                            ||枠線の色
                            wedge-group =
                                {ShapeGroup
                                    border-color = “white”
                                },
                            ||ラベルに使用するデータ
                            label-data =
                                {ChartDataSeries rs, “Event”},
                ||ラベルの作成
                            label-factory = {proc {pie-set:PieSet,
                                                   set-label:#String,
                                                   data-label:#String,
                                                   value-label:#String,
                                                   position:Distance2d,
                                                   data:ChartDataSeries,
                                                   record:Record,
                                                   record-index:int,
                                                   inner-radius:Distance,
                                                   outer-radius:Distance,
                                                   total-radius:Distance,
                                                   start-angle:Angle,
                                                   stop-angle:Angle
                                                  }:Shape   ||返却の型がShapeなので文字以外でも画像等をラベルに指定することも可能です

                                                let font-col:FillPattern = “#222222” ||まず、基本の文字色を宣言します
                                                {if record[“Risk”] asa double >= 25 then ||Risk項目が25%以上であれば、文字色を赤に設定します
                                                    set font-col = “red”
                                                }
                                               
                                                {return
                                                    {TextShape
                                                        font-size = 10pt,
                                                        color = font-col,
                                                        halign = “center”,
                                                        valign = “center”,
                                                        translation = position, ||文字の配置は、この部分で変更できます
                                                        {non-null data-label}
                                                    }
                                                }
                                            },
                            ||凡例の表示
                            legend-enabled? = true,
                            ||凡例の作成
                            legend-entry-factory =  {proc {chart:Chart,
                                                           data-series:ChartDataSeries,
                                                           record:#Record,
                                                           color:FillPattern,
                                                           legend-index:int
                                                          }:Graphic
                                                        let font-col:FillPattern = “black”
                                                        {return
                                                            {HBox
                                                                valign = “center”,
                                                                 ||%に連動した棒グラフを作成しています
                                                                {Fill
                                                                    width = (record[“Risk”] asa double * .5pt) + 10pt,
                                                                    height = 8pt,
                                                                    background = color, ||色は円グラフの色と連動しています
                                                                    border-width = 0px
                                                                },
                                                                {Fill width = {make-elastic minimum-size = 20pt}},
                                                                ||%が25%以上のデータに対しては、文字列を赤く変更しています
                                                                {if-non-null record then
                                                                    {if record[“Risk”] asa double >= 25 then
                                                                        set font-col = “red”
                                                                    }
                                                                    {HBox
                                                                        color = font-col,
                                                                        {TextFlowBox
                                                                            width = 50pt,
                                                                            {data-series.field.domain.format
                                                                                record[data-series.field.name]
                                                                            }
                                                                        },
                                                                        {TextFlowBox width = 40pt, record[“Number”] & “件”},
                                                                        {TextFlowBox width = 30pt, {String record[“Risk”]} & “%”}
                                                                    }
                                                                 else
                                                                    data-series.field.caption
                                                                }
                                                            }
                                                        }
                                                    }
                        }

このInteractivePieSetをPieChartにセットして表示させると結果は下記のようになります。

 

サンプル

円グラフサンプル

*Version7で作成しています。ランタイムのダウンロードはこちらから。