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

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

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

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

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

1回答

135閲覧

【VB.net】【Chart】積み上げ面グラフの境界線を消す方法

sashimi1221

総合スコア3

C#

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

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2025/02/19 09:06

実現したいこと

VB.netのチャート機能にて積み上げ面グラフを描画する際に
データが0の系が最後に描画される際にグラフの境界線が
データが0の系の色で表示されてしまう。

境界線の色は最後にデータが>0であったデータの色としたい。

試したこと

各チャートの「BorderWidth」プロパティを0にしたが境界線は消えなかった。

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

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

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

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

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

guest

回答1

0

データが0の系が最後に描画される際にグラフの境界線が
データが0の系の色で表示されてしまう。

下図の赤矢印のところを言ってるんですよね?(緑矢印もうっすら黄色が混じってるようにも見えますがどうなんでしょうか?^^;
問題グラフ

各チャートの「BorderWidth」プロパティを0にしたが境界線は消えなかった。

逆に白いBorderColorにしたらいいんじゃないでしょうか。

cs

1using System.Data; 2using System.Drawing; 3using System.Windows.Forms; 4using System.Windows.Forms.DataVisualization.Charting; 5 6namespace Qpq8e05s3vhidml 7{ 8 public partial class Form1 : Form 9 { 10 public Form1() 11 { 12 InitializeComponent(); 13 14 var dt = new DataTable(); 15 dt.Columns.Add("x"); 16 dt.Columns.Add("y1"); 17 dt.Columns.Add("y2"); 18 dt.Columns.Add("y3"); 19 dt.Rows.Add(0, 2, 1, 1); 20 dt.Rows.Add(1, 2, 0, 1); 21 dt.Rows.Add(2, 2, 0, 1); 22 dt.Rows.Add(3, 1, 0, 0); 23 dt.Rows.Add(4, 1, 0, 0); 24 dt.Rows.Add(5, 0, 0, 0); 25 26 var chart = new Chart 27 { 28 DataSource = dt, 29 Dock = DockStyle.Fill, 30 Parent = this, 31 }; 32 chart.ChartAreas.Add(""); 33 chart.ChartAreas[0].AxisX.MajorGrid.Enabled = false; 34 chart.ChartAreas[0].AxisY.MajorGrid.Enabled = false; 35 36 chart.Series.Add(new Series 37 { 38 ChartType = SeriesChartType.StackedArea, 39 XValueMember = "x", 40 YValueMembers = "y1", 41 }); 42 chart.Series.Add(new Series 43 { 44 ChartType = SeriesChartType.StackedArea, 45 XValueMember = "x", 46 YValueMembers = "y2", 47 }); 48 chart.Series.Add(new Series 49 { 50 BorderWidth = 2, 51 BorderColor = Color.White, 52 53 ChartType = SeriesChartType.StackedArea, 54 XValueMember = "x", 55 YValueMembers = "y3", 56 }); 57 } 58 } 59}

改善グラフ


点ごとに色を変えることもできるんでしたっけ。
C#でグラフを作成して、特定の箇所のみ色を変更したいです

登録(時に連続0を見て色を変える)作業が面倒ですが、見た目はいいですね!^^

cs

1using System.Drawing; 2using System.Windows.Forms; 3using System.Windows.Forms.DataVisualization.Charting; 4 5namespace Qpq8e05s3vhidml 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 chart.ChartAreas.Add(""); 19 20 chart.Series.Add(new Series 21 { 22 ChartType = SeriesChartType.StackedArea, 23 Points = { 24 new DataPoint(0, 2), 25 new DataPoint(1, 2), 26 new DataPoint(2, 2), 27 new DataPoint(3, 1), 28 new DataPoint(4, 1), 29 new DataPoint(5, 0), 30 }, 31 }); 32 chart.Series.Add(new Series 33 { 34 ChartType = SeriesChartType.StackedArea, 35 Points = { 36 new DataPoint(0, 1), 37 new DataPoint(1, 0), 38 new DataPoint(2, 0) { Color = Color.Transparent, }, 39 new DataPoint(3, 0) { Color = Color.Transparent, }, 40 new DataPoint(4, 0) { Color = Color.Transparent, }, 41 new DataPoint(5, 0) { Color = Color.Transparent, }, 42 }, 43 }); 44 chart.Series.Add(new Series 45 { 46 ChartType = SeriesChartType.StackedArea, 47 Points = { 48 new DataPoint(0, 1), 49 new DataPoint(1, 1), 50 new DataPoint(2, 1), 51 new DataPoint(3, 0), 52 new DataPoint(4, 0) { Color = Color.Transparent, }, 53 new DataPoint(5, 0) { Color = Color.Transparent, }, 54 }, 55 }); 56 } 57 } 58}

