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

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

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

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

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

Q&A

2回答

2064閲覧

C#のChartコントロールで、X軸の、範囲外のラベルを非表示にしたい。

onixlasor

総合スコア0

C#

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

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

0グッド

0クリップ

投稿2022/09/07 20:09

編集2022/09/07 20:13

前提

C# で、Windows Forms で、System.Windows.Forms.Datavisualization.Charting.Chart を使って、
チャートを表示しています。

下記の画像は、1~12月に数値を割り当てて表示しているのですが、1年は1~12月なので、
当然、0月も13月も存在しません。

ですが、下記のイメージを見ていただくと、0と13が表示されてしまいます。
どうすれば1~12だけの表示にできるのでしょうか?

イメージ説明

ソースコードは下記の通りです。

C#

1private void ShowChart() 2{ 3 Chart1.Series.Clear(); 4 Chart1.Legends.Clear(); 5 Chart1.ChartAreas.Clear(); 6 7 var series = new Series(); 8 series.ChartType = SeriesChartType.Column; 9 series.IsValueShownAsLabel = true; 10 11 var area = new ChartArea(); 12 13 for(int i = 0; i < 12; i++) 14 { 15 series.Points.Add(new DataPoint(i+1, new Random().Next(1000*i,100000))); 16 } 17 18 Chart1.Series.Add(series); 19 Chart1.ChartAreas.Add(area); 20}

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2022/09/08 02:31 編集

Chart サンプルを持っていて、使えるようになっていますか? 持ってないと話が通じにくいので、入手して使えるようにできませんか? 入手方法・設定方法は以下の記事を見てください。 Windows Forms 用 Chart Samples http://surferonwww.info/BlogEngine/post/2021/11/30/chart-samples-for-windows-forms-application.aspx 1 ~ 12 の範囲だけ表示するように設定できますが、そうすると、棒グラフの場合 1 月と 12 月の棒の表示が半分切れてしまいます。棒グラフに代えて折れ線グラフとかにすることはできますか?
退会済みユーザー

退会済みユーザー

2022/09/08 21:26

質問者さん、無言ですが、回答したのでそれに対するフィードバックを返してください。役に立った/立たなかったぐらいはすぐに返せるのでは? 役に立たなかったならどこがダメかを書くとより期待に近い回答が出てくるかも。とにかく無言は NG です。
guest

回答2

0

下記の画像は、1~12月に数値を割り当てて表示しているのですが、1年は1~12月なので、
当然、0月も13月も存在しません。

元データが年月なら、入れるデータもDateTimeでいいんじゃないでしょうか。

どうすれば1~12だけの表示にできるのでしょうか?

DateTimeを入れたらなぜか両端が消えて、期待通りの表示になりました。

cs

