MSChartで散布図を表示するには?

解決


聖二  2003-12-18 23:46:59  No: 80984

お世話になります。よろしくお願い致します。

MSChartで散布図を表示したいのですが。
3列10行のデータがあるとして
1列目をX軸に2,3列目をY軸として散布図を書きたいのです。
以下のようにしました。
表示されたグラフは、全く思うようなグラフではありません。
散布図の場合の設定がよく分かっていないのだと思います。

Private Sub Form_Load()
    Dim MyData(10, 3) As Single
    Dim i As Integer
    
    'ためしのデータです
    For i = 1 To 10
        MyData(i, 1) = i * 10          ’x値
        MyData(i, 2) = i + 2            ’y値  
        MyData(i, 3) = (i + 2) * 1.2    ’y値
    Next i
    
    With MSChart1
        .chartType = VtChChartType2dLine
        .Column = 2: .ColumnLabel = "計算値"
        .Column = 3: .ColumnLabel = "分析値"
        .TitleText = "単純系"
        .ShowLegend = True
        .ChartData = MyData
    End With
    
End Sub

よろしくお願い致します。


聖二  2003-12-18 23:57:58  No: 80985

すみません
グラフタイプは
.chartType = VtChChartType2dXY
でした。
よろしくお願い致します。


岡田 之仁  2003-12-19 01:23:55  No: 80986

これは所謂、多重グラフとか、複合グラフと呼ばれるものですネ!

同じ要素やタイプのグラフでも、配列として複数存在した場合は、
多重とか複合になります。

マイクロソフトでは、この辺のサンプルが乏しく・・・私も苦労
しました。

そのものズバリではありませんが、チャートとしては同じもの
ですので、ご参照ください。

http://support.microsoft.com/default.aspx?scid=kb;ja;286211

以上。


聖二  2003-12-19 02:51:07  No: 80987

岡田様、アドバイスありがとうございます。

参照先を見てみましたが、
なにぶんまだ、VBは初心者なもので
なかなか理解できそうにありません。
もうちょっと検討してみたいと思いますが。
それと、私の使っているのはVB6ですが、
VB6でも、同様でしょうか。

もし、よろしければ、もう少しアドバイスして頂けると
非常にうれしいのですが。
本当に、申し訳ありません。


聖二  2003-12-19 03:05:51  No: 80988

複合グラフになるということなので、
チャートコントロールのプロパティページで
「チャートの種類」タブの中で複合を選択し
「系列」タブで系列の種類を設定してみようと思いましたが
「系列の種類」の中には、
棒、折れ線、面、段階
しかなくて、散布図はありませんでした。
プロパティページでは、設定できないものでしょうか。

申し訳ありません。
やはり、もう少しアドバイスを頂けると幸いです。
よろしくお願い致します。


試行錯誤  2003-12-19 10:47:19  No: 80989

>1列目をX軸に2,3列目をY軸として散布図を書きたいのです

散布図はXYの対でないと描けません。
1列目と2列目  3列目と4列目  で描いて下さい。
2列目と3列目は同じデータを使って。

    For i = 1 To 10
        MyData(i, 1) = i * 10          
        MyData(i, 2) = i + 2              
        MyData(i, 3) = i + 2  
        MyData(i, 4) = (i + 2) * 1.2    
    Next i


聖二  2003-12-20 01:51:25  No: 80990

試行錯誤様、ありがとうございます。
助かりました。ほとんどうまくいきました。

後の問題は、凡例に列のラベルが表示されないこと
また、以下のように4列目のデータをマーカーに設定すると
データ自体が表示されないこと
があります。
このことで、助けてもらえないでしょうか。

Option Base 1
Private Sub Form_Load()
    Dim MyData(10, 4) As Single
    Dim i As Integer

    'ためしのデータです
    For i = 1 To 10
        MyData(i, 1) = i * 10           'x値
        MyData(i, 2) = i + 2            'y値
        MyData(i, 3) = i * 10           'x値
        MyData(i, 4) = (i + 2) * 1.2    'y値
    Next i

    With MSChart1
        .Plot.UniformAxis = False       'これがないとうまく表示できません
        .chartType = VtChChartType2dXY
        .Column = 1: .ColumnLabel = "計算値"    ’凡例ではC1と表示される。
        .Column = 3: .ColumnLabel = "分析値"    ’凡例ではC3と表示される
        .Plot.SeriesCollection(1).DataPoints(-1).Marker.Visible = False
        .Plot.SeriesCollection(2).DataPoints(-1).Marker.Visible = True
        .Plot.SeriesCollection(2).DataPoints(-1).Marker.Style = VtMarkerStyleCircle
        'これでは4列目が表示されません
        .TitleText = "単純系"
        .ShowLegend = True
        .ChartData = MyData
    End With