DataSourceで入れているなら、後から変えてもいいです。

cs

1using System.Data; 2using System.Drawing; 3using System.Windows.Forms; 4using System.Windows.Forms.DataVisualization.Charting; 5 6namespace Qpq8e05s3vhidml 7{ 8 public partial class Form1 : Form 9 { 10 public Form1() 11 { 12 InitializeComponent(); 13 14 var dt = new DataTable(); 15 dt.Columns.Add("x"); 16 dt.Columns.Add("y1"); 17 dt.Columns.Add("y2"); 18 dt.Columns.Add("y3"); 19 dt.Rows.Add(0, 2, 1, 1); 20 dt.Rows.Add(1, 2, 0, 1); 21 dt.Rows.Add(2, 2, 0, 1); 22 dt.Rows.Add(3, 1, 0, 0); 23 dt.Rows.Add(4, 1, 0, 0); 24 dt.Rows.Add(5, 0, 0, 0); 25 26 var chart = new Chart 27 { 28 DataSource = dt, 29 Dock = DockStyle.Fill, 30 Parent = this, 31 }; 32 chart.ChartAreas.Add(""); 33 34 chart.Series.Add(new Series 35 { 36 ChartType = SeriesChartType.StackedArea, 37 XValueMember = "x", 38 YValueMembers = "y1", 39 }); 40 chart.Series.Add(new Series 41 { 42 ChartType = SeriesChartType.StackedArea, 43 XValueMember = "x", 44 YValueMembers = "y2", 45 }); 46 chart.Series.Add(new Series 47 { 48 ChartType = SeriesChartType.StackedArea, 49 XValueMember = "x", 50 YValueMembers = "y3", 51 }); 52 53 chart.DataBind(); 54 foreach (var series in chart.Series) 55 { 56 var p = series.Points; 57 if (p.Count < 2) continue; 58 for (var i = 1; i < p.Count; i++) 59 { 60 if (p[i - 1].YValues[0] == 0 && p[i].YValues[0] == 0) 61 { 62 p[i].Color = Color.Transparent; 63 } 64 } 65 } 66 } 67 } 68}

いい感じグラフ

投稿2025/02/19 14:06

編集2025/02/21 11:22
TN8001

総合スコア9937

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

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

sashimi1221

2025/02/20 03:00

TN8001様 ご回答ありがとうございます。 ご推察の通り、グラフの赤(緑)矢印の部分のお話です。 背景色と同じ色に設定したところかなり理想に近い形にすることができました。 この方法ですと背景にグリッド線が重なるとグリッド線が若干消えてしまうのが気になるところです。
TN8001

2025/02/20 03:56 編集

> この方法ですと背景にグリッド線が重なるとグリッド線が若干消えてしまうのが気になるところです。 あぁそうですね。。。 水平な部分には出ないのをわかりやすくするためグリッドを消しましたが、確かに気になりますか(どっちが気になるのかという話になるか? なんかわざと1pxずらしてるのかってくらい、がっつり出ますよねぇ^^; わたしはMSCartは回答でしか使ったことがないので、有識者の方は何か案があるかもしれません。 わんくまさんはこういったものに強いイメージがあります。 [C# と VB.NET の質問掲示板 - ASP.NET、C++/CLI、Java 何でもどうぞ](http://bbs.wankuma.com/) 何らかのバグだったとしても直る見込みはありません。 原因を特定できればご自身で直すことはできます^^; [dotnet/winforms-datavisualization: System.Windows.Forms.DataVisualization provides basic charting for WinForms applications.](https://github.com/dotnet/winforms-datavisualization)
YAmaGNZ

2025/02/20 04:13 編集

BorderColor = Color.FromArgb(0,0,0,0) と透明にしてはどうですかね? って透明だと出てほしくない部分も出ちゃいますね
sashimi1221

2025/02/20 05:33

YAmaGNZ様 ご回答ありがとうございます。 そうですね。透明にしても複数層に重なるときにどこまで透明にするか・・・? 等色々とロジックを組まなければいけなそうです。
sashimi1221

2025/02/20 05:37

TN8001様 回答ありがとうございます。 >水平な部分には出ないのをわかりやすくするためグリッドを消しましたが、確かに気になりますか(どっちが気になるのかという話になるか? >なんかわざと1pxずらしてるのかってくらい、がっつり出ますよねぇ^^; そうですね。割とわかるくらい見えてしまうのでちょっと・・・となりました。 追記頂いた内容でトライしてみようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.33%

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

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

質問する

関連した質問