tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルMsChartで配列から折れ線グラフを書く
記事No1132
投稿日: 2004/10/28(Thu) 19:55
投稿者あき
[OSのVer]:Windows    [VBのVer]:VB.NET  
 [OSのVer]:Windows XP   [VBのVer]:VB.NET 2003
 はじめて投稿する初心者ですが、宜しくお願い致します。

 MsChartを使って、配列データから折れ線グラフを書こうとしています。
 グラフにするデータは元にあるアクセスデータベースから
 条件に合うものだけを抽出して、計算をしています。
 その計算結果は配列を持たせておいて、グラフ表示のボタンをクリックしたら
 表示するようにしたいと思っています。
 花ちゃんさんのサイトや他の掲示板も参考させて頂きやってみましたが・・・
  @指定していない系列(C1,C3,C5,C7)がグラフに表示される
  AX軸に表示させたいデータがY軸に表示され、X軸にはR(配列の番号)が表示される。
  以上の問題が解決できません。

 配列の部分はサンプルですが、プログラムを載せさせて頂きました。
 どなたか、ご指導のほど宜しくお願い致します。


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)    Handles Button1.Click
   Dim aa(10) As Double
   Dim bb(10) As Double
   Dim cc(10) As Double
   Dim VtChChartType2dLine As Integer
   Dim datacount As Integer

   Dim MyData(datacount, 6) As Double
   AxMSChart1.chartType = MSChart20Lib.VtChChartType.VtChChartType2dLine’チャートタイプ

   datacount=10

   For nn = 1 To datacount
        aa(nn)=100.55/nn
        bb(nn)=130.55/nn
        cc(nn)=150.55/nn
      MyData(nn, 1) = aa(nn)          'x値(データ1)
        MyData(nn, 2) = nn / 200         'y値(データ1)
        MyData(nn, 3) = bb(nn)           'x値(データ2)
        MyData(nn, 4) = nn / 200         'y値(データ2)
        MyData(nn, 5) = cc(nn)           'x値(データ3)
        MyData(nn, 6) = nn / 200         'y値(データ3)

With AxMSChart1
             .ChartData = MyData
             AxMSChart1.Plot.UniformAxis = True
             .chartType = 3 - VtChChartType2dLine
             .Plot.SeriesCollection(2).LegendText = "データ1"
             .Plot.SeriesCollection(4).LegendText = "データ2"
             .Plot.SeriesCollection(6).LegendText = "データ3"
           .Plot.SeriesCollection(2).SeriesMarker.Auto = False
.Plot.SeriesCollection(2).DataPoints(-1).Marker.Size =5
.Plot.SeriesCollection(2).DataPoints(-1).Marker.Style = VtMarkerStyleCircle
.Plot.SeriesCollection(2).DataPoints(-1).Marker.Visible = False
             .Plot.SeriesCollection(2).ShowLine = True
             .Plot.SeriesCollection(4).SeriesMarker.Auto = False
             .Plot.SeriesCollection(4).DataPoints(-1).Marker.Size = 5
             .Plot.SeriesCollection(4).DataPoints(-1).Marker.Style = VtMarkerStyleCircle
             .Plot.SeriesCollection(4).DataPoints(-1).Marker.Visible = False
             .Plot.SeriesCollection(4).ShowLine = True
             .Plot.SeriesCollection(6).SeriesMarker.Auto = False
             .Plot.SeriesCollection(6).DataPoints(-1).Marker.Size = 5
             .Plot.SeriesCollection(6).DataPoints(-1).Marker.Style = VtMarkerStyleCircle
             .Plot.SeriesCollection(6).DataPoints(-1).Marker.Visible = False
             .Plot.SeriesCollection(6).ShowLine = True
             .TitleText = "ハザード曲線"
             .ShowLegend = True
         End With

     Next nn
  End Sub

 ’プログラム自体はエラーなく、まわっています。
 ’よろしくお願い致します。 

