提问人:Memo Costecho 提问时间:11/5/2023 最后编辑:Memo Costecho 更新时间:11/7/2023 访问量:44
是否可以将图表中的星号与 X 轴上当天的第二位数字对齐?
Is it possible to align the asterisk in my chart with the second digit of the day on the X axis?
问:
我正在控制台应用程序中工作并尝试在 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
答:
2赞
Sweeper
11/5/2023
#1
X 轴上日期的第二位数字彼此相距均为 3 个字符。对齐 Y 轴后,您需要做的就是重复打印一个空格/星形,后跟 3 个空格。
要对齐 Y 轴,您可以通过查找具有最多字符的 ph 值来找到其宽度(当然,如果您知道这些值必须在某个范围内,则有更快的方法):
var yAxisWidth = distinctPhValues
.Select(x => $"{x:0.0}".Length).Max();
然后,您可以使用(或者如果您想要左对齐)来打印 ph 值。PadLeft
PadRight
foreach (var value in distinctPhValues)
{
//print pH values in the Y-axis
Console.Write($"{value:0.0}".PadLeft(yAxisWidth));
Console.Write("| "); // note I added an extra space here to account for the first digit of the first date
for (int i = 0; i < pHValues.Length; i++)
{
if (pHValues[i] == value)
{
Console.Write("*");
}
else
{
Console.Write(" ");
}
Console.Write(" "); // the stars are all 3 spaces apart from each other
}
Console.WriteLine();
}
xAxis 的长度很容易计算 - 乘以每个日期占用的字符数(即 4),然后将 Y 轴的宽度加到其中dates.Length
Console.WriteLine(new string('-', yAxisWidth + 4 * dates.Length));
Console.Write("Day".PadLeft(yAxisWidth));
Console.Write("| ");
for (int i = 0; i < dates.Length; i++)
{
// consider actually using a DateTime/DateOnly instead of strings to represent dates
// then you can do:
// Console.Write($"{dates[i].Day,2} ");
Console.Write($"{dates[i].Substring(3, 2)} ");
}
用法示例:
DisplayChart(
new double[] {
12.3, 11.9, 13.6, 11.9, 10.8
},
new string[] {
"10-21-2023",
"10-22-2023",
"10-23-2023",
"10-24-2023",
"10-25-2023",
}
);
输出示例:
13.6| *
12.3| *
11.9| * *
10.8| *
------------------------
Day| 21 22 23 24 25
评论
0赞
Memo Costecho
11/5/2023
这太棒了,它打印的图表看起来排列得很好。我设法以与制作动态分隔符类似的方式改进了 X 轴,但无法自己计算对齐方式。非常感谢你是救命稻草,
评论
Console.write
pHValues[i] == value