MSChartの表示方法

解決


牛乳  2007-09-03 22:41:20  No: 137306

いつも参考にさせていただいております。
VB6.0にてMSチャートを使用し、下記のような2D棒グラフを作成したいと思っております。
(等角フォントでご確認のほどお願いします)

--------------------------------------

(点)

  100│            │          ■│
     │            │  ■      ■│
   80│            │  ■  ■  ■│
     │        ■  │  ■  ■  ■│
   60│    ■  ■  │  ■  ■  ■│
     │    ■  ■  │  ■  ■  ■│
   40│    ■  ■  │  ■  ■  ■│
     │■  ■  ■  │  ■  ■  ■│
   20│■  ■  ■  │  ■  ■  ■│
     │■  ■  ■  │  ■  ■  ■│
    0└──────┼──────┘
       国  数  英  │  国  数  英
          鈴木     │      佐藤

    Dim ArrayDat(0 To 1, 0 To 3) As Variant

    MSChart1.chartType = VtChChartType2dBar

    With MSChart1.Plot.Axis(VtChAxisIdY).ValueScale
        .Auto = False          
        .Maximum = 100         
        .Minimum = 0           
        .MajorDivision = 5     
        .MinorDivision = 2     
    End With

    With MSChart1.Plot.Axis(VtChAxisIdY2).ValueScale
        .Auto = False          
        .Maximum = 100         
        .Minimum = 0           
        .MajorDivision = 5     
        .MinorDivision = 2     
    End With

    
    ArrayDat(0, 0) = "鈴木"
    ArrayDat(0, 1) = 30
    ArrayDat(0, 2) = 60
    ArrayDat(0, 3) = 70
    ArrayDat(1, 0) = "佐藤"
    ArrayDat(1, 1) = 90
    ArrayDat(1, 2) = 80
    ArrayDat(1, 3) = 100

    MSChart1.ChartData = ArrayDat()

上記ソースで記述したところ、

  100│            │          ■│
     │            │  ■      ■│
   80│            │  ■  ■  ■│
     │        ■  │  ■  ■  ■│
   60│    ■  ■  │  ■  ■  ■│
     │    ■  ■  │  ■  ■  ■│
   40│    ■  ■  │  ■  ■  ■│
     │■  ■  ■  │  ■  ■  ■│
   20│■  ■  ■  │  ■  ■  ■│
     │■  ■  ■  │  ■  ■  ■│
    0└──────┼──────┘
          鈴木     │      佐藤

となってしまいます。

それぞれの教科名とY軸の単位(点)の表示方法をご教授願いませんでしょうか?
よろしくお願いします。


牛乳  2007-09-04 04:09:33  No: 137307

お世話になっております。

先ほどの質問ですが、VtChLocationTypeRightで右側に項目を設定することに致しました。

(点)などの単位はラベル等でどうにかやってみようと思います。

新たに疑問が生じたのですが、

    With MSChart1
        .ColumnCount = 3
        .RowCount = 3
        
        .Plot.SeriesCollection(1).LegendText = "A"
        .Plot.SeriesCollection(2).LegendText = "B"
        .Plot.SeriesCollection(3).LegendText = "C"
        
        .Legend.Location.LocationType = VtChLocationTypeRight
        .ShowLegend = True
        
        .chartType = VtChChartType2dCombination
        .Plot.SeriesCollection(3).SeriesType = VtChSeriesType2dLine
    End With

    '軸の設定
    With MSChart1.Plot.Axis(VtChAxisIdY).ValueScale
        .Auto = False
        .Maximum = 100
        .Minimum = 0
        .MajorDivision = 2
        .MinorDivision = 5
    End With

    '折れ線の設定
    With MSChart1.Plot.SeriesCollection(3)
        .SeriesMarker.Auto = False
        .DataPoints.Item(-1).Marker.Style = VtMarkerStyleFilledCircle
        .SeriesMarker.Show = True
    End With

このように設定した際に、

折れ線グラフが一番背面へ表示されてしまいます。
一番手前に表示する方法はありませんか?(ZOrderのようなイメージです)

また、VtMarkerStyleFilledCircleで設定した●が無駄に大きいのですが(汗)
サイズ変更等できないものでしょうか?

ご存知の方よろしくお願いします。


VBレスキュー(花ちゃん)  2007-09-04 15:46:17  No: 137308

http://hanatyan.sakura.ne.jp/patio/patio.cgi?
上記サイトのサンプル投稿用掲示板の[MSChart コントロール ワンポイントテクニック集(VB6.0)]を
ご覧下さい。


牛乳  2007-09-04 18:27:17  No: 137309

VBレスキュー(花ちゃん)様

いつもHPを拝見させていただいております。

上記サイトも目を通しましたが、折れ線グラフを最前面に表示するような
プロパティは探しきれませんでした。

一応、
>        .Plot.SeriesCollection(1).LegendText = "A"
>        .Plot.SeriesCollection(2).LegendText = "B"
>        .Plot.SeriesCollection(3).LegendText = "C"

.SeriesCollection(3)を折れ線グラフとしておりますが、
.SeriesCollection(1)を折れ線グラフとすることで、
最前面に表示することができました(苦肉の策です^^;)

またマーカーのサイズ変更は、【マーカーの表示例(VB6.0)】より
>.DataPoints.Item(-1).Marker.Size = 400
を参考に使用させていただきました。

新たにグラフ表示の値が.Maximumで設定した値の場合
(例えば.Maximum = 100 の場合)、100という値がグラフの裏に隠れてしまうなど
多々問題に直面しますが、制限の多いコントロールということで妥協してます…。

MSChartって普段全く使わないので、プロパティを探すだけで一苦労していますが、
【MSChartコントロールのオブジェクト、プロパティ、メソッド一覧表(VB6.0)】
を活用させていただいております。

参考になるものばかりでとても助かります。
有難うございます。


VBレスキュー(花ちゃん)  2007-09-04 23:26:21  No: 137310

>上記サイトも目を通しましたが、折れ線グラフを最前面に表示するような
>プロパティは探しきれませんでした。

下記ではだめだったのでしょうか?
MSChart1.Plot.SeriesCollection(3).Position.Order = -1


牛乳  2007-09-04 23:59:46  No: 137311

VBレスキュー花ちゃん様

【MSChartコントロールのオブジェクト、プロパティ、メソッド一覧表(VB6.0)】より

Order プロパティ 
---------------
グラフ内の系列の位置を返すか、または設定します。
順序の位置が別の系列と一致すると、その系列はスタックされます。

申し訳ございません。
全てに目を通したつもりだったのですが、見落としていたようです。

Orderプロパティを -1 に設定することで問題なく動作することが出来ました。 
インデックスを入れ替える必要なかったですね・・・。

貴重な意見を有難うございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加