[ツリー表示へ]
タイトルRe: MsChartで配列から折れ線グラフを書く
記事No1134
投稿日: 2004/10/29(Fri) 09:13
投稿者るしぇ
>’プログラム自体はエラーなく、まわっています。
Dim datacount, nn As Integer
Dim MyData(datacount, 6) As Double
' 省略
datacount=10
' 省略
nn = 1 ’(For文)
MyData(nn, 1) = aa(nn) 'x値(データ1)

この順番だとそれだけで落ちますが?(^^;)

>1,指定していない系列(C1,C3,C5,C7)がグラフに表示される
そもそもデータの指定をしてるのは
>            .ChartData = MyData
MyData は11行7列のデータなんだからタイトルを設定して無いだけで
データは7列表示するように設定しているのだから当然。

>2,X軸に表示させたいデータがY軸に表示され、X軸にはR(配列の番号)が表示される。
結局表示用に作ってるデータは以下になるから当然の結果。
        For nn = 1 To datacount
            aa(nn) = 100.55 / nn
            bb(nn) = 130.55 / nn
            cc(nn) = 150.55 / nn
            'MyData(nn, 0) = 0 '配列を宣言した時点で初期値が入っている 'y値(データ0)
            MyData(nn, 1) = aa(nn) 'x値(データ1)ではなくy値(データ1’)
            MyData(nn, 2) = nn / 200 'y値(データ1)
            MyData(nn, 3) = bb(nn) 'x値(データ2)ではなくy値(データ2’)
            MyData(nn, 4) = nn / 200 'y値(データ2)
            MyData(nn, 5) = cc(nn) 'x値(データ3)ではなくy値(データ3’)
            MyData(nn, 6) = nn / 200 'y値(データ3)
        Next nn
x値も任意にするなら散布図を参考にした方がいいんじゃない?

[ツリー表示へ]
タイトルRe^2: MsChartで配列から折れ線グラフを書く
記事No1136
投稿日: 2004/11/01(Mon) 01:55
投稿者あき
[OSのVer]:Windows XP   [VBのVer]:VB.NET 2003

  るしぇさん、レスありがとうございます!!
  レス頂いてから、それを参考にさせて頂き頑張っています。
  私の返信が遅くなり申し訳ございませんでした。
 
> この順番だとそれだけで落ちますが?(^^;)
  申し訳ございません。載せるサンプルを作った時に間違えてしまいました。

> x値も任意にするなら散布図を参考にした方がいいんじゃない?

  るしぇさんのアドバイス通り散布図にすることにしました。
  基本的な散布図のラインはなんとか書けるようになりました。ありがとうございます!
  しかし、いろいろ試しているのですが、2点ほどどうしても出来ない事があります。
   @Y軸のタイトル表示・目盛りの変更
   A系列の色やフォントの変更

  以下にプログラム文を載せさせて頂きました。ご指導のほど宜しくお願い致します。
    'Y軸のタイトルの設定
            AxMSChart1.Plot.Axis(VtChAxisIdY).AxisTitle.Text = "確率"
            AxMSChart1.Plot.Axis(VtChAxisIdY).AxisTitle.VtFont.Size = 11
            
            With AxMSChart1.Plot.Axis(VtChAxisIdY).AxisTitle
                'Y軸のタイトルを縦向き表示
                .TextLayout.Orientation = VtOrientationVertical
                .VtFont.VtColor.Set(255, 0, 0)
            End With
            With AxMSChart1.Plot.Axis(VtChAxisIdY).ValueScale
                .Auto = False
                .Maximum = 10     '最大値
                .Minimum = 0      '最小値
                .MajorDivision = 5  
                .MinorDivision = 2  
            End With

  ’Axis(VtChAxisIdY)の部分がAxis(VtChAxisIdX)になった
  ’同じプログラム文でX軸はきちんと変更できています。
  ’ご指導のほど宜しくお願い致します。
  

[ツリー表示へ]
タイトルRe^3: MsChartで配列から折れ線グラフを書く
記事No1145
投稿日: 2004/11/02(Tue) 11:30
投稿者花ちゃん
>             With AxMSChart1.Plot.Axis(VtChAxisIdY).ValueScale
未確認ですが、.NET なら定数が違うと思うのですが 直接 1 を設定するか
With AxMSChart1.Plot.Axis(MSChart20Lib.VtChAxisId.VtChAxisIdY).ValueScale では
どうでしょうか?

