C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[10]: 複数のChartをひとつに


(過去ログ 134 を表示中)

[トピック内 49 記事 (1 - 20 表示)]  << 0 | 1 | 2 >>

■78701 / inTopicNo.1)  複数のChartをひとつに
  
□投稿者/ 佐伯 (1回)-(2016/02/10(Wed) 23:46:51)

分類:[VB.NET/VB2005 以降] 

2016/02/10(Wed) 23:54:40 編集(投稿者)

VB初心者ですがお願いします。

2〜4枚の異なる線種のCharを1枚のChartに上下に表示したいのですがそのようなことが出来るのでしょうか?


引用返信 編集キー/
■78703 / inTopicNo.2)  Re[1]: 複数のChartをひとつに
□投稿者/ shu (804回)-(2016/02/11(Thu) 07:41:02)
No78701 (佐伯 さん) に返信

Seriesを増やせばよいです。


Public Class Form1
    Private _tbl As DataTable

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        With Chart1.Series
            With .Add("a")
                .XValueMember = "x"
                .YValueMembers = "y1"
            End With
            With .Add("b")
                .XValueMember = "x"
                .YValueMembers = "y2"
            End With
            With .Add("c")
                .XValueMember = "x"
                .YValueMembers = "y3"
            End With
        End With

        _tbl = New DataTable()
        With _tbl.Columns
            .Add("x", GetType(Integer))
            .Add("y1", GetType(Integer))
            .Add("y2", GetType(Integer))
            .Add("y3", GetType(Integer))
        End With

        _tbl.Rows.Add(1, 2, 3, 4)
        _tbl.Rows.Add(2, 3, 2, 5)
        _tbl.Rows.Add(3, 1, 4, 4)
        _tbl.Rows.Add(4, 5, 3, 7)


        Chart1.DataSource = _tbl

    End Sub
End Class

引用返信 編集キー/
■78704 / inTopicNo.3)  Re[2]: 複数のChartをひとつに
□投稿者/ 佐伯 (2回)-(2016/02/11(Thu) 09:14:32)
No78703 (shu さん) に返信

ありがとうございます。

すみません。こうではなくて、
同じ時系列のデータを複数のCharに別々に表示してるのを1枚のChartにまとめて上下に積み重ねるように表示したいのです。


引用返信 編集キー/
■78705 / inTopicNo.4)  Re[3]: 複数のChartをひとつに
□投稿者/ WebSurfer (811回)-(2016/02/11(Thu) 09:36:15)
No78704 (佐伯 さん) に返信

> 同じ時系列のデータを複数のCharに別々に表示してるのを1枚のChartにまとめて上下に積み重ねるように表示したいのです。

どうも質問者さんのやりたいことのイメージがつかめません。

多分 Windows Forms アプリ用の Chart の話だと思いますが、英語を厭わなければ、
以下のサイトから C# で書いた Windows Forms のサンプルを入手できるので、それ
をダウンロードしてはいかがですか。

Samples Environments for Microsoft Chart Controls
https://code.msdn.microsoft.com/mschart

Windows Forms のサンプルは上記のページで[C# (5.6MB)]をクリックするとダウン
ロードできます。(ASP.NET Web Forms アプリ用なら[HTML (4.4MB)]の方)

「Samples Environments for Microsoft Chart Controls.zip」という名前の zip
ファイルの中の「Windows Forms Samples Environment for Microsoft Chart
Controls\C#」というフォルダに完全なソリューションとしてサンプルが含まれています。

それを適当なフォルダに解凍して Visual Studio(.NET4 なので 2010 以降の
バージョン)で開いて実行してみてください。

基本の解説、いろいろなタイプのサンプルのデモ、それを作るための C# および
VB.NET サンプルコード等が満載の Windows Forms アプリが動くはずです。

その中に作りたいものがあるか見ていただくのがいいと思います。


<注意事項>

Windows Forms アプリのサンプルは、ソリューションのフォルダ名が zip を解凍し
たときのままですと C# と言う名前になっていると思います。具体的には以下通り。

C:\ ... \Windows Forms Samples Environment for Microsoft Chart Controls\C#

これをそのままソリューションのフォルダとして使う場合は、フォルダ名 C# を
CSharp などに書き換えないとうまく動かないのでご注意ください。(最後が # で
終わるのは不可)

引用返信 編集キー/
■78708 / inTopicNo.5)  Re[4]: 複数のChartをひとつに
□投稿者/ 佐伯 (3回)-(2016/02/11(Thu) 18:45:58)
No78705 (WebSurfer さん) に返信

