- - PR -
Office Web Components(OWC)でグラフ表示させたが・・・
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-02-05 16:28
サーバーにOffice Web Components Ver10をインストールし、画像データとしてクライアントにグラフ表示しています。
横軸のデータを日付にしたときと時間にした時で、グラフの表示が変わってしまいます。 時間にした時は一番左の縦軸から一番右の縦軸までの折れ線グラフが表示されます(グラフ表示エリアいっぱいに表示される)が、日付にした時は、折れ線グラフは一番左の縦軸と一番右の縦軸より内側に表示されます(グラフ表示エリアより狭い範囲に表示される)。 つまり、一番左の縦軸と折れ線グラフの開始点の間に隙間ができます。 同様に一番右の縦軸と折れ線グラフの終点の間にも隙間ができてしまいます。 クライアントの画面は日付のグラフと時間のグラフの2画面を表示しますので、どちらかに統一したいのですが、どうすればよいでしょうか。 下記のソースはstring categoryの時間の方はコメントにしていますが、日付の方をコメントにすると折れ線グラフの表示範囲が狭くなります。なにしろOWCは始めてなので、わからないことだらけです。 よろしくお願いします。 Response.ContentType = "image/gif"; Response.Clear(); Response.Buffer=true; Bitmap bitmap = new Bitmap(1230, 750, PixelFormat.Format24bppRgb); ChartSpace chartSpace = new ChartSpaceClass(); ChChart chChart = chartSpace.Charts.Add(0); chChart.Type = ChartChartTypeEnum.chChartTypeLineMarkers; string category = "4/1,4/2,4/3,4/4,4/5,4/6; //string category= "10:10,11:11,12:12,13:13,14:14,15:15"; string value = "9.99,9.98,9.97,9.96,9.95,9.95"; chChart.SeriesCollection.Add(0); chChart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimCategories, (int)ChartSpecialDataSourcesEnum.chDataLiteral, category); chChart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimValues,(int) ChartSpecialDataSourcesEnum.chDataLiteral, value); Response.BinaryWrite((byte[])chartSpace.GetPicture("gif", 1230, 750)); bitmap.Dispose(); | ||||||||||||||||
|
投稿日時: 2008-02-06 00:35
日付を指定した場合は時系列軸が適用され、自動調整されるようです。 [OFF2003] [INFO] Office グラフ コンポーネントによる時系列軸の使用 http://support.microsoft.com/kb/289288/ja リンク先より
こちらで確認したところ、時系列機能を無効すると縦軸との隙間がなくなりました。
本題とは関係ありませんが、このコードは不要だと思います。 | ||||||||||||||||
|
投稿日時: 2008-02-06 16:16
回答ありがとうございました。
GroupingType プロパティを chAxisGroupingNone に設定することにより、表示エリアいっぱいにグラフを表示することができました。 また、 Bitmap bitmap = new Bitmap(1230, 750, PixelFormat.Format24bppRgb); bitmap.Dispose(); 上の2行は削除しても思った様に表示ができました。 またわからないことが発生してしまったので、教えて下さい。 横軸をyyyy/mm/dd hh/mm/ssとしているのですが、表示するデータは2008/02/06 16:00:00,2008/02/06 17:00:00,2008/02/06 17:10:00の時にグラフを表示すると、16時と17時の間隔と17時と17時10分の間隔が同じに表示されてしまいます。 16時と17時の間隔は1時間で、17時と17時10分の間隔は10分なので、時間に対応した間隔(幅)に表示したいのですがどうすれば良いでしょうか? GroupingUnitTypeをchAxisUnitDayにしてみたのですが、例外が発生してしまいます。 よろしくお願いいたします。 | ||||||||||||||||
|
投稿日時: 2008-02-06 23:53
時系列軸を使用すると目盛の間隔は自動調整されます。
例えば、string category = "2008/02/06,2008/02/07,2008/02/09"; を指定した場合、 X軸は、02/06, 02/07, 02/08, 02/09 になります。 しかし、時間を指定した場合は時系列軸は適用されません。 ヘルプより引用 時系列グラフと時間 時間、分、または秒間隔で入力されたデータから時系列グラフを作成することはできません。時系列軸の基本単位は、日、週、月、四半期、または年で設定します。 ですのでおそらく無理だと思います。 | ||||||||||||||||
|
投稿日時: 2008-02-07 10:19
回答ありがとうございます。
OWCでは、時間を指定した場合の時系列軸の目盛の間隔は自動調整はできないことわかりました。 OWC以外で、できるツールはご存じありませんでしょうか? よろしくお願いいたします。 | ||||||||||||||||
|
投稿日時: 2008-02-07 21:59
他のツールについては使ったことがないのでわかりません。
今更ですが、グラフとY軸との間に隙間ができる理由について補足しておきます。 以下ヘルプより引用
つまり、 //string category= "10:10,11:11,12:12,13:13,14:14,15:15"; を指定すると、X軸の目盛上に時刻と値がプロットされるため、グラフがY軸に接しますが、
string category = "4/1,4/2,4/3,4/4,4/5,4/6; を指定した場合は時系列軸が適用され、間隔を表すためにX軸の目盛の中間点にプロットされます。
| ||||||||||||||||
|
投稿日時: 2008-02-12 20:18
Office Web Components(OWC)の使用をあきらめて、「ZedGraph」というものを
使ってみました。ZedGraphでは秒単位まで、時系列に表示することができました。 使い方もデモがありましたので、わかりやすかったです。 しかし、デモにないことをやろうとすると、説明が英語しか見つけられなかったので、 時間がかかりました。 ZedGraphも時系列で表示すると、グラフ領域一杯には表示できない様です。 どうしても、縦軸とプロットの間に隙間ができてしまいます。 ざんねんです。 | ||||||||||||||||
|
投稿日時: 2009-04-10 12:59
諦めておられた…縦軸とデータの間にできる隙間は、
GraphPane.XAxis.Scale.MinGrace = 0.0 GraphPane.XAxis.Scale.MaxGrace = 0.0 で限りなくゼロになりますよ。 |