如何让C#控制台图表中的星号与X轴日期第二位数字对齐?
控制台图表标记与X轴日期对齐问题
我正在开发C#控制台应用,尝试绘制控制台图表,但无法让星号标记与X轴日期值对齐——理想状态是让标记打印在X轴日期值的第二位数字上方。试过给星号加空格但没用,要求用循环实现。参考数据存在values[]和dates[]数组中:
Date, values 10-21-2023, 12.3 10-22-2023, 11.9 10-23-2023, 13.6 10-24-2023, 11.9 10-25-2023, 10.8
当前代码
static void PlotGraph(double[] values, string[] dates, int counter) } foreach (var value in distincthValues) { //print pH values in the Y-axis Console.Write($"{value:0.0}| "); for (int i = 0; i < count; i++) { if (values[i] == value) { 3748(" * "); } else { Console.Write(" "); } } Console.WriteLine(); } Console.WriteLine("----------------------"); Console.Write("Day| "); for (int i = 0; i < counter; i++) { Console.Write($"{dates[i].Substring(3, 2)} "); } Console.ReadLine(); }
当前输出
13.6| * 12.3| * 11.9| * * 10.8| * 0.0| ---------------------- Day| 21 22 23 24 25
问题根源
当前代码的核心问题是数据列宽度不统一:X轴每个日期值(如21)占2个字符+2个空格,总宽度为4;但绘制标记时,匹配值输出" * "(3个字符),未匹配输出" "(2个字符),宽度不一致导致对齐失效。另外代码存在语法错误:distincthValues拼写错误、3748是Console.Write的笔误、方法开头括号错误、count变量未定义(应使用counter)。
修正后的代码
要实现标记对齐到日期第二位数字,需保证每个数据列宽度固定为4(与X轴日期占位一致)。每个数据点:
- 匹配时输出
" * "(星号处于4字符中间位置,对应日期第二位) - 不匹配时输出
" "(4个空格,保持列宽一致)
完整修正代码:
static void PlotGraph(double[] values, string[] dates, int counter) { // 获取去重后降序排列的Y值,保证图表从上到下数值递减 var distinctValues = values.Distinct().OrderByDescending(v => v).ToArray(); foreach (var value in distinctValues) { // Y轴数值右对齐,固定宽度保证左侧整齐 Console.Write($"{value,5:0.0}| "); for (int i = 0; i < counter; i++) { if (values[i] == value) { // 4字符宽度的标记,星号对应日期第二位 Console.Write(" * "); } else { // 4个空格填充,保持列宽统一 Console.Write(" "); } } Console.WriteLine(); } // 分隔线长度匹配图表总宽度 Console.WriteLine("------------------------------"); Console.Write("Day| "); for (int i = 0; i < counter; i++) { Console.Write($"{dates[i].Substring(3, 2)} "); } Console.ReadLine(); }
修正后输出效果
13.6| * 12.3| * 11.9| * * 10.8| * ------------------------------ Day| 21 22 23 24 25
内容的提问来源于stack exchange,提问作者Memo Costecho
相关产品推荐
相关产品推荐

