问题是我想为3种类型的图表设置一些固定值:
首先是一个星期图,因此它需要在X轴上具有星期日至星期六的值。
第二个是月份,因此必须设置当前月份的日期
最后一个年份图表需要显示从1到12或从1月到12月的月份。
我确实看了很多教程,但是像我想要的那些设置点中的大多数,大多数都教如何设置X和Y点,但是我想要一个固定的X点并从数据库中获取Y点。
答案 0 :(得分:0)
要获取这些固定范围:
我已经按照如下方式设置了图表:
private void rb_range_CheckedChanged(object sender, EventArgs e)
{
Chart chart = chart8;
Series s = chart.Series[0];
s.ChartType = SeriesChartType.Line;
s.XValueType = ChartValueType.DateTime;
s.YValueType = ChartValueType.Double;
Axis ax = chart.ChartAreas[0].AxisX;
Axis ay = chart.ChartAreas[0].AxisY;
//ax.IsMarginVisible = true; // max or may be necessary
ax.Interval = 1;
if (rb_week.Checked)
{
setValues('w', 123);
ax.IntervalType = DateTimeIntervalType.Days;
ax.LabelStyle.Format = "dddd";
}
else if (rb_month.Checked)
{
setValues('m', 123);
ax.IntervalType = DateTimeIntervalType.Days;
ax.LabelStyle.Format = "dd";
}
else if (rb_year.Checked)
{
setValues('y', 123);
ax.IntervalType = DateTimeIntervalType.Months;
ax.LabelStyle.Format = "MMMM";
}
s.Points.Clear();
foreach (var dp in points) s.Points.Add(dp);
// after the points are added or bound to you may want to..
// set the minimum&maximum, but if the data fit you don't have to!
ax.Minimum = points.Min(x => x.XValue);
ax.Maximum = points.Max(x => x.XValue);
}
一些注意事项:
仅选择或绑定应在图表中显示的日期很重要!如果您在这里犯了错误,限制将被取消!
如果您的数据足够密集,也就是说,如果它们包含了它们所参考的间隔的第一天和最后一天,则可以忽略在x轴上设置“最小值”和“最大值”;在这种情况下,还应包括ax.IsMarginVisible = false;
以避免出现来自相邻范围的点。
如果数据稀疏,则可能需要与仅选择第一个和最后一个x值不同地确定Minimum
和Maximum
值。相反,您应该选择正确的DateTime
值。请注意,您需要选择实数DateTimes
并使用double
函数将其转换为ToOADate()
,因为轴属性期望值单位。
您可以研究我用于创建数据的代码,以获取有关如何获取给定星期,月份或年份的第一天和最后一天的日期的提示。
请注意我如何使用DateTime.DaysInMonth
来获取给定月份的正确天数
如果您选择Column
作为ChartType
,则第一列和最后一列可能会被剪切。对于这种情况,您可以通过向Maximum
添加半个单位并从Minimum
中减去一个单位来扩展范围。您可能还需要向IntervalOffset
添加这样的金额。
这是我设置points
的方式:
List<DataPoint> points = new List<DataPoint>();
void setValues(char time, int rand)
{
Random rnd = new Random(rand); // random data values
points = new List<DataPoint>();
DateTime dn = DateTime.Now;
DateTime dw = new DateTime(dn.Year, dn.Month, dn.Day % 7 + 1); //my weeks start on monday
DateTime dm = new DateTime(dn.Year, dn.Month, 1);
DateTime dy = new DateTime(dn.Year, 1, 1);
if (time == 'w') for (int i = 0; i < 7; i++)
points.Add(new DataPoint(dw.AddDays(i).ToOADate(), rnd.Next(100) + 50));
if (time == 'm') for (int i = 0; i < DateTime.DaysInMonth(dn.Year, dn.Month); i++)
points.Add(new DataPoint(dm.AddDays(i).ToOADate(), rnd.Next(100) + 50));
if (time == 'y') for (int i = 0; i < 12; i++)
points.Add(new DataPoint(dy.AddMonths(i).ToOADate(), rnd.Next(100) + 50));
}
答案 1 :(得分:0)
好吧,我有一个关于如何在周图表上设置点的问题。
首先,我没有1个图表和多个rad。相反,我有3张图表,每张一张。即时通讯现在与周线图有关。
我将setvalues代码修改为下一个以插入每日数据
void setvalues(double total, DateTime date)
{
points = new List<DataPoint>();
DateTime dn = DateTime.Now;
DateTime dw = new DateTime(dn.Year, dn.Month, dn.Day % 7);
for (int i = 0; i < 7; i++)
{
if (Convert.ToInt32(date.DayOfWeek) == i )
{
points.Add(new DataPoint(dw.AddDays(i).ToOADate(), total));
break;
}
else
{
points.Add(new DataPoint(dw.AddDays(i).ToOADate(), 0));
}
}
}
但是看起来像这样
红色的日子名称是它的显示方式,绿色的是我真正设置该信息时的方式。
我该如何解决以在星期一等显示星期一信息?