ありがとうございます。

> どうも質問者さんのやりたいことのイメージがつかめません。

http://stocks.finance.yahoo.co.jp/stocks/chart/?code=8267
今、ここにあるチャートようにローソク足と縦棒グラフを2枚のChartで別々に表示してるのを、

下記ように1枚のChartにまとめて表示したいのです。
http://www.opticast.co.jp/cgi-bin/tm/chart.cgi
引用返信 編集キー/
■78711 / inTopicNo.6)  Re[5]: 複数のChartをひとつに
□投稿者/ shu (805回)-(2016/02/11(Thu) 21:01:17)
No78708 (佐伯 さん) に返信

Seriesにaddしたグラフごとの種類を指定して
Yの範囲を指定すれば先の回答でできそうな気がしますが
なぜできないのでしょう?試したコードなど載せて
何が違うのか提示していただいたほうがよろしいかと思います。
引用返信 編集キー/
■78714 / inTopicNo.7)  Re[6]: 複数のChartをひとつに
□投稿者/ 佐伯 (4回)-(2016/02/12(Fri) 00:24:56)
2016/02/12(Fri) 00:31:41 編集(投稿者)
No78711 (shu さん) に返信

お手数をお掛けしています。

> Seriesにaddしたグラフごとの種類を指定して
> Yの範囲を指定すれば先の回答でできそうな気がしますが
すみません。初心者ゆえおっしゃてる意味が理解でずにいます。
78703をそのまま実行しても希望通りにはなりませんでした。 

今、下記サンプルのようなChartが2枚あったとします。
これを78708でも述べましたように1枚のChartにまとめて表示したいのです。

Public Class Form1
    Private dat1(3) As String
    Private dat2(3) As Single
    Private datS As Integer = 2

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
        '日付、数量のデータ
        dat1(0) = "0101" : dat1(1) = "0102" : dat1(2) = "0103"
        dat2(0) = "10" : dat2(1) = "20" : dat2(2) = "30"

        'チャート表示
        Dim ds As New DataSet
        Dim dt As New DataTable
        Dim dtRow As DataRow
        '列の作成
        dt.Columns.Add("日付", GetType(String))
        dt.Columns.Add("数量", GetType(Single))
        ds.Tables.Add(dt)
        'データの追加
        For i = 0 To datS
            dtRow = ds.Tables(0).NewRow
            dtRow(0) = dat1(i)  '日付セット
            dtRow(1) = dat2(i)  '数量セット
            ds.Tables(0).Rows.Add(dtRow)
        Next
        'Chart に表示するデータソースを設定
        Chart1.DataSource = ds
        '系列を初期化    
        Chart1.Series.Clear()
        'グラフの種類の設定
        Dim bou = Chart1.Series.Add("棒グラフ")
        With bou
            .ChartType = DataVisualization.Charting.SeriesChartType.Column
            .XValueMember = "日付"
            .YValueMembers = "数量"
            .IsVisibleInLegend = False
        End With
    End Sub
End Class


引用返信 編集キー/
■78715 / inTopicNo.8)  Re[7]: 複数のChartをひとつに
□投稿者/ shu (806回)-(2016/02/12(Fri) 08:06:31)
No78714 (佐伯 さん) に返信
>
> 今、下記サンプルのようなChartが2枚あったとします。
> これを78708でも述べましたように1枚のChartにまとめて表示したいのです。
>
このサンプルを実行してもChartは1枚しか表示されませんが
どのように2枚表示しているのでしょう?そこを省略すると
何に困っているのか分かりません。
引用返信 編集キー/
■78718 / inTopicNo.9)  Re[8]: 複数のChartをひとつに
□投稿者/ kiku (80回)-(2016/02/12(Fri) 11:00:16)
2016/02/12(Fri) 11:16:47 編集(投稿者)
>Yの範囲を指定すれば先の回答でできそうな気がしますが

