DOBON.NET DOBON.NETプログラミング掲示板過去ログ

.net Chartコントロール 散布図で(0,0)→(0,5)のY軸平行線が書けない

環境/言語:[WindowsXP, VB.NET, VB Express2010]
分類:[.NET]

VB Express2010にて、Chartコントロールを使おうとしています。
X, Yの2軸の散布図に対して、X=0を通るY軸に平行な線をプロットする方法はありますでしょうか?

mySeries.Points.Add(0, 0)
mySeries.Points.Add(0, 5)
myChart.Series.Add(mySeries)

という方法では、X軸の値が項目軸として認識されて、上手くプロットできませんでした。
((1, 0)(2, 5)を通る直線になってしまう)
調べたところ、どうやらDataPointのX値が全て0の場合は項目軸と解釈されてしまうようなのですが、
これを回避する方法はありませんでしょうか?
mySeries.IsXValueIndexed=False
としても、項目軸として認識されてしまって、上手くプロットできませんでした。
2012/03/17(Sat) 08:38:35 編集(投稿者)

> mySeries.Points.Add(0, 0)

散布図でデーターを入力するなら下記のようになるのでは。
.Series(CType(i, String)).Points.AddXY(0, 0)
データーが欠損していると認識されるのなら
Chart1.Series(1)("EmptyPointValue") = "Zero"


詳しくは下記をご覧になって下さい。

http://www.hanatyan.sakura.ne.jp/dotnet/chartframe.htm
http://hanatyan.sakura.ne.jp/patio/read.cgi?no=256
返信ありがとうございます。
VBレスキュー様の書かれたことと同じことを私もしているという理解をしています。
何か私が間違っていることがありますでしょうか?
すみません。質問時の書いたコードが不足だったかもしれません。以下のようにコードを書いています。

FormにChart1を貼付けた状態で、
Private Sub MainForm_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim s As New Series

s.ChartType = SeriesChartType.FastLine
s.Points.AddXY(0, 0)
s.Points.AddXY(0, 1)

Chart1.Series.Add(s)
End Sub

これでは、(1, 0), (2, 1)を通る直線になります。
 AddXY(0.5, 0)
 AddXY(0.5, 1)
と、0以外のX値を含むようにすると、予想通り(0.5, 0), (0.5, 1)の直線になります。
また、当然ですが、
 AddXY(0, 0)
 AddXY(0.5, 1)
と0以外のX値が一つでも入れば、これも散布図となり、(0, 0), (0.5, 1)の直線になります。
MSDNによると、Series.Pointsに含まれるDataPointのX値が全て0の場合は項目軸と認識するという仕様のようなのですが、これを回避する方法はないのでしょうか。
X値が0以外のダミーポイントを入れておいて、ダミーは描画しないようにするなどの工夫が必要なのでしょうか。。。
> VBレスキュー様の書かれたことと同じことを私もしているという理解をしています。
> 何か私が間違っていることがありますでしょうか?
> すみません。質問時の書いたコードが不足だったかもしれません。以下のようにコードを書いています。

> s.ChartType = SeriesChartType.FastLine

そもそも、散布図を描きたいと言う事ではなかったのですか?
指定は、折れ線グラフになっていますよね。
折れ線なら、X軸は、数字にしようがラベルと判断されますし、目盛りではありませんよ。

http://hanatyan.sakura.ne.jp/chart/chart1.htm
>> s.ChartType = SeriesChartType.FastLine
> そもそも、散布図を描きたいと言う事ではなかったのですか?
> 指定は、折れ線グラフになっていますよね。

s.ChartType = SeriesChartType.Point <- ポイントに変更
s.Points.AddXY(0, 0)
s.Points.AddXY(0, 1)

Chart1.Series.Add(s)

これでも同様です。このコードで実行すると、(1, 0)、(2, 1)を通る直線ではなく、
X値が項目軸と認識されるようで、(1, 0)、(2, 1)の2点がプロットされます。
何か根本的に間違っている部分があるのでしょうか。

なお、
s.ChartType = SeriesChartType.FastLine
s.Points.AddXY(0, 0)
s.Points.AddXY(0, 1)
s.Points.AddXY(1, 3)
s.Points.Item(2).IsEmpty = True

Chart1.Series.Add(s)
とすれば、X値が全て0ではないので、数値軸と認識され、かつ、(1, 3)のDataPointを描画しないため、
見た目は、(0, 0)、(0, 1)を通る直線を描くことができました。
解決といえば、解決なのですが、スマートではなく、何か正しい?やり方があるように思えるのですが。。。
とりあえず、上記のダミーポイントを入れておく方法でやりたい機能は実現できそうなので、先へ進めていくことにしました。
ご回答ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板