End Sub


花ちゃん  2003-12-20 03:15:05  No: 80991

これでいいのでしょうか?
http://www.bcap.co.jp/hanafusa/  にMSChart 関係 がありますので
参考にして下さい。

Private Sub Form_Load()
    Dim MyData(4, 10) As Single
    Dim i As Integer, j As Integer
    Dim series As Object
    'ためしのデータです
    For i = 1 To 10
        MyData(1, i) = i * 10          'x値
        MyData(2, i) = i + 2           'y値
        MyData(3, i) = i * 10          'x値
        MyData(4, i) = (i + 2) * 1.2   'y値
    Next i
    With MSChart1
        .ColumnCount = 4
        .RowCount = 10
        'データをセット
        For i = 1 To 4
            .Column = i
            For j = 1 To 10
                .Row = j
                .Data = MyData(i, j)
            Next j
        Next i
    End With
    With MSChart1
        'グラフタイプを散布図に設定
        .Plot.UniformAxis = False  'グラフを横長に
        .chartType = VtChChartType2dXY
    End With

    'すべての系列についてマーカーを表示し、線を表示解除します。
    For Each series In _
       MSChart1.Plot.SeriesCollection
       series.SeriesMarker.Show = True
       series.ShowLine = False
    Next
    'すべての系列についてマーカーを非表示し、線を表示します。
'    For Each series In MSChart1.Plot.SeriesCollection
'        series.SeriesMarker.Show = False
'        series.ShowLine = True
'    Next
    
    With MSChart1
       '凡例文字の設定
       .Plot.SeriesCollection(1).LegendText = "計算値"
       .Plot.SeriesCollection(3).LegendText = "分析値"
       '凡例の表示位置を設定
       .Legend.Location.LocationType = VtChLocationTypeRight
       .ShowLegend = True
    End With
End Sub


花ちゃん  2003-12-20 03:30:09  No: 80992

下記の部分は、下記に訂正願います。

Private Sub Form_Load()
    Dim MyData(1 To 10, 1 To 4) As Single
    Dim i As Integer, j As Integer
    Dim series As Object
    'ためしのデータです
    For i = 1 To 10
        MyData(i, 1) = i * 10          'x値
        MyData(i, 2) = i + 2           'y値
        MyData(i, 3) = i * 10          'x値
        MyData(i, 4) = (i + 2) * 1.2   'y値
    Next i
    この間のデータ-セットの部分は削除

    With MSChart1
        .ChartData = MyData()
        'グラフタイプを散布図に設定
        .Plot.UniformAxis = False  'グラフを横長に
        .chartType = VtChChartType2dXY
    End With

これ以降は同様です。


聖二  2003-12-20 20:05:00  No: 80993

花ちゃん様、ありがとうございました。
チャートの散布図のことについてはあまり資料が無くて困っていましたが、上記のコードのいくつかは花ちゃん様のホームページを参考にさせてもらって書いたものです。
ありがとうございます。
凡例のテキスト表示方法については、うまくいきました。ありがとうございます。
それと私の説明の仕方が足りなかったかもしれませんが、
2つ散布図のうち、一つは線で、一つはマーカーで描きたかったのです。
すると、以下のようになりましたが、これでとりあえず、そういったグラフになります。
まだ、以下の様な問題があります。
1.マーカーですが、種類を○に設定したつもりですが、
設定されていなくて、既定(?)の*のようなマークです。
2.マーカの大きさを既定よりも小さくしたいのですが。
(本当はデータの数が多いため)

この2点について、ご教授頂けないでしょうか。
どうかよろしくお願い致します。

Option Base 1
Private Sub Form_Load()
    Dim MyData(10, 4) As Single
    Dim i As Integer

    'ためしのデータです
    For i = 1 To 10
        MyData(i, 1) = i * 10           'x値
        MyData(i, 2) = i + 2            'y値(計算値)
        MyData(i, 3) = i * 10           'x値
        MyData(i, 4) = (i + 2) * 1.2    'y値(分析値)
    Next i

    With MSChart1
        .ChartData = MyData
        .Plot.UniformAxis = False
        .chartType = VtChChartType2dXY
        .Plot.SeriesCollection(1).LegendText = "計算値"
        .Plot.SeriesCollection(3).LegendText = "分析値"
        .Plot.SeriesCollection(1).DataPoints(-1).Marker.Visible = False
        .Plot.SeriesCollection(3).DataPoints(-1).Marker.Visible = True
        .Plot.SeriesCollection(3).DataPoints(-1).Marker.Style = VtMarkerStyleCircle
        .TitleText = "単純系"
        .ShowLegend = True
    End With

