GrapeCity.devlog

グレープシティ株式会社のDeveloper Tools〈開発支援ツール〉の最新情報をお届けします。製品のTIPSや発売情報、イベントのお知らせなどをいち早く発信中です。

チャートの作成を完全に制御する方法

こんにちは、SPREADチームの小津です。今日はチャートについてお話ししたいと思います。 チャートには、いくつか作成方法があります:

  • Excelファイルからインポートする
  • SheetViewクラスのAddChartメソッドを使用する
  • プロットエリアを初期化してイチからチャートを作成する

多くの場合、2番目の方法のAddChartメソッドで半ば自動的にチャートを作成できます。こういう便利さは、SPREADの魅力の一つですよね。 ただ、SPREADの既定の設定が要件とマッチしないこともあります。たとえば次のデータ:

ozu_dec0

このデータを使用して、AddChartメソッドで集合棒チャートを作成したとします。作成されるチャートは次のとおりです。

ozu_dec1

※データが「本店」と「駅前支店」で分類されています。

でも、作成したいチャートは、データを「前年」と「今年」で分類した、次のようなものだったとします。

ozu_dec2

こんなときに役立つのが、プロットエリアを初期化してイチからチャートを作成する方法です。チャートの作成を完全に制御できます。以下、サンプルコードをご紹介したいと思います。 なお、以降でご紹介するコードは、ファイル冒頭に次のImports句(C#ではusing句)を追加してご利用ください。

[code lang="vb"] ' VBの場合 Imports FarPoint.Win.Chart Imports FarPoint.Win.Spread Imports FarPoint.Win.Spread.Model Imports FarPoint.Win.Spread.Chart[/code]

[code lang="c-sharp"] // C#の場合 using FarPoint.Win.Chart; using FarPoint.Win.Spread; using FarPoint.Win.Spread.Model; using FarPoint.Win.Spread.Chart;[/code]

Visual Basic

[code lang="vb"] Dim values As Object(,) = {{"", "本店", "駅前支店"}, {"前年", 3000, 1500}, {"今年", 2500, 2200}} FpSpread1.Sheets(0).SetArray(0, 0, values)

' SheetViewクラスのAddChartメソッドを使用した方法 'FpSpread1.ActiveSheet.AddChart(New CellRange(0, 0, 3, 3), GetType(ClusteredBarSeries), 400, 400, 10, 70)

' プロットエリアを初期化してイチからチャートを作成する方法 Dim plotArea As New YPlotArea() Dim cSeries As New ClusteredBarSeries() '系列(本店)の作成 Dim s1 As New BarSeries() s1.Values.DataSource = New SeriesDataField(FpSpread1, "DataFieldValue", "Sheet1!B2:B3") s1.CategoryNames.DataSource = New SeriesDataField(FpSpread1, "DataFieldCategoryName", "Sheet1!A2:A3", SegmentDataType.Text) s1.SeriesNameDataSource = New SeriesDataField(FpSpread1, "DataFieldSeriesName", "Sheet1!B1", SegmentDataType.Text)

'系列(駅前支店)の作成 Dim s2 As New BarSeries() s2.Values.DataSource = New SeriesDataField(FpSpread1, "DataFieldValue", "Sheet1!C2:C3") s2.SeriesNameDataSource = New SeriesDataField(FpSpread1, "DataFieldSeriesName", "Sheet1!C1", SegmentDataType.Text)

cSeries.Series.Add(s1) cSeries.Series.Add(s2) plotArea.Series.Add(cSeries)

Dim model As New ChartModel() model.PlotAreas.Add(plotArea) model.LegendAreas.Add(New LegendArea()) 'チャートオブジェクトの作成 Dim spChart1 As New SpreadChart() With { .Size = New Size(400, 400), .Location = New Point(10, 70), .Model = model } FpSpread1.ActiveSheet.Charts.Add(spChart1)[/code]

C#

[code lang="c-sharp"] object[,] values = { { "", "本店", "駅前支店" }, { "前年", 3000, 1500 }, { "今年", 2500, 2200 } }; fpSpread1.Sheets[0].SetArray(0, 0, values);

// SheetViewクラスのAddChartメソッドを使用した方法 //fpSpread1.ActiveSheet.AddChart(new CellRange(0, 0, 3, 3), typeof(ClusteredBarSeries), 400, 400, 10, 70);

// プロットエリアを初期化してイチからチャートを作成する方法 YPlotArea plotArea = new YPlotArea(); ClusteredBarSeries cSeries = new ClusteredBarSeries(); //系列(本店)の作成 BarSeries s1 = new BarSeries(); s1.Values.DataSource = new SeriesDataField(fpSpread1, "DataFieldValue", "Sheet1!B2:B3"); s1.CategoryNames.DataSource = new SeriesDataField(fpSpread1, "DataFieldCategoryName", "Sheet1!A2:A3", SegmentDataType.Text); s1.SeriesNameDataSource = new SeriesDataField(fpSpread1, "DataFieldSeriesName", "Sheet1!B1", SegmentDataType.Text);

//系列(駅前支店)の作成 BarSeries s2 = new BarSeries(); s2.Values.DataSource = new SeriesDataField(fpSpread1, "DataFieldValue", "Sheet1!C2:C3"); s2.SeriesNameDataSource = new SeriesDataField(fpSpread1, "DataFieldSeriesName", "Sheet1!C1", SegmentDataType.Text);

cSeries.Series.Add(s1); cSeries.Series.Add(s2); plotArea.Series.Add(cSeries);

ChartModel model = new ChartModel(); model.PlotAreas.Add(plotArea); model.LegendAreas.Add(new LegendArea()); //チャートオブジェクトの作成 SpreadChart spChart1 = new SpreadChart() { Size = new Size(400, 400), Location = new Point(10, 70), Model = model }; fpSpread1.ActiveSheet.Charts.Add(spChart1); [/code]

なお、この方法、来年2月発売予定のSPREAD for Windows Formsの次期バージョン10Jの新機能:

この新機能を使用して、チャートからSPREADのデータを参照するときにも役立ちます。その話は、また後日!

Copyright © GrapeCity, Inc. All Rights Reserved.