You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 22:52:41