上記、shuさんの指摘事項の意味は、
下記のようにy1の値に例えば+20などすれば良いのではないかと理解しました。
質問者さんはどのように理解していますでしょうか?


Public Class Form1
    Private _tbl As DataTable

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        With Chart1.Series
            With .Add("a")
                .XValueMember = "x"
                .YValueMembers = "y1"
            End With
            With .Add("b")
                .XValueMember = "x"
                .YValueMembers = "y2"
            End With
            With .Add("c")
                .XValueMember = "x"
                .YValueMembers = "y3"
            End With
        End With

        _tbl = New DataTable()
        With _tbl.Columns
            .Add("x", GetType(Integer))
            .Add("y1", GetType(Integer))
            .Add("y2", GetType(Integer))
            .Add("y3", GetType(Integer))
        End With

        _tbl.Rows.Add(1, 2+20, 3, 4)
        _tbl.Rows.Add(2, 3+20, 2, 5)
        _tbl.Rows.Add(3, 1+20, 4, 4)
        _tbl.Rows.Add(4, 5+20, 3, 7)


        Chart1.DataSource = _tbl

    End Sub
End Class

引用返信 編集キー/
■78722 / inTopicNo.10)  Re[8]: 複数のChartをひとつに
□投稿者/ 佐伯 (5回)-(2016/02/12(Fri) 17:30:09)
No78715 (shu さん) に返信

下手な質問ですみません。
変てこな言葉づかいになってたらごめんなさい。

長文になってしまいますがChart 2枚のサンプルを載せますのでお願いします。
実行して上段に表示されるのがChart1、下段に表示されるのがChart2 としますね。

下記にある株価チャートを見ていただけますか。
http://stocks.finance.yahoo.co.jp/stocks/chart/?code=8267
この上段の株価を示すローソク足をChart1、下段の出来高を示す棒グラフがChart2としますね。

続いて下記にある株価チャートを見ていただけますか。
http://www.opticast.co.jp/cgi-bin/tm/chart.cgi
ここでは、ローソク足、即ちChart1と、
棒グラフ、即ちChart2 とが上下に一枚のチャートとして表示されてますよね。
このようにChart1とChart2を別々にではなく、一枚のChartにまとめて表示したいのです。

Public Class Form1
    Private dat1(3) As String
    Private dat2(3) As Single
    Private datS As Integer

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Call ChartA()
        Call ChartB()
    End Sub

    Private Sub ChartA()
        '日付、数量、データ数
        dat1(0) = "0101" : dat1(1) = "0102" : dat1(2) = "0103"
        dat2(0) = "10" : dat2(1) = "20" : dat2(2) = "30"
        datS = 2
        'チャート表示
        Dim ds As New DataSet
        Dim dt As New DataTable
        Dim dtRow As DataRow
        '列の作成
        dt.Columns.Add("日付", GetType(String))
        dt.Columns.Add("数量", GetType(Single))
        ds.Tables.Add(dt)
        'データの追加
        For i = 0 To datS
            dtRow = ds.Tables(0).NewRow
            dtRow(0) = dat1(i)  '日付セット
            dtRow(1) = dat2(i)  '数量セット
            ds.Tables(0).Rows.Add(dtRow)
        Next
        'Chart に表示するデータソースを設定
        Chart1.DataSource = ds
        '系列を初期化    
        Chart1.Series.Clear()
        'グラフの種類の設定
        Dim bou = Chart1.Series.Add("棒グラフ")
        With bou
            .ChartType = DataVisualization.Charting.SeriesChartType.Column
            .XValueMember = "日付"
            .YValueMembers = "数量"
            .IsVisibleInLegend = False
        End With

    End Sub

    Private Sub ChartB()
        '日付、数量、データ数
        dat1(0) = "0101" : dat1(1) = "0102" : dat1(2) = "0103"
        dat2(0) = "100" : dat2(1) = "200" : dat2(2) = "300"
        datS = 2
        'チャート表示
        Dim ds As New DataSet
        Dim dt As New DataTable
        Dim dtRow As DataRow
        '列の作成
        dt.Columns.Add("日付", GetType(String))
        dt.Columns.Add("数量", GetType(Single))
        ds.Tables.Add(dt)
        'データの追加
        For i = 0 To datS
            dtRow = ds.Tables(0).NewRow
            dtRow(0) = dat1(i)  '日付セット
            dtRow(1) = dat2(i)  '数量セット
            ds.Tables(0).Rows.Add(dtRow)
        Next
        'Chart に表示するデータソースを設定
        Chart2.DataSource = ds
        '系列を初期化    
        Chart2.Series.Clear()
        'グラフの種類の設定
        Dim bou = Chart2.Series.Add("棒グラフ")
        With bou
            .ChartType = DataVisualization.Charting.SeriesChartType.Column
            .XValueMember = "日付"
            .YValueMembers = "数量"
            .IsVisibleInLegend = False
        End With
    End Sub
