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

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

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

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

Q&A

1回答

8132閲覧

c# グラフの特定の値の場所の背景色を変えたい

hiro0215

総合スコア15

C#

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

0グッド

0クリップ

投稿2020/01/17 04:08

お世話になります
visualStudioでグラフを作成しているのですが、特定範囲のグラフの背景色を変えたいのですがやりかたがわかりません。

c#

1using System; 2using System.Collections.Generic; 3using System.Drawing; 4using System.Text; 5using System.Windows.Forms; 6using System.IO; 7using System.Drawing.Imaging; 8using System.Windows.Forms.DataVisualization.Charting; 9 10namespace グラフ 11{ 12 public partial class Form1 : Form 13 { 14 public Form1() 15 { 16 InitializeComponent(); 17 } 18 19 20 21 private void button1_Click(object sender, EventArgs e) 22 { 23 24 List<string> list = new List<string>(); 25 26 //textファイル読み込み 27 StreamReader sr = new StreamReader("ファイル名", Encoding.Default); 28 while (sr.Peek() >= 0) 29 { 30 string line = ""; 31 32 while ((line = sr.ReadLine()) != null) 33 { 34 list.Add(line); 35 } 36 } 37 sr.Close(); 38 sr.Dispose(); 39 40 41 chart1.Series.Clear(); 42 chart1.Legends.Clear(); 43 chart1.ChartAreas.Clear(); 44 chart1.Hide(); 45 46 chart1.ChartAreas.Add(new ChartArea("1")); 47 48 49 50 // Seriesの作成 51 Series series1 = new Series(); 52 series1.ChartArea = "1"; 53 series1.ChartType = SeriesChartType.Line; 54 55 56 chart1.ChartAreas[0].AxisX.Minimum = DateTime.MinValue.AddHours(8).ToOADate(); 57 chart1.ChartAreas[0].AxisX.Maximum = DateTime.MinValue.AddHours(17).ToOADate(); 58 chart1.ChartAreas[0].AxisX.Interval = 1; 59 chart1.ChartAreas[0].AxisX.IntervalType = DateTimeIntervalType.Hours; 60 chart1.ChartAreas[0].AxisX.IntervalOffsetType = DateTimeIntervalType.Hours; 61 chart1.ChartAreas[0].AxisX.LabelStyle.Format = "HH:mm:ss"; 62 63 chart1.ChartAreas[0].AxisY.Maximum = 3; 64 chart1.ChartAreas[0].AxisY.Minimum = 1; 65 66 chart1.Series.Add(series1); 67 chart1.Series[0].ChartType = SeriesChartType.Line; 68 chart1.Series[0].XValueType = ChartValueType.Time; 69 chart1.Series[0].IsVisibleInLegend = false; 70 chart1.Series[0].IsValueShownAsLabel = false; 71 72 foreach (var line in list) 73 { 74 75 var xValue = DateTime.Parse("0001/01/01 " + " "+line.Split('\t')[0]); 76 var yValue = line.Split('\t')[1]; 77 var dp = new DataPoint(); 78 dp.SetValueXY(xValue, yValue); 79 dp.IsValueShownAsLabel = false; 80 chart1.Series[0].Points.Add(dp); 81 } 82 } 83 } 84}

Y軸が特定の範囲に入ったらその部分の背景に色を付けたいのですが可能でしょうか?
もしできるとしたら、どのようにしたらできるでしょうか?
よろしくお願いします

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

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

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

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

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

guest

回答1

0

グラフの特定の値の場所の背景色を変えたい

StripLine クラスを使ってください。

使い方

ChartAreaCollection.AxisY.StripLinesプロパティに対してStripLineオブジェクトをAddしていけば良いです。

C#

1StripLine sl = new StripLine(); 2sl.BackColor = Color.FromArgb(64, Color.LightSeaGreen); 3sl.StripWidth = 50; 4sl.IntervalOffset = 100; 5chart1.ChartAreas[0].AxisY.StripLines.Add(sl);

色や幅、オフセットは好きに決めてください。

参考

Winforms chart: how to enable background color gauge

投稿2020/01/17 04:36

編集2020/01/17 04:49
BluOxy

総合スコア2663

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

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

hiro0215

2020/01/17 05:48

背景に色を付けるにはStripLineを使えばいいんですね! 垂直に入れる場合はAxisYをAxisXにすれば使えそうです。 Xにした場合にY軸の値を判定基準にしい時はどうしたらよいのでしょうか?
BluOxy

2020/01/17 05:55

掲示されたコードで答えるなら、yValueが基準に達していたときに、SplitLineを追加するよう処理を作成すれば良いと思います。 また、SplitLineの幅やオフセットは、グラフのX軸の最小値・最大値を設定して、そのXの幅に合わせて設定する工夫が必要だと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問