x軸は定数が 0 だから設定できたのでは。
でもエラー表示(波線)しませんでした。(変数の宣言を強制するように設定されている場合)
どこかで定数を宣言しておられたら別ですが。

# 丸付き数字(機種依存文字)は文字化けの原因になりますのでインターネットでは
 使用しない方がいいですよ! (^_^)

[ツリー表示へ]
タイトルRe^4: MsChartで配列から折れ線グラフを書く
記事No1146
投稿日: 2004/11/03(Wed) 11:21
投稿者あき
[OSのVer]:Windows XP   [VBのVer]:VB.NET 2003

   花ちゃんさんレスありがとうございます!!
  レス頂いてから、いろいろ試してみています。 
> # 丸付き数字(機種依存文字)は文字化けの原因になりますのでインターネットでは
>  使用しない方がいいですよ! (^_^)

  アドバイスありがとうございます。
  以後、気をつけるようにしたいと思います。

> MSChart20Lib.VtChAxisId.VtChAxisIdY  を試してみても同じでしょうか?

  MSChart20Lib.VtChAxisId.VtChAxisIdY で試してみましたら、
  Y軸のメモリとフォントは変更できるようになりました。ありがとうございます!
  しかし、調べてみているのですが、
  以下の2点はやはりどうしても改善されません。
  ご指導のほど宜しくお願い致します。  

  1.Y軸のタイトルの縦表示にする。
    With AxMSChart1.Plot.Axis(MSChart20Lib.VtChAxisId.VtChAxisIdY).AxisTitle.TextLayout
         'Y軸のタイトルを縦向き表示
         .Orientation = VtOrientationVertical
       End With
    このプログラムは花ちゃんさんのサイトを参考にさせて頂いたものなのですが、
    .NETだと何か異なるのでしょうか。

  2.MSチャート(散布図(ライン表示))での各系列の色や線の変更はできないのでしょうか。
    
   ご指導のほど宜しくお願い致します。

[ツリー表示へ]
タイトルRe^5: MsChartで配列から折れ線グラフを書く
記事No1147
投稿日: 2004/11/03(Wed) 13:33
投稿者花ちゃん
>          .Orientation = VtOrientationVertical
  こちらも定数の指定が間違っていませんんか?

>   2.MSチャート(散布図(ライン表示))での各系列の色や線の変更はできないのでしょうか。
できるはずですが? 上記同様定数の指定が間違っていませんか?

変数の宣言を強制するように設定して使用されるようお勧めします。

[ツリー表示へ]
タイトルRe^6: MsChartで配列から折れ線グラフを書く
記事No1148
投稿日: 2004/11/05(Fri) 00:45
投稿者あき
[OSのVer]:Windows XP   [VBのVer]:VB.NET 2003

   花ちゃんさんレスありがとうございます!
  アドバイスを参考にさせて頂き、定数の指定を調べてやり直してみました。

  タイトルの縦表示ですが、
   .TextLayout.VertAlignment = VtVerticalAlignmentTop
  このようにしましたら変更することができました。ありがとうございます!!

> > 2.MSチャート(散布図(ライン表示))での各系列の色や線の変更はできないのでしょうか。
> できるはずですが? 上記同様定数の指定が間違っていませんか?
>
> 変数の宣言を強制するように設定して使用されるようお勧めします。

  サイトやヘルプを参考にしながら頑張っているのですが、
  こちらはどうしても変更することができません。
  試しているこの部分のプログラムを3パターン載せさせて頂きたいと思います。
  ご指導のほど、宜しくお願い致します。