1using System; 2using System.Windows.Forms; 3using System.Windows.Forms.DataVisualization.Charting; 4 5namespace Qjbz7qvudnra237 6{ 7 public partial class Form1 : Form 8 { 9 public Form1() 10 { 11 InitializeComponent(); 12 13 var chart = new Chart 14 { 15 Dock = DockStyle.Fill, 16 Parent = this, 17 }; 18 19 var series = new Series 20 { 21 ChartType = SeriesChartType.Column, 22 IsValueShownAsLabel = true, 23 XValueType = ChartValueType.Date, 24 }; 25 26 var area = new ChartArea(); 27 area.AxisX.Interval = 1; 28 area.AxisX.IntervalType = DateTimeIntervalType.Months; 29 // [カスタム日時形式文字列 | Microsoft Docs](https://docs.microsoft.com/ja-jp/dotnet/standard/base-types/custom-date-and-time-format-strings?redirectedfrom=MSDN#UsingSingleSpecifiers) 30 area.AxisX.LabelStyle.Format = "%M"; 31 32 for (var i = 1; i <= 12; i++) 33 { 34 series.Points.Add(new DataPoint(new DateTime(2021, i, 1).ToOADate(), i * 1000)); 35 } 36 37 chart.Series.Add(series); 38 chart.ChartAreas.Add(area); 39 } 40 } 41}

アプリ画像


いろいろ試していたらDateTimeIntervalType.Monthsだけ特別扱いされているような?挙動でした。
DaysYearsなんかは両端が表示されます。。。なんでだろ?よーわからんw

投稿2022/09/08 08:55

編集2022/09/09 08:49
TN8001

総合スコア9321

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

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

0

Chart サンプルを持っている、もしくは上の質問の 2022/09/08 11:31 の私のコメントで書いたように入手して使えるようにできるという前提で回答しておきます。

下記のイメージを見ていただくと、0と13が表示されてしまいます。どうすれば1~12だけの表示にできるのでしょうか?

(1) Axis Margins

簡単なのは Axis.IsMarginVisible プロパティを false に設定することです。Chart サンプルで言うと以下のようになります。

イメージ説明

そうすると、棒グラフの場合 1 月と 12 月の棒の表示が半分切れてしまいますが、棒グラフに代えて折れ線グラフとかにすることができればこれが簡単でよさそうです。

(2) Custom Labels

上記 (1) が NG の場合は CustomLabel の設定を考えてみてください。

イメージ説明

例えば、質問者さんのコードに CustomLabel の設定を以下のように追加すると、

C#

1using System; 2using System.Windows.Forms; 3using System.Windows.Forms.DataVisualization.Charting; 4 5namespace WindowsFormsApp1 6{ 7 public partial class Form7 : Form 8 { 9 private Chart chart1; 10 public Form7() 11 { 12 InitializeComponent(); 13 14 chart1 = new Chart 15 { 16 Location = new System.Drawing.Point(50, 50), 17 Width = 700, 18 Height = 350 19 }; 20 Controls.Add(chart1); 21 } 22 23 private void Form7_Load(object sender, EventArgs e) 24 { 25 chart1.Series.Clear(); 26 chart1.Legends.Clear(); 27 chart1.ChartAreas.Clear(); 28 29 var series = new Series(); 30 series.ChartType = SeriesChartType.Column; 31 series.IsValueShownAsLabel = true; 32 33 var area = new ChartArea(); 34 35 for (int i = 0; i < 12; i++) 36 { 37 series.Points.Add(new DataPoint(i + 1, new Random().Next(1000 * i, 100000))); 38 } 39 40 // CustomLabel の設定 41 CustomLabel customLabel1 = new CustomLabel(); 42 CustomLabel customLabel2 = new CustomLabel(); 43 CustomLabel customLabel3 = new CustomLabel(); 44 CustomLabel customLabel4 = new CustomLabel(); 45 CustomLabel customLabel5 = new CustomLabel(); 46 CustomLabel customLabel6 = new CustomLabel(); 47 CustomLabel customLabel7 = new CustomLabel(); 48 CustomLabel customLabel8 = new CustomLabel(); 49 CustomLabel customLabel9 = new CustomLabel(); 50 CustomLabel customLabel10 = new CustomLabel(); 51 CustomLabel customLabel11 = new CustomLabel(); 52 CustomLabel customLabel12 = new CustomLabel(); 53 customLabel1.FromPosition = 0.5; 54 customLabel1.Text = "Jan"; 55 customLabel1.ToPosition = 1.5; 56 customLabel2.FromPosition = 1.5; 57 customLabel2.Text = "Feb"; 58 customLabel2.ToPosition = 2.5; 59 customLabel3.FromPosition = 2.5; 60 customLabel3.Text = "Mar"; 61 customLabel3.ToPosition = 3.5; 62 customLabel4.FromPosition = 3.5; 63 customLabel4.Text = "Apr"; 64 customLabel4.ToPosition = 4.5; 65 customLabel5.FromPosition = 4.5; 66 customLabel5.Text = "May"; 67 customLabel5.ToPosition = 5.5; 68 customLabel6.FromPosition = 5.5; 69 customLabel6.Text = "Jun"; 70 customLabel6.ToPosition = 6.5; 71 customLabel7.FromPosition = 6.5; 72 customLabel7.Text = "Jul"; 73 customLabel7.ToPosition = 7.5; 74 customLabel8.FromPosition = 7.5; 75 customLabel8.Text = "Aug"; 76 customLabel8.ToPosition = 8.5; 77 customLabel9.FromPosition = 8.5; 78 customLabel9.Text = "Sep"; 79 customLabel9.ToPosition = 9.5; 80 customLabel10.FromPosition = 9.5; 81 customLabel10.Text = "Oct"; 82 customLabel10.ToPosition = 10.5; 83 customLabel11.FromPosition = 10.5; 84 customLabel11.Text = "Nov"; 85 customLabel11.ToPosition = 11.5; 86 customLabel12.FromPosition = 11.5; 87 customLabel12.Text = "Dec"; 88 customLabel12.ToPosition = 12.5; 89 area.AxisX.CustomLabels.Add(customLabel1); 90 area.AxisX.CustomLabels.Add(customLabel2); 91 area.AxisX.CustomLabels.Add(customLabel3); 92 area.AxisX.CustomLabels.Add(customLabel4); 93 area.AxisX.CustomLabels.Add(customLabel5); 94 area.AxisX.CustomLabels.Add(customLabel6); 95 area.AxisX.CustomLabels.Add(customLabel7); 96 area.AxisX.CustomLabels.Add(customLabel8); 97 area.AxisX.CustomLabels.Add(customLabel9); 98 area.AxisX.CustomLabels.Add(customLabel10); 99 area.AxisX.CustomLabels.Add(customLabel11); 100 area.AxisX.CustomLabels.Add(customLabel12); 101 // ここまで 102 103 chart1.Series.Add(series); 104 chart1.ChartAreas.Add(area); 105 } 106 } 107} 108

結果は以下の通りとなります。

イメージ説明

投稿2022/09/08 03:57

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問