End Class

引用返信 編集キー/
■78723 / inTopicNo.11)  Re[9]: 複数のChartをひとつに
□投稿者/ 佐伯 (6回)-(2016/02/12(Fri) 17:39:02)
No78718 (kiku さん) に返信

ありがとうございます。

> 下記のようにy1の値に例えば+20などすれば
したいのとはちょっと違うようです。
すみません。


引用返信 編集キー/
■78728 / inTopicNo.12)  Re[9]: 複数のChartをひとつに
□投稿者/ shu (807回)-(2016/02/13(Sat) 10:07:01)
No78722 (佐伯 さん) に返信

提示された内容を1つのChartに集約する例です。
棒グラフなので横並びになりますが、グラフの種類が違えば見え方も変わってくると思います。


Public Class Form1
    Private dat1(3) As String
    Private dat2(3) As Single
    Private datS As Integer
    Private _tbl As DataTable

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ChartA()
        ChartB()
        ChartC()
    End Sub

    Private Sub ChartA()
        '日付、数量、データ数
        dat1(0) = "0101" : dat1(1) = "0102" : dat1(2) = "0103"
        dat2(0) = 10.0! : dat2(1) = 20.0! : dat2(2) = 30.0!
        datS = 2
        'チャート表示
        Dim ds As New DataSet
        Dim dt As New DataTable
        Dim dtRow As DataRow
        '列の作成
        dt.Columns.Add("日付", GetType(String))
        dt.Columns.Add("数量", GetType(Single))
        ds.Tables.Add(dt)
        'データの追加
        For i = 0 To datS
            dtRow = ds.Tables(0).NewRow
            dtRow(0) = dat1(i)  '日付セット
            dtRow(1) = dat2(i)  '数量セット
            ds.Tables(0).Rows.Add(dtRow)
        Next
        'Chart に表示するデータソースを設定
        Chart1.DataSource = ds
        '系列を初期化    
        Chart1.Series.Clear()
        'グラフの種類の設定
        Dim bou = Chart1.Series.Add("棒グラフ")
        With bou
            .ChartType = DataVisualization.Charting.SeriesChartType.Column
            .XValueMember = "日付"
            .YValueMembers = "数量"
            .IsVisibleInLegend = False
        End With

    End Sub

    Private Sub ChartB()
        '日付、数量、データ数
        dat1(0) = "0101" : dat1(1) = "0102" : dat1(2) = "0103"
        dat2(0) = 100.0! : dat2(1) = 200.0! : dat2(2) = 300.0!
        datS = 2
        'チャート表示
        Dim ds As New DataSet
        Dim dt As New DataTable
        Dim dtRow As DataRow
        '列の作成
        dt.Columns.Add("日付", GetType(String))
        dt.Columns.Add("数量", GetType(Single))
        ds.Tables.Add(dt)
        'データの追加
        For i = 0 To datS
            dtRow = ds.Tables(0).NewRow
            dtRow(0) = dat1(i)  '日付セット
            dtRow(1) = dat2(i)  '数量セット
            ds.Tables(0).Rows.Add(dtRow)
        Next
        'Chart に表示するデータソースを設定
        Chart2.DataSource = ds
        '系列を初期化    
        Chart2.Series.Clear()
        'グラフの種類の設定
        Dim bou = Chart2.Series.Add("棒グラフ")
        With bou
            .ChartType = DataVisualization.Charting.SeriesChartType.Column
            .XValueMember = "日付"
            .YValueMembers = "数量"
            .IsVisibleInLegend = False
        End With
    End Sub

    Private Sub ChartC()
        '列の作成
        _tbl = New DataTable
        With _tbl.Columns
            .Add("日付", GetType(String))
            .Add("数量1", GetType(Single))
            .Add("数量2", GetType(Single))
        End With

        'データの追加
        _tbl.Rows.Add("0101", 10.0!, 100.0!)
        _tbl.Rows.Add("0102", 20.0!, 200.0!)
        _tbl.Rows.Add("0103", 30.0!, 300.0!)
        'Chart に表示するデータソースを設定
        Chart3.DataSource = _tbl
        '系列を初期化    
        Chart3.Series.Clear()
        'グラフの種類の設定
        Dim bou = Chart3.Series.Add("棒グラフ1")
        With bou
            .ChartType = DataVisualization.Charting.SeriesChartType.Column
            .XValueMember = "日付"
            .YValueMembers = "数量1"
            .IsVisibleInLegend = False
        End With
        Dim bou2 = Chart3.Series.Add("棒グラフ2")
        With bou2
            .ChartType = DataVisualization.Charting.SeriesChartType.Column
            .XValueMember = "日付"
            .YValueMembers = "数量2"
            .IsVisibleInLegend = False
        End With

    End Sub

