MSChartのXY分布図でX軸の作画範囲を指定するには?

解決


まつぼん  2004-01-14 07:37:44  No: 111271

初めて質問させていただきます。
VB6のMSChartを使って、2次元XY分布図(スペクトル)を描いています。
    MSChart1.Plot.Axis(VtChAxisIdY).ValueScale.〜
の設定でY軸の範囲を指定して作画させることはできるのですが、
同じように
    MSChart1.Plot.Axis(VtChAxisIdX).ValueScale.〜
と記述してもうまくいきません。実行時にエラーにもなりません。
XY両方の作画範囲を指定できると便利なのですが…

詳しい方、どなたか御教授下さい。
よろしくお願いします。


花ちゃん  2004-01-14 08:40:19  No: 111272

実際にどのように設定しておられるのかコードを投稿して下さい。
(実際に設定できたY軸と出来なかったX軸のコードをできれば事象が再現できればいいのですが)

設定する前に  Auto を解除しておられますか?


まつぼん  2004-01-14 11:05:28  No: 111273

次の発言でコードを投稿させていただきます。
作画プロシージャは標準モジュールにあります。
花ちゃんさんのサイトを参考にして、データは2次元配列(myStrAB(2,1001):バリアント型)で渡しています。
MSDNのサイトにあるように、.Maximum→.Minimumの順に記述していますし、
.Auto=Falseにしています。
使用している変数は、すべて標準モジュールにPublic宣言しています。

Form1のText1〜4でX・Yの作画範囲(MaxX・MinX・MaxY・MinY:整数型)を指定し、Form1の作画ボタンを押すとMSChartを貼ったForm2が現れ、Form2のLoadイベントで標準モジュールの作画プロシージャを実行するようにしています。


まつぼん  2004-01-14 11:08:03  No: 111274

作画プロシージャです。

Sub SpectrumDraw()

    'MSChart設定
        MaxY = Form1.Text1.Text
        MinY = Form1.Text2.Text
        MaxX = Form1.Text3.Text
        MinX = Form1.Text4.Text

        With Form2.MSChart1.Plot.Axis(VtChAxisIdX, 0).ValueScale
            .Auto = False
            .Maximum = MaxX
            .Minimum = MinX
            .MajorDivision = 10
            .MinorDivision = 2
        End With
        With Form2.MSChart1.Plot.Axis(VtChAxisIdY).ValueScale
            .Auto = False
            .Maximum = MaxY
            .Minimum = MinY
            .MajorDivision = 10
            .MinorDivision = 2
        End With
    'MSChart作画
        With Form2.MSChart1
            .chartType = VtChChartType2dXY
            .Plot.UniformAxis = False
            .ColumnCount = 2
            .RowCount = 1001
            For i = 1 To .RowCount
                For n = 1 To .ColumnCount
                    .Column = n
                    .Row = i
                    .Data = myStrAB(n, i)
                Next n
            Next i
            
        End With

End Sub

Yの作画範囲は変更できます。
Xの作画範囲が変更できない以外は、きちんと表示されています。
よろしくお願いいたします。


花ちゃん  2004-01-14 18:34:20  No: 111275

上記サンプルをそのまま起動して確認する事ができませんので(部分的なので)、
私のサンプルに下記の部分を追加して試して見ましたが問題なく表示できましたが?
        With MSChart1.Plot.Axis(VtChAxisIdX, 0).ValueScale
            .Auto = False
            .Maximum = 100
            .Minimum = 50
            .MajorDivision = 10
            .MinorDivision = 2
        End With
        With MSChart1.Plot.Axis(VtChAxisIdY).ValueScale
            .Auto = False
            .Maximum = 100
            .Minimum = 50
            .MajorDivision = 10
            .MinorDivision = 2
        End With

私のサンプルをご覧になられたのならあのサンプルに上記の部分を追加して
試して見て下さい。
又は、貴方のサンプルでそのまま再現できるコードを投稿して下さい。
再現できない以上下記のどの部分が有効にならないかも解りません。
少なくても、私のサンプルでは設定値が有効になります。
(MaxY や  MinY に何が入っているかも解らないし)
        With Form2.MSChart1.Plot.Axis(VtChAxisIdY).ValueScale
            .Auto = False
            .Maximum = MaxY
            .Minimum = MinY
            .MajorDivision = 10
            .MinorDivision = 2
        End With


まつぼん  2004-01-15 02:42:18  No: 111276

花ちゃんさんのサンプルにコードを追加して、作動することを確認しました。
私のコードでは、ちらつき防止のためにMSChartの内容をPictureBoxにコピーして表示させていましたが、これを外してMSChartでじかに表示させるとうまくいきました。MSChartに関するコードには問題がなかったものと思われます。ありがとうございました。

原因は、X・Yともに作画範囲が設定されているMSChartをコピーして、PictureBoxに渡すと、PictureBoxの表示はX軸の作画範囲が解除された状態になることです。
花ちゃんさんのサイトにある、
「Q.  EditCopy がクリップボードへ正しい内容をコピーしない」
はこのことだったんですね。


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

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






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