MSChartでX軸のデータを0から描きたい

このQ&Aのポイント
  • C#でMSChartを使用してX軸のデータを0から描く方法を教えてください。
  • VS2005なのでツールボックスにMSChartがなく、プロパティウィンドウもありません。
  • X軸方向の最大値は可変であり、10分割にしてラベルを設定しています。
回答を見る
  • ベストアンサー

MSChartでX軸のデータを0から描きたい

C#でMSChartで表を作成しています。 開発環境はワケあってVisualStudio2005。 チャートの種類は「Spline」です。 VS2005なのでツールボックスにMSChartはなく、プロパティウインドウも無いので直接C#で書いています。 やりたいのは、たとえば0~100のデータを描く際、  chartArea1.AxisX.Interval = 10;  chartArea1.AxisX.Maximum = 100;  chartArea1.AxisX.Minimum = 0; Series mode1 = new Series(); mode1.ChartType =(SeriesChartType)4; for (i=0; i=<100; i++) { mode1.Points.Add(data1[i]); } chart1.Series.Add(mode1); とすればX軸のラベルは"0","10",・・・"100"で、実際にはX=1の位置から100まで線が描かれますが、for文のとおり、実はデータは0~100の101個あり、X=0の位置(Y軸にくっついた位置)から100まで線を引きたいのです。  chartArea1.AxisX.Maximum = 101;  chartArea1.AxisX.Minimum = 1; とすればY軸にくっついた状態で線が描かれますが、X軸のラベルも"1","11",・・・となってしまい、ラベルを"0"からにする方法も探しかたが悪いのか、わかりませんでした。 「Spline」で線をX=0の位置から描く方法、または「chartArea1.AxisX.Minimum = 1;」でX軸のラベルを"0"からにする方法、どちらでもいいのでご教示いただきたく質問いたしました。 (そもそも無理なのでしょうか?) ちなみに、X軸方向の最大は可変で、それに対して10分割にしてIntervalを決めているので、実際にはX軸のラベルは"10","20"・・・のような値ではなく"13","26"・・・となることもあります。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • oboroxx
  • ベストアンサー率40% (317/792)
回答No.1

次で試してみてください。 public partial class Form7 : Form { public Form7() { InitializeComponent(); } private void Form7_Load(object sender, EventArgs e) { DataTable dt = new DataTable(); DataColumn dc1 = new DataColumn("x"); dc1.DataType = typeof(int); DataColumn dc2 = new DataColumn("y"); dc2.DataType = typeof(int); dt.Columns.Add(dc1); dt.Columns.Add(dc2); for (int i = 0; i < 101; i++) { DataRow dr = dt.NewRow(); dr[0] = i; dr[1] = i; dt.Rows.Add(dr); } Chart c = new Chart(); ChartArea ca = new ChartArea(); ca.Name = "main"; Axis a1 = new Axis(); a1.Minimum = 0; a1.Maximum = 100; a1.Interval = 10; ca.AxisX = a1; c.ChartAreas.Add(ca); Series s = new Series(); s.XValueMember = "x"; s.XValueType = ChartValueType.Int32; s.XAxisType = AxisType.Primary; s.YValueMembers = "y"; s.YValueType = ChartValueType.Int32; s.YAxisType = AxisType.Primary; s.ChartArea = "main"; s.ChartType = SeriesChartType.Spline; c.Series.Add(s); c.DataSource = dt; c.DataBind(); this.Controls.Add(c); c.Dock = DockStyle.Fill; } }

silk_001
質問者

お礼

サンプルありがとうございます。 dr[1] にXのデータを入れてみて(dr[0] には何も入れず)試したところ、やりたかったChartが描けました。 実際にはデータも線の本数も随時変わる表なのですが、こちらの例を参考に作ってみたいと思います。 ご回答ありがとうございました!