End Class

引用返信 編集キー/
■78729 / inTopicNo.13)  Re[10]: 複数のChartをひとつに
□投稿者/ 佐伯 (7回)-(2016/02/13(Sat) 13:47:15)
No78728 (shu さん) に返信

ありがとうございます。

> 棒グラフなので横並びになりますが、
はい、横並びになりますね。

このChart3の棒グラフ2を棒グラフ1の上に段積みにはならないでしょうか?
即ち、Chart1とChart2を上下に合体したような形にです。
その一例が下記のチャートです。
http://www.opticast.co.jp/cgi-bin/tm/chart.cgi
引用返信 編集キー/
■78730 / inTopicNo.14)  Re[11]: 複数のChartをひとつに
□投稿者/ shu (808回)-(2016/02/13(Sat) 14:23:12)
No78729 (佐伯 さん) に返信
> このChart3の棒グラフ2を棒グラフ1の上に段積みにはならないでしょうか?
> 即ち、Chart1とChart2を上下に合体したような形にです。
> その一例が下記のチャートです。
> http://www.opticast.co.jp/cgi-bin/tm/chart.cgi
再三このサイトを提示されていますが、これは棒グラフではないので
このように表現できるのであって、棒グラフはx軸からyの値までの棒で
表現されるものなので1列にしたら重なってしまいます。なので横並びに
表示されます。これは棒グラフの一般的な表現方法かと思います。

棒グラフを積み重ねるタイプのグラフは
グラフAの値をa、グラフBの値をb
としたときa+bが意味のある場合でありそのようなケースなのでしょうか?
だとしたらStackedColumnにすればよいです。

グラフAは棒グラフ、グラフBは折れ線グラフなら問題はないのではないでしょうか?

とにかくグラフの種類が両方とも棒グラフでは適切でないのではないでしょうか?
引用返信 編集キー/
■78731 / inTopicNo.15)  Re[12]: 複数のChartをひとつに
□投稿者/ 佐伯 (8回)-(2016/02/13(Sat) 17:28:39)
No78730 (shu さん) に返信

> これは棒グラフの一般的な表現方法かと思います。
はい、一般的な表現方法と思います。

