質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

3回答

18624閲覧

C# チャートのx軸ラベルを任意の間隔で設定したい

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2020/09/25 10:59

編集2020/09/27 01:24

C#のチャート(Windows Forms用のChart)を使って、折れ線グラフを作成しています。
Datagridviewの数値を折れ線グラフに表示させるプログラムですが、
下記のサイトの2つ目の画像のように、X軸の目盛を0,2000,4000のように、等間隔にしたいのですが、任意の値を設定する方法する方法がわかりません。
https://stackoverrun.com/ja/q/5398138
(※上記のURLの記事はASP.NET 用の Chart)

Datagridviewの数値は、下記の通りです。
x(Cells[0]), y(Cells[1])
532, 8
891, 13
1241, 9
1875, 5
2134, 16
3242, 2
3923, 6
4745, 4
…のように、xの数値が16000まで続いています。

ちなみに、ソフトはVisual Studio 2019です。

private void button1_Click(object sender, EventArgs e) //ボタンを押すと、グラフ表示 { Chart(); } public void Chart() //グラフ表示 {   ChartArea area = new ChartArea("area1"); Title title = new Title("title1"); title.DockedToChartArea = "area1"; area.Name = "グラフテスト"; Series series1 = new Series(); chart1.Series.Clear(); series1.ChartType = SeriesChartType.Line; //折れ線 //グラフのデータを追加 for (int row = 0; row > dataGridView1.RowCount; row++) { series1.Points.AddXY(dataGridView1.Rows[row].Cells[0].Value,dataGridView1.Rows[row].Cells[1].Value); } //X軸目盛り設定 chart1.ChartAreas["ChartArea1"].AxisX.IsMarginVisible = true; chart1.ChartAreas["ChartArea1"].AxisX.Interval = 2000; chart1.ChartAreas["ChartArea1"].AxisX.Maximum = 16000; chart1.ChartAreas["ChartArea1"].AxisX.Minimum = 0; //Y軸目盛り設定 chart1.ChartAreas["ChartArea1"].AxisY.Minimum = 0; chart1.ChartAreas["ChartArea1"].AxisY.Maximum = 50; chart1.ChartAreas["ChartArea1"].AxisY.Interval = 10; //目盛線 chart1.ChartAreas["ChartArea1"].AxisX.MajorGrid.Enabled = false; chart1.ChartAreas["ChartArea1"].AxisY.MajorGrid.Enabled = true; chart1.Series.Add(series1); }

プログラムは、一部抜粋しましたが、上記のように設定しました。
実際に「button1」ボタンを押すと、X軸の目盛が勝手に変わって、Datagridviewの値が表示されています。

理想としては、x軸の起点を0と表示し、それ以降は2000毎に目盛りと線を2000,4000・・・,16000と表示したいと思っています。

何か良い方法はありますでしょうか?
質問の方法が変かと思いますが、よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/09/25 23:31

url の文字列を記載するだけでなくリンクを張ってください。 「Datagridviewの数値」とは何でしょう?
退会済みユーザー

退会済みユーザー

2020/09/26 02:30

説明不足ですみません。 Datagridviewの数値は、下記の通りです。画像貼り付けたかったのですが、貼り付けることができなかったです…。 x, y 532, 8 891, 13 1241, 9 1875, 5 2134, 16 3242, 2 3923, 6 4745, 4 …のように、xの数値が16000まで続いています。
退会済みユーザー

退会済みユーザー

2020/09/26 04:10

url の文字列を記載するだけでなくリンクを張ってください。
退会済みユーザー

退会済みユーザー

2020/09/26 04:58

上記は質問欄を編集して追記・修正願います。コメント欄は「質問への追記・修正の依頼」のための場所です。コメント欄は初期表示では開いてないし、ここに書いても見ない人もいますから。
退会済みユーザー

退会済みユーザー

2020/09/26 05:12

参考にしている記事は ASP.NET 用の Chart ですが、であれば、そのことも質問欄を編集して追記してください。
退会済みユーザー

退会済みユーザー

2020/09/26 05:56

Chart には Windows Forms 用と ASP.NET Web Forms 用の 2 種類あるのはご存じですか? > C#のチャート(ASP.NET用のChart)を使って、散布図グラフを作成しています。 質問に DataGridView とあるので Windows Forms アプリを作っていると思っていましたが、参考にしている記事は ASP.NET Web Forms 用の Chart の話で、一体どっちなのか分からなかったので上のコメントで聞いたつもりだったのですが。
退会済みユーザー

退会済みユーザー

2020/09/26 06:06

すみません、誤記です。指摘ありがとうございます。
退会済みユーザー

退会済みユーザー

2020/09/26 07:31

Windows Forms 用の Chart サンプルに Setting Axis Labels Interval というものがありましたので回答欄で紹介します。すでにご存じで、回答にはなってないかもしれませんが、回答欄でないと画像は貼れないのでご容赦ください。
YAmaGNZ

2020/09/26 08:23

実際にChartにデータをセットしている部分などグラフを構築している部分のソースは提示できませんか?
退会済みユーザー

退会済みユーザー

2020/09/27 01:18