関連するQ&A

  • C# 棒グラフの描画について

    2010 express初心者です。 下記のようにCSVからチャートにしたところ、 private void button1_Click(object sender, EventArgs e) { var lines = File.ReadAllLines("test.csv"); var labels = lines[2].Split(','); //これをX軸として使用する var totalVals = lines[3].Split(','); ChartArea area = new ChartArea(); //最初から設定されているシリーズを削除する chart1.Series.Clear(); //支出総額のシリーズ var totalSrs = new Series("総出費"); totalSrs.ChartType = SeriesChartType.Column; //棒グラフ //支出総額のデータ for (int i = 0; i < labels.Length; i++) { var data = new DataPoint(); data.SetValueY(totalVals[i]); // totalSrs.AxisLabel = "総出費"; totalSrs.Points.Add(data); } chart1.Series.Add(totalSrs); //グラフにシリーズを追加 } 画像のようになり困っています。 CSVは  日時,その月の金額,同,,,,,,,,,,,, としています。 表示の改善方法がありましたらご教授ください。

  • ZedGraphのグラフ作成時のX軸日付

    VB.NET 2008、ZedGraphを使って、 グラフを作成しています。 普通の折れ線グラフを作成しているのですが、 X軸の日付 例えば10月8日が8.10と表示されてしまいます。 希望としては10/8としたいのですが。 データタイプは myPane.XAxis.Type = AxisType.DateAsOrdinal Xのデータは下記のような感じで書いています。 for i=0 to 10  aaa(i)=日付情報  X=aaa(i).ToOADate  Y=・・・  list.Add( X, Y ); Next i わかる方がおられましたら、助言をお願いします。

  • Excelの複合グラフの項目軸を下に移動させる方法を教えてください。

    Excelで複合グラフを作成しました。 業務分析の指標を折れ線(第一数値軸)で、 実数を縦棒(第ニ数値軸)で現しました。 そうしたら自動的に2つのグラフの境界線(グラフの真ん中)に項目軸と目盛ラベルが配されました。 これらをグラフの外(下)に移動させるのが今回の目的です。 目盛ラベルは「軸の書式設定」の「目盛ラベル」で「下端/左端」に設定したら希望の位置に移動することが出来ました。 項目軸(線)だけが真ん中に残りました。 この軸も目盛ラベルと同じ位置の下に移動させたいのですが、複合グラフの場合は出来ないのでしょうか? 出来るとしたら、どんな設定をすればいいのでしょうか? ご存知の方がいらっしゃいましたらご教示ください。 よろしくお願いいたします。

  • IAI単軸ロボットのコントローラーについて

    https://www.iai-robot.co.jp/product/series/control-guide.html 単軸ロボットのコントローラーで、制御方法の選択で位置決め制御とI/O制御の2種類とがありますが、双方の違いが分かりません。 特にI/O制御とは、どんな動きをさせる時に選択するのですか? 位置決め制御は、モータへパルス信号を送り、設定位置に停止させると言う事は、わかりますが、I/O制御の動作イメージが分かりません。 どなたかご教授下さい。

  • 開発環境 Microsoft Visual C# 2010 

    開発環境 Microsoft Visual C# 2010  現在レーダーチャート作成中なのですが、X軸とY軸の最大値と最小値を100と指定したいのですが、プロパティのChartAreaのAxes(軸)のスケールのMaximumとMinmumで指定すればいいと思ってのですが指定ができません。 ここで指定するのではないのでしょうか? もう一つお聞きしたいのですが指定されたx軸とY軸の値に対して+10されて表示されるのですが0で表示したいですがスケールのLogarithmBaseで設定すればいいのではと思ったのですが0で入力ができません。 0では表示できないのでしょうか? もしくはここで設定するのではないのでしょうか? お手数ではございますが、ご回答いただけますようよろしくお願いします。

  • Rの軸ラベルのプログラミングについて、お知恵を!

    独学でRを学んでいるのですが、資料提出のため急いでいるのと疲れてしまったのでどうかお知恵をお貸しください。 統計ソフトRでインデックスの内訳の項目同士の相関を縦3横4にデバイス領域を分割し10個の散布図を作成しているのですが、ラベリングでうまくいかない点があります。 x軸ラベルはすべて一緒のインデックスなのですが、y軸ラベル(ylab)を10個の散布図それぞれに自動的にdata(csvを読み込んだオブジェクト)の列ラベル(該当範囲は6から15番目)を当てはめてくれるようなプログラムを作りたいと思っています。 本来ラベルは文字で出したいのですが、文字より数字(1~10)のほうが簡単かと思い、試行錯誤してきたのですが、どれもうまく行かず疲れてしまいました。 現状、行の数が多いのでデータフレームは作っておらずベクトルのままです。 for(i in 6:15){plot(data[,2],data[,i],ylim=c(0,45), xlab=“", ylab=colnames(data[,i])} ※data[,2]にはx軸のindexのデータが入っています。 上のように打つと、y軸ラベルは10個すべてdata[,i]がそのままでてしまいます。data[,1], data[,2], data[,3]となることを期待したのですが。これは元データセットの型をデータフレームにしたら解消するのでしょうか?ちなみに僭越ながらさらに希望を申すと1,2,3,...と出てくれるプログラムができたらなお嬉しいのですが。 また、これが本来最もやりたいことなのですが、もしラベルの文字列そのものを表示させる方法、または一度リストなどに文字列の10個のラベルを入れてから、iの番号に会わせて順番に10のラベルの中から1つだけを取り出しラベルとして表示してくれるプログラムなどの手法がございましたらぜひご教授くださればと思います。 for文で書いて一度に10の散布図出してしまうとそれぞれのラベルが本当に簡単にはできないので困っています。 それから、土曜日までに結果を出さなければならず、急いでおります。 どうか何卒、よろしくお願いいたします。

  • OWCによるグラフ描写について

    いつもお世話になっています。お知恵を拝借したく質問いたします。 .NET環境でOffice Web Components(OWC)11を使って Web上で折れ線グラフを表示するプログラムを作成していますが、グラフの中で指定部分を表示しないようにしたいのですが方法が解りません。 具体的にはX軸の「1,2,3,4,5,6,7,8,9,10」に対して Y軸の「10,20,30,40,50」まで表示して残りを非表示にしたいのです。Excelではデータ部分を空白にすれば非表示になりますが、''で指定しても'NULL'で指定しても「0」扱いになってしまいます。 指定方法をご存知の方がいらっしゃいましたら、どうかご教授ください。 よろしくお願いいたします 開発環境 WindowsServer2003R2 .NetFrameWork2.0 VisualStudio2005 Office Web Components(OWC)11 -------------------------以下ソース------------------------- Dim chartSpace As ChartSpace = New ChartSpaceClass() Dim chChart As ChChart = chartSpace.Charts.Add(0) '折れ線グラフ chChart.Type = ChartChartTypeEnum.chChartTypeLine 'Y軸 Dim YAxis As ChScaling YAxis = chChart.Axes(ChartAxisPositionEnum.chAxisPositionLeft).Scaling YAxis.Type = ChartScaleTypeEnum.chScaleTypeLinear YAxis.Maximum = 100 YAxis.Minimum = -100 'X軸 Dim XAxis As ChScaling XAxis = chChart.Axes(ChartAxisPositionEnum.chAxisPositionBottom).Scaling XAxis.Type = ChartScaleTypeEnum.chScaleTypeLinear XAxis.Maximum = 14 '値をプロット Dim series As ChSeries = chChart.SeriesCollection.Add(0) series.Type = chartSpace.Constants.chChartTypeScatterLine series.SetData(ChartDimensionsEnum.chDimYValues, CInt(ChartSpecialDataSourcesEnum.chDataLiteral), "10,20,30,40,50,'','','','','',''") series.SetData(ChartDimensionsEnum.chDimXValues, CInt(ChartSpecialDataSourcesEnum.chDataLiteral), "1,2,3,4,5,6,7,8,9,10") With chartSpace .Border.Color = chartSpace.Constants.chColorNone End With Response.BinaryWrite(chartSpace.GetPicture("gif", 500, 400)) Response.End() -------------------------END-------------------------

  • Gchart

    gchartを使っているのですが、グラフの軸の開始位置の値を変えたいのですがどうしたらいいのでしょうか。 もう一つ、x軸に表示する軸ラベルを変えたいのですがどうしたらいいでしょうか。

  • 自動運転中の各軸位置、速度の独立制御は可能?

    初めて質問します。よろしくお願いします。 主に、各社PLCおよびWindowsソフトの開発などを行っているものですが、 NC設備の開発は今回が2度目で、廻りに質問できる人物がいません。 各軸および、Mコードによる出力の非同期制御?をおこないたのですが、 NC言語での記述がさっぱりわかりません。 FANUC機向け(FANUCSeries16i/18i/21i-MODELB)に近い情報を頂ければ なんとかなりそうです。 <やりたいこと> ・X軸:線形軸)繰り返し往復で位置決め ・Y軸:線形軸)マクロ変数 数個により、随時位置決め      (位置決め動作中に次の位置決めが行うのが理想) ・Z軸:線形軸)マクロ変数により、随時速度変更を行いたい(方向反転も頻繁) ・B軸:回転軸)やりたい内容は前行のZ軸と同じ ・Mコード処理 下記の処理を各軸の位置決め完了まで行わずに 位置決め処理起動と位置、速度変更指令後 処理をグルグル廻して次のブロックへ どんどん移行したいのです(できるだけ滑らかに) <処理概略> 自動開始 ↓←←←←←(1) X軸処理 ↓ Y軸処理 ↓ Z軸処理 ↓ B軸処理 ↓ 周辺処理(Mコードにて) ↓ 終了条件?→no→(1)へ ↓ yes ↓ 完了 こういった処理はNCでは不可能でしょうか? またできたとしても、ハンドル割り込み等が必要なのでしょうか? ラダー/カスタムマクロも作成可能な状況です。 ヒントになる情報だけでも助かりますので宜しくお願いします。

  • 近似曲線の数式について(エクセルのグラフ)

    エクセルの線グラフで項目軸ラベルの数値が6,9,12で、値が0.92、1.43、1.90であるグラフの近似曲線(線形近似)の数式を求めたら、y=0.49x+0.4367となりました。この数式は、(x,y)=(1,0.92),(2,1.43),(3,1.90)となっているようですが、僕はこの数式を項目軸ラベルにあわせて(x,y)=(6,0.92),(9,1.43),(12,1.90)となるようにしたいのですが、そのようにできますか?できるのなら、どのようにしたらいいのでしょうか?教えてください。

専門家に質問してみよう