> とにかくグラフの種類が両方とも棒グラフでは適切でないのではないでしょうか?
教えていただいた78728の"棒グラフ2"の部分を"折れ線"にもしてみましたが、
これでは普通に一枚のChartに棒グラフと折れ線を重ねて表示することになりますよね。
(違っていたらすみません)
そうではなく一枚のChartに棒グラフは下段の方に、その上の上段には折れ線と言った具合に区別(区分)をして表示をしたいのです。
当然、同じデータ値 0(ゼロ)であってもy軸の値は違ったものになります。

Dim bou2 = Chart3.Series.Add("折れ線")
With bou2
    .ChartType = DataVisualization.Charting.SeriesChartType.Line
    .XValueMember = "日付"
    .YValueMembers = "数量2"
    .IsVisibleInLegend = False
End With

引用返信 編集キー/
■78732 / inTopicNo.16)  Re[13]: 複数のChartをひとつに
□投稿者/ WebSurfer (814回)-(2016/02/13(Sat) 17:43:47)
No78731 (佐伯 さん) に返信

先の私のレスでサンプルを紹介しましたがダウンロードして見てみましたか?

もし見てないのなら、それをやってみて、自分探す努力をしてみませんか?
引用返信 編集キー/
■78734 / inTopicNo.17)  Re[14]: 複数のChartをひとつに
□投稿者/ 佐伯 (9回)-(2016/02/13(Sat) 20:14:00)
No78732 (WebSurfer さん) に返信

ありがとうございます。

> 先の私のレスでサンプルを紹介しましたがダウンロードして見てみましたか?
見てもみましたが私の能力ではちんぷんかんぷんです。
自分で探す努力もしてますがどうにもなりません。

引用返信 編集キー/
■78735 / inTopicNo.18)  Re[15]: 複数のChartをひとつに
□投稿者/ WebSurfer (815回)-(2016/02/13(Sat) 21:06:19)
No78734 (佐伯 さん) に返信

> 見てもみましたが私の能力ではちんぷんかんぷんです。
> 自分で探す努力もしてますがどうにもなりません。

見ているのであれば、少なくともそのサンプルの中のどれが自分のやりたい
ことなのかという話はできるはず。

どれ一つとして自分のやりたいことはないというなら、それはそれでそう言
えばいいと思いますよ。
引用返信 編集キー/
■78737 / inTopicNo.19)  Re[16]: 複数のChartをひとつに
□投稿者/ 佐伯 (10回)-(2016/02/14(Sun) 13:40:51)
No78735 (WebSurfer さん) に返信

> 見ているのであれば、少なくともそのサンプルの中のどれが自分のやりたい
> ことなのかという話はできるはず。
すみません。そのような意味での見たとのことではないです。

ダウンロードはしたのですがおっしゃられてるように
> フォルダ名 C# をCSharp などに書き換えないとうまく動かないので
があるようでファイルを実行することが出来ませんでした。
何しろ「CSharp などに書き換えないと」すらも分からない初心者なのです。

何がしたいかは縷々述べさせて頂いたようなことです。
このような初心者が場違いとは思いつつも質問をさせて頂きました。
よろしくお願いします。



引用返信 編集キー/
■78740 / inTopicNo.20)  Re[17]: 複数のChartをひとつに
 
□投稿者/ WebSurfer (818回)-(2016/02/14(Sun) 14:56:20)
No78737 (佐伯 さん) に返信

> ダウンロードはしたのですがおっしゃられてるように
>>フォルダ名 C# をCSharp などに書き換えないとうまく動かないので
> があるようでファイルを実行することが出来ませんでした。
> 何しろ「CSharp などに書き換えないと」すらも分からない初心者なのです。

Windows OS 付属のエクスプローラでフォルダの名前を書き換えるというような
ことができないような初心者ということでしょうか?

それで Chart を使った VB.NET アプリ開発ということを行っているのは理解に
苦しむのですが・・・

だれか PC の操作に詳しい身近なひとに教えてもらうか、それがダメならソフト
開発を生業にしている業者に委託(丸投げ・・・有償になるでしょうが)しては
いかがですか。
引用返信 編集キー/

次の20件>
トピック内ページ移動 / << 0 | 1 | 2 >>

管理者用

- Child Tree -