> 実際にボタンを押すと、X軸の目盛が勝手に変わって、Datagridviewの値が表示されています。 「X軸の目盛が勝手に変わって」という問題が起こる「実際にボタンを押す」の部分のコードはどうなっているのですか?
退会済みユーザー

退会済みユーザー

2020/09/27 01:25

指摘ありがとうございます。
退会済みユーザー

退会済みユーザー

2020/09/27 01:52 編集

TN8001 さんの回答のコードと基本的には同じに見えますが、違いを確認してみましたか? ざっと見ですが、質問者さんは button1_Click で表示、TN8001 さんの回答のコードは Form のコンストラクタで表示というところが違うだけのように見えます。 それで結果が違うとすると、質問に書いてない何かが違うということと思われます。質問に書いてないことは質問者さんにしか分からないので、自分でよく見比べて調べていただくという話になると思うのですが。
退会済みユーザー

退会済みユーザー

2020/09/27 02:02

すみません。解決しました。初心者で、説明不足などいろいろご迷惑をおかけしてしまい大変申し訳ございませんでした。
退会済みユーザー

退会済みユーザー

2020/09/27 02:07

> 解決しました。 どのように解決したのかを書いてこのスレッドはクローズしてください。 https://teratail.com/help/question-tips に書いてありますように、Teratail は「質問と回答を通してお互いに知識や情報を交換・共有する場所」ということです。なので、質問者さんにもどのように解決したかの情報提供が求められます。
guest

回答3

0

ベストアンサー

出せるように書き換えるのはわかりますが、実際のコードと乖離が大きいと回答に困ります。

  • 使っている形跡のないChartArea areaTitle title
  • 散布図と言っているのにSeriesChartType.Line
  • 回らないforループ

実際にボタンを押すと、X軸の目盛が勝手に変わって、Datagridviewの値が表示されています。

おかしいところを直しただけですが、希望通りの表示に見えます。
提示コード以外の部分に原因があるんじゃないでしょうか。

cs

1using System; 2using System.Windows.Forms; 3using System.Windows.Forms.DataVisualization.Charting; 4 5namespace Questions294097 6{ 7 public partial class Form1 : Form 8 { 9 public Form1() 10 { 11 InitializeComponent(); 12 13 DataGridView(); 14 Chart(); 15 } 16 17 private void DataGridView() 18 { 19 dataGridView1.ColumnCount = 2; 20 dataGridView1.AllowUserToAddRows = false; 21 22 var random = new Random(); 23 var x = 0; 24 while(true) 25 { 26 x += random.Next(300) + 300; 27 if(16000 < x) break; 28 dataGridView1.Rows.Add(x, random.Next(50)); 29 } 30 } 31 32 private void Chart() 33 { 34 chart1.Series.Clear(); 35 var series1 = new Series 36 { 37 ChartType = SeriesChartType.Point, 38 }; 39 40 for(var row = 0; row < dataGridView1.RowCount; row++) 41 { 42 series1.Points.AddXY(dataGridView1.Rows[row].Cells[0].Value, dataGridView1.Rows[row].Cells[1].Value); 43 } 44 45 chart1.ChartAreas["ChartArea1"].AxisX.IsMarginVisible = true; 46 chart1.ChartAreas["ChartArea1"].AxisX.Interval = 2000; 47 chart1.ChartAreas["ChartArea1"].AxisX.Maximum = 16000; 48 chart1.ChartAreas["ChartArea1"].AxisX.Minimum = 0; 49 50 chart1.ChartAreas["ChartArea1"].AxisY.Minimum = 0; 51 chart1.ChartAreas["ChartArea1"].AxisY.Maximum = 50; 52 chart1.ChartAreas["ChartArea1"].AxisY.Interval = 10; 53 54 chart1.ChartAreas["ChartArea1"].AxisX.MajorGrid.Enabled = false; 55 chart1.ChartAreas["ChartArea1"].AxisY.MajorGrid.Enabled = true; 56 57 chart1.Series.Add(series1); 58 } 59 } 60}

デザイナでDataGridViewChartを置いています。
アプリ画像

投稿2020/09/26 21:10

編集2023/07/23 06:55
TN8001

総合スコア9862

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/09/27 00:50

すみません。散布図ではなく、折れ線です…。質問欄の内容を修正しました。 折れ線の場合も、問題なくForm1の画像通り表示できるでしょうね…。 >提示コード以外の部分に原因があるんじゃないでしょうか。 こちらで確認します。
guest

0

最初、Datagridviewの値の変数が"string型"となっていました。Datagridviewの値の変数("string型"→"var型")を変更してみたら、希望通り表示できました。

投稿2020/09/28 10:09

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Windows Forms 用の Chart サンプルに Setting Axis Labels Interval というものがありましたので紹介します。

ただし、このサンプルの X 軸は日付なので質問者さんのケースに適用できるかどうかは分かりません。

X Axis Interval のドロップダウンの選択によってインターバルを変えることができます。

イメージ説明

C# Source をクリックすると以下のソースコード(ごく一部ですが)が表示されます。

イメージ説明

すでにご存じ or ハズレかもしれませんが、回答欄でないと画像は貼れないのでご容赦ください。

投稿2020/09/26 07:34

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/09/27 00:46

ありがとうございます。参考します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問