’’’パターン1’’’’’’’’’
 With AxMSChart1
  .Plot.SeriesCollection(1).DataPoints(-1).EdgePen.Style = VtPenStyleDashDotDot
   .Plot.SeriesCollection(1).DataPoints(-1).EdgePen.Width = 10
   .Plot.SeriesCollection(1).DataPoints(-1).EdgePen.VtColor.Automatic = False
   .Plot.SeriesCollection(1).DataPoints(-1).EdgePen.VtColor.Set(0, 255, 255)
 End With

’’’パターン2’’’’’’’’’
  With _
   AxMSChart1.Plot.SeriesCollection.Item(1).GuideLinePen
   ' Set Pen attributes.
   .VtColor.Automatic = False
   .VtColor.Set(0, 255, 255)
   .Width = 10
   .Style = VtPenStyleDashDotDot
   .Join = VtPenJoinRound
   .Cap = VtPenCapRound
  End With

’’’パターン3’’’’’’’’’
  With AxMSChart1.Plot.SeriesCollection.Item(1).StatLine
    ’統計線を設定
    .Flag = VtChStatsRegression
    '線の種類
    .Style(VtChStatsMinimum) = VtPenStyleDashDotDot
    '線の色の自動設定を解除
    .VtColor.Automatic = False
    '色を設定
    .VtColor.Set(0, 255, 255)
    '線の幅を設定
    .Width = 10
   End With

  いろいろいじっているのですが、どうしても上手く変更することができません。
  ご指導のほど、宜しくお願い致します。

[ツリー表示へ]
タイトル回答を読み返して下さい
記事No1149
投稿日: 2004/11/05(Fri) 09:12
投稿者花ちゃん
>    VtVerticalAlignmentTop
  この定数はVB6.0用で、.NET では、ただの変数になるかと思いますが
従って、変数を宣言していないと通常はエラーとなるので解るはずですが?
変数の宣言を強制するように設定して.NETを使用して下さい。
(Option Explicit On)
又は、VtVerticalAlignmentTop を変数として宣言しているのですか?
それとも定数として宣言しているのですか?

[ツリー表示へ]
タイトルRe: 回答を読み返して下さい
記事No1151
投稿日: 2004/11/05(Fri) 13:19
投稿者あき
[OSのVer]:Windows XP   [VBのVer]:VB.NET 2003

  花ちゃんさんレスありがとうございます。
  私の理解と言葉が足らず、本当に申し訳ございません。
 
> 変数の宣言を強制するように設定して.NETを使用して下さい。
> (Option Explicit On)
> 又は、VtVerticalAlignmentTop を変数として宣言しているのですか?
> それとも定数として宣言しているのですか?

  ・プログラム文の一番上に、
   Option Explicit On と書いて設定しています。
  ・花ちゃんさんが言われているように、エラーが出てしまったので、
   Dim VtVerticalAlignmentTop As Integer
     Dim VtPenStyleDashDotDot As Integer
  ’と、変数として宣言しています。

 With AxMSChart1.Plot.Axis(MSChart20Lib.VtChAxisId.VtChAxisIdY).AxisTitle  
  .TextLayout.VertAlignment = VtVerticalAlignmentTop
  ’これで、タイトルの縦表示は行うことができました。
         
  With AxMSChart1
    .Plot.SeriesCollection(1).DataPoints(-1).EdgePen.Style = VtPenStyleDashDotDot
    .Plot.SeriesCollection(1).DataPoints(-1).EdgePen.Width = 10
    .Plot.SeriesCollection(1).DataPoints(-1).EdgePen.VtColor.Automatic = False
    .Plot.SeriesCollection(1).DataPoints(-1).EdgePen.VtColor.Set(0, 255, 255)
   End With
  ’しかし、前回書き込みさせて頂いた3パターンとも
  ’どうしても系列の線を変更することはできませんでした。
  
  花ちゃんさんの質問の答えになっているか不安ですが、
  ご指導のほど、宜しくお願い致します。 

[ツリー表示へ]
タイトルRe:回答を読み返して下さい
記事No1154
投稿日: 2004/11/06(Sat) 09:46
投稿者花ちゃん
私の最初からの回答を読み返して見て下さい。
又、変数と定数についてヘルプ等で調べて見て下さい。

[ツリー表示へ]