我的chart
类型为columns
。如何为Y轴添加背景颜色?喜欢这张图中的灰色?这可能吗?我在Visual Studio 2015中使用Chart Control
表示Winforms。我的数据来自SQL。
填充图表的代码:
chart1.DataSource = dtSalesChart;
foreach (DataRow row in dtSalesChart.Rows)
{
Series S = new Series(row["Period"].ToString());
chart1.Series.Add(S);
}
for (int j = 1; j < dtSalesChart.Columns.Count; j++)
{
for (int i = 0; i < dtSalesChart.Rows.Count; i++)
{
chart1.Series[i].Points.AddXY(dtSalesChart.Columns[j].ColumnName,
dtSalesChart.Rows[i][j].ToString());
}
}
chart1.Series[0].Color = Color.FromArgb(15, 130, 154);
chart1.Series[1].Color = Color.FromArgb(117, 193, 205);
Title title = chart1.Titles.Add("ChartTitle");
title.Text = "Sales By Month";
title.Font = new Font("Tahoma", 12, FontStyle.Bold);
title.ForeColor = Color.FromArgb(32, 77, 137);
chart1.ChartAreas["ChartArea1"].AxisX.Interval = 1;
chart1.ChartAreas["ChartArea1"].AxisX.MajorGrid.LineColor = Color.White;
chart1.ChartAreas["ChartArea1"].AxisY.MajorGrid.LineColor = Color.WhiteSmoke;
chart1.DataBind();
我想在Y轴中添加灰色背景,如下所示:
答案 0 :(得分:3)
没有画出灰色的柱子(这很难做对)我看到了两个选择:
SeriesChartType.StackedColumn
ChartAreas
以获得设计效果。以下是使用StackedColumn
的解决方案。
你需要做一些事情才能让它发挥作用:
您需要知道灰色列应该走多远的y值(最大值)。
您需要为它们添加一个虚拟系列。
您需要将所有系列设置为StackedColumn
您需要设置特殊属性StackedGroupName
,以便您要堆叠的系列具有相同的名称。
以下是一个例子:
以下是代码:
chart3.Series.Clear();
Series s1 = chart3.Series.Add("S1");
s1.ChartType = SeriesChartType.StackedColumn;
Series s2 = chart3.Series.Add("S2");
s2.ChartType = SeriesChartType.StackedColumn;
Series s0 = chart3.Series.Add("S0");
s0.ChartType = SeriesChartType.StackedColumn;
s0.Color = Color.LightGray;
s0.IsVisibleInLegend = false;
s0["StackedGroupName"] = "Group1";
s1["StackedGroupName"] = "Group1";
s2["StackedGroupName"] = "Group2";
for (int j = 0; j < data.Columns.Count; j++)
{
for (int i = 0; i < data.Rows.Count; i++)
{
double vy = Convert.ToDouble(data.Rows[i][j].ToString());
chart3.Series[i].Points.AddXY(j, vy);
if (i==0) s0.Points.AddXY(j, 800 - vy);
}
}
List<string> mn = new List<string>() { "J", "F", "M", "A" };
for (int i = 0; i < s0.Points.Count; i++)
{
s0.Points[i].AxisLabel = mn[i];
}
还有一些说明:
要进行堆叠工作,列需要具有数字 x值。确保将代码更改为一些有用的值!!
我只是采用循环索引并在之后添加标签。您也可以使用一个月并使用合适的DateTime格式。我还调整了循环以适应我的表格布局
我没有添加任何其他样式,我没有使用任何数据绑定。不确定代码中该行的含义。
虚拟Series s0
获取从max - yvalue
计算的虚拟值。
我信任自己的价值观,并且Convert
没有TryParse
。选择你的方式!
第二个系列s2
不属于任何其他系列的堆叠组,因此它是独立的。
图例中系列的顺序相反,使它们看起来像堆栈。如果您愿意,可以颠倒添加它们的顺序。
您可能希望学习this post,其中讨论了堆叠的一些常见问题。
您的另一个选择是精确覆盖两个图表区域并设置其点和颜色,以使组合效果看起来像您的图像。 Here是一个覆盖两个类似饼图的示例..