c# - 在 Windows 窗体应用程序折线图中输入过高的数字时出现视觉错误
问题描述
我正在使用 C# 尝试将数字从文本文件输入到折线图中。文本文件中的数字很大,如 -30000。每次我在图表中输入大量数字时,都会出现视觉故障,使图表变黑。我做错了什么还是一个错误?
void ChartLoad()
{
var chart = LineGraph.ChartAreas[0];
chart.AxisX.IntervalType =
System.Windows.Forms.DataVisualization.Charting.DateTimeIntervalType.Number;
chart.AxisX.LabelStyle.Format = "";
chart.AxisY.LabelStyle.Format = "";
chart.AxisX.LabelStyle.IsEndLabelVisible = true;
chart.AxisX.Interval = 0.5;
chart.AxisY.Interval = 10;
LineGraph.Series[0].IsVisibleInLegend = false;
LineGraph.Series.Add("Line1");
LineGraph.Series["Line1"].ChartType =
System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
LineGraph.Series["Line1"].Color = Color.Green;
LineGraph.Series.Add("Line2");
LineGraph.Series["Line2"].ChartType =
System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
LineGraph.Series["Line2"].Color = Color.Blue;
LineGraph.Series["Line1"].Points.AddXY(30000, 30000);
LineGraph.Series["Line1"].Points.AddXY(-30000, -30000);
}
解决方案
问题是网格。与您的值范围相比,您的区间非常小。网格非常紧密,以至于在您的图表上形成了一条狭窄的网格线地毯。
你可以通过
电网切换:
chart.AxisX.MinorGrid.Enabled = false; chart.AxisX.MajorGrid.Enabled = false; chart.AxisY.MajorGrid.Enabled = false; chart.AxisY.MinorGrid.Enabled = false;
或者通过根据值的范围将轴间隔调整为合理的数字。当您将间隔设置为:
chart.AxisX.Interval = 10000; chart.AxisY.Interval = 10000;
这是一种可以为您执行此操作的方法:
private void AddValuesAndAdjustInterval(string series, double xValue, double yValue)
{
LineGraph.Series[series].Points.AddXY(xValue, yValue);
var chart = LineGraph.ChartAreas[0];
double maxValueX = LineGraph.Series[series].Points.Select(x=> x.XValue).Max();
double minValueX = LineGraph.Series[series].Points.Select(x=> x.XValue).Min();
double maxValueY = LineGraph.Series[series].Points.SelectMany(x=> x.YValues).Max();
double minValueY = LineGraph.Series[series].Points.SelectMany(x => x.YValues).Min();
int stepSize = 20; // the smaller this value the larger the grid separation
chart.AxisX.Interval = (maxValueX - minValueX) / stepSize;
chart.AxisY.Interval = (maxValueY - minValueY) / stepSize;
}
现在您可以使用它来添加值:
AddValuesAndAdjustInterval("Line1", 30000, 30000);
AddValuesAndAdjustInterval("Line1", -30000, -30000);
推荐阅读
- c# - MessageBox 在用户使用 NumericUpDown 输入的特定时间显示
- wordpress - Wordpress Javascript 在 Edge 浏览器上不起作用
- javascript - 搜索功能不会过滤所有值
- jquery - jQuery - 获取附加到其他类的样式元素
- c# - 使用 Itextsharp.pdf 以 png 图像形式下载时,使用 sql 动态设置图表系列不显示图表
- c# - 单击时访问 ListView 项
- kotlin - 其他包中的 Kotlin 类未解决
- swift - 获取 NSButton 的大小正确信息
- excel - 如何在 Excel 中编写返回公式和文本混合的 IF 语句?
- excel - 选择给定当前月份的单元格值