gpt4 book ai didi

c# - 将固定值设置为图表的 X 轴

转载 作者:太空宇宙 更新时间:2023-11-03 14:39:51 25 4
gpt4 key购买 nike

问题是我想为 3 种类型的图表设置一些固定值:

  1. 首先是周图,因此它需要在 X 轴上有星期日到星期六的值。

  2. 第二个是月份,所以它必须设置当月的天数

  3. 最后一个是年表,需要显示从 1 到 12 或 1 到 12 月的月份。

我确实看了很多教程,但是我想要的任何设置点都教了如何设置 X 和 Y 点,但我想要一个固定的 X 点并从数据库中获取 Y 点。

This is an example of what I need

最佳答案

要获得这些固定范围:

enter image description here enter image description here enter image description here

我是这样设置图表的:

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);
}

一些注意事项:

  • 重要的是只选择或绑定(bind)那些应该进入图表的日期!如果您在这里犯错,限制将被取消!

  • 如果您的数据足够密集,也就是说,如果它们包括它们所指时间间隔的第一天和最后一天,则可以省略设置 x 轴上的最小值和最大值;在这种情况下,还包括 ax.IsMarginVisible = false; 以避免相邻范围内的点出现。

  • 如果您的数据稀疏,您可能需要确定 MinimumMaximum 值,而不是简单地选择第一个和最后一个 x 值。相反,您应该选择正确的 DateTime 值。请注意,您需要选择真正的 DateTimes 并使用 ToOADate() 函数将它们转换为 double,因为轴属性需要值单位。

  • 您可以研究我用来创建数据的代码,以获取有关如何获取给定周、月或年的第一天和最后一天的日期的提示。

  • 请注意我如何使用 DateTime.DaysInMonth 获取给定月份的正确天数

  • 如果您选择 Column 作为 ChartType,第一列和最后一列可能会被剪切。对于这种情况,您可以通过向 Maximum 添加半个单位并从 Minimum 中减去半个单位来扩大范围。您可能还需要将一个这样的量添加到 IntervalOffset

这是我设置的方法:

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));
}

关于c# - 将固定值设置为图表的 X 轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57642455/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com