将固定值设置为图表的 X 轴
setting fixed values to X axis of a chart
问题是我想为3种图表设置一些固定值:
首先是周图,因此它需要在 X 轴上有周日到周六的值。
第二个是月份所以必须设置当月的天数
最后一个是年表,需要显示从 1 到 12 或 1 到 12 月的月份。
我确实看了很多教程,但是我想要的任何设置点都教了如何设置 X 和 Y 点,但我想要一个固定的 X 点并从数据库中获取 Y 点。
要获得这些固定范围:
我是这样设置图表的:
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);
}
一些注意事项:
重要的是 select 或者只绑定那些应该进入图表的日期!如果您在这里犯错,限制将被取消!
如果你的数据足够密集,也就是说,如果他们包括了他们所指的时间间隔的第一天和最后一天,你可以省略设置x轴上的Minimum和Maximum;在这种情况下,还包括 ax.IsMarginVisible = false;
以避免出现相邻范围的点。
如果您的数据稀疏,您可能需要确定 Minimum
和 Maximum
值,而不是简单地选择第一个和最后一个 x 值。相反,您应该选择正确的 DateTime
值。请注意,您需要选择真实的 DateTimes
并使用 ToOADate()
函数将它们转换为 double
,因为轴属性需要值单位。
您可以研究我用来创建数据的代码,以获取有关如何获取给定周、月或年的第一天和最后一天的日期的提示..
请注意我如何使用 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 个图表和多个 rads。相反,我有 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));
}
}
}
但看起来像这样
weekley chart
红色天数是它的显示方式,绿色是我真正设置该信息的时间。
我该如何解决才能在星期一等显示星期一信息?
问题是我想为3种图表设置一些固定值:
首先是周图,因此它需要在 X 轴上有周日到周六的值。
第二个是月份所以必须设置当月的天数
最后一个是年表,需要显示从 1 到 12 或 1 到 12 月的月份。
我确实看了很多教程,但是我想要的任何设置点都教了如何设置 X 和 Y 点,但我想要一个固定的 X 点并从数据库中获取 Y 点。
要获得这些固定范围:
我是这样设置图表的:
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);
}
一些注意事项:
重要的是 select 或者只绑定那些应该进入图表的日期!如果您在这里犯错,限制将被取消!
如果你的数据足够密集,也就是说,如果他们包括了他们所指的时间间隔的第一天和最后一天,你可以省略设置x轴上的Minimum和Maximum;在这种情况下,还包括
ax.IsMarginVisible = false;
以避免出现相邻范围的点。如果您的数据稀疏,您可能需要确定
Minimum
和Maximum
值,而不是简单地选择第一个和最后一个 x 值。相反,您应该选择正确的DateTime
值。请注意,您需要选择真实的DateTimes
并使用ToOADate()
函数将它们转换为double
,因为轴属性需要值单位。您可以研究我用来创建数据的代码,以获取有关如何获取给定周、月或年的第一天和最后一天的日期的提示..
请注意我如何使用
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 个图表和多个 rads。相反,我有 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));
}
}
}
但看起来像这样
weekley chart
红色天数是它的显示方式,绿色是我真正设置该信息的时间。
我该如何解决才能在星期一等显示星期一信息?