End Sub


花ちゃん  2003-12-21 04:56:18  No: 80994

私は、貴方の下請けではありません。今後は自分で色々試して下さい。
前記のHPに今回の事も書いてあります。他人に頼ってばかりいては、覚えられませんよ。
色々試していたら、その内にうまくいきますよ!

    With MSChart1
        .ChartData = MyData
        .Plot.UniformAxis = False
        .chartType = VtChChartType2dXY
        .Plot.SeriesCollection(1).LegendText = "計算値"
        .Plot.SeriesCollection(3).LegendText = "分析値"
        .Plot.SeriesCollection(1).DataPoints(-1).Marker.Visible = False
        .Plot.SeriesCollection(3).SeriesMarker.Auto = False
        .Plot.SeriesCollection(3).DataPoints(-1).Marker.Size = 150
        .Plot.SeriesCollection(3).DataPoints(-1).Marker.Style = VtMarkerStyleCircle
        .Plot.SeriesCollection(3).DataPoints(-1).Marker.Visible = True
        .TitleText = "単純系"
        .ShowLegend = True
    End With


花ちゃん  2003-12-21 05:11:23  No: 80995

プロットだけにしたいなら  Line は下記で消えます。

.Plot.SeriesCollection(3).ShowLine = False


聖二  2003-12-21 10:11:29  No: 80996

花ちゃん様、すみませんでした。
うまくいきました。
マーカーの種類を設定したのに、反映されていなくて
既定の解除の仕方がわかりませんでした。
 .Plot.SeriesCollection(3).SeriesMarker.Auto = False
ですね。
なにぶん、チャートに関しては全くの初心者で
ヘルプ等を参考にしてなんとか、自分なりにはやってきたつもりでしたが。
なかなか難しいものです。
これからもよろしくお願い致します。

皆様のおかげで思ったようなグラフが描けました。
本当に、感謝致します。
解決とさせて頂きます。


聖二  2003-12-26 23:57:22  No: 80997

解決としましたが、図を少し作り替えたところ、不具合が発生しました。
これまでの散布図は、一つを線で、一つを点で表しましたが
これからは、2つとも点で表すことになりました。
以下のコードで、図中のプロットは点だけになりうまくいったのですが
凡例のSeriesCollection(1)   "計算値"  の部分に
線が残ってしまっています。(凡例では点と線になっています。)
SeriesCollection(3) "分析値"  の方は問題ありません。
凡例と図の表現が異なるのはどうしたことでしょうか。
凡例の設定の仕方があるのでしょうか。

よろしくお願い致します。

Private Sub Form_Load()
    Dim MyData(10, 4) As Single
    Dim i As Integer

    'ためしのデータです
    For i = 1 To 10
        MyData(i, 1) = i * 10           'x値
        MyData(i, 2) = i + 2            'y値(計算値)
        MyData(i, 3) = i * 10           'x値
        MyData(i, 4) = (i + 2) * 1.2    'y値(分析値)
    Next i

    With MSChart1
        .ChartData = MyData
        .Plot.UniformAxis = False
        .chartType = VtChChartType2dXY
        .Plot.SeriesCollection(1).LegendText = "計算値"
        .Plot.SeriesCollection(3).LegendText = "分析値"
        'これで図中の線は消えますが、凡例の線は消えません
        .Plot.SeriesCollection(1).ShowLine = False
        .Plot.SeriesCollection(1).SeriesMarker.Auto = False
        .Plot.SeriesCollection(1).DataPoints(-1).Marker.Visible = True
        .Plot.SeriesCollection(1).DataPoints(-1).Marker.Style = VtMarkerStyleCircle
        .Plot.SeriesCollection(1).DataPoints(-1).Marker.Size = 100
        .Plot.SeriesCollection(3).SeriesMarker.Auto = False
        .Plot.SeriesCollection(3).DataPoints(-1).Marker.Visible = True
        .Plot.SeriesCollection(3).DataPoints(-1).Marker.Style = VtMarkerStyleCircle
        .Plot.SeriesCollection(3).DataPoints(-1).Marker.Size = 150
        .TitleText = "単純系"
        .ShowLegend = True
    End With

End Sub


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

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






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