1

mschart で勾配停止を設定する方法はありますか? 列ごとに 1 つの色を設定できますが、列に複数の色を設定できませんでした。

これは私が達成しようとしているものです:

ここに画像の説明を入力

これは私のコードです:

'set color variation on chart 1
Private Sub chart_ssi_rzli_1_Customize(ByVal sender As Object, ByVal e As System.EventArgs) Handles chart_ssi_rzli_1.Customize
    chart_ssi_rzli_1.Series(0).SmartLabelStyle.Enabled = True

    'set max and min y axis according to the current goal ranges.
    chart_ssi_rzli_1.ChartAreas(0).AxisY.Minimum = Session("rzli_red") - 6
    chart_ssi_rzli_1.ChartAreas(0).AxisY.Maximum = Session("rzli_blue") + 4

    For Each dp As DataPoint In chart_ssi_rzli_1.Series(0).Points

        If dp.YValues(0) >= Session("rzli_blue") Then
            dp.Color = Drawing.Color.LightSkyBlue
        ElseIf dp.YValues(0) >= Session("rzli_green") And dp.YValues(0) < Session("rzli_blue") Then
            dp.Color = Drawing.Color.LightGreen
        ElseIf dp.YValues(0) >= Session("rzli_yellow") And dp.YValues(0) < Session("rzli_green") Then
            dp.Color = Drawing.Color.Yellow
        ElseIf dp.YValues(0) <= Session("rzli_red") Then
            dp.Color = Drawing.Color.FromArgb(245, 56, 61)
        End If
    Next

End Sub
4

1 に答える 1

0

グラデーションのサポートは 2 色のみに制限されているため、単一のシリーズでこれを実現する直接的な方法はありません。ただし、積み上げられた各シリーズでStackedColumnとを使用することで、この効果を偽造することができます。GradientStyle.TopBottomこれには、データ系列をいくつかに分割する必要があり、努力する価値がない場合があります。また、凡例から追加のシリーズを非表示にする必要があります。

積み重ねられた列で偽造されたマルチグラデーション

チャートを構成するコード:

// Chart settings inside Form4.Designer.cs
chartArea1.Name = "ChartArea1";
this.chart1.ChartAreas.Add(chartArea1);
this.chart1.Dock = System.Windows.Forms.DockStyle.Fill;
legend1.Name = "Legend1";
this.chart1.Legends.Add(legend1);
this.chart1.Location = new System.Drawing.Point(0, 0);
this.chart1.Name = "chart1";
series1.BackGradientStyle = System.Windows.Forms.DataVisualization.Charting.GradientStyle.TopBottom;
series1.BackSecondaryColor = System.Drawing.Color.Lime;
series1.ChartArea = "ChartArea1";
series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.StackedColumn;
series1.Color = System.Drawing.Color.Yellow;
series1.IsVisibleInLegend = false;
series1.Legend = "Legend1";
series1.Name = "Series1";
series2.BackGradientStyle = System.Windows.Forms.DataVisualization.Charting.GradientStyle.TopBottom;
series2.BackSecondaryColor = System.Drawing.Color.Yellow;
series2.ChartArea = "ChartArea1";
series2.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.StackedColumn;
series2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(0)))));
series2.IsVisibleInLegend = false;
series2.Legend = "Legend1";
series2.Name = "Series2";
series3.BackGradientStyle = System.Windows.Forms.DataVisualization.Charting.GradientStyle.TopBottom;
series3.BackSecondaryColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(0)))));
series3.ChartArea = "ChartArea1";
series3.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.StackedColumn;
series3.Color = System.Drawing.Color.Red;
series3.Legend = "Legend1";
series3.Name = "Series3";
this.chart1.Series.Add(series1);
this.chart1.Series.Add(series2);
this.chart1.Series.Add(series3);
this.chart1.Size = new System.Drawing.Size(292, 273);
this.chart1.TabIndex = 0;
this.chart1.Text = "chart1";

そして、データ ポイントを作成するコードは次のとおりです。

// How to populate the series correctly in Forms.cs
public Form4()
{
    InitializeComponent();

    Random rand = new Random();
    chart1.Series[0].Points.Clear();
    chart1.Series[1].Points.Clear();
    chart1.Series[2].Points.Clear();
    for (int i = 0; i < 5; i++)
    {
        chart1.Series[0].Points.Add(66);
        chart1.Series[1].Points.Add(9);  // 66 + 9 = 75
        chart1.Series[2].Points.Add(rand.Next(1, 25));
    }

    chart1.ChartAreas[0].AxisY.Minimum = 60;
}
于 2012-10-29T10:50:51.820 に答える