我正在尝试使用 TreeMap 中的值打印直方图。我使用最小的数字作为基数,数字与基数的比率决定了直方图条的高度。以下是我的代码: 它将打印出由星号“*”指示的水平条。底座(值为 1)将有两颗星。然而,问题是所有其他酒吧也有两颗星,看起来与基地没有什么不同。
private static void printHistogram(TreeMap<String, Integer> mapA)
{
int baseVal = mapA.firstEntry().getValue();
String baseKey = mapA.firstKey();
for (Map.Entry<String, Integer> e : mapA.entrySet())
{
int times = e.getValue() / baseVal;
System.out.print(e.getKey() + "\t \|");
for (int j = 0; j < times; j++)
{
System.out.print("**");
}
System.out.print("\n");
}
}
这是直方图打印输出:
21 |**
22 |**
23 |**
24 |**
25 |**
26 |**
27 |**
28 |**
29 |**
30 |**
31 |**
32 |**
33 |**
以下是我的 TreeMap 中的数字(排序之前):
99255
98321
98860
95365
85412
86105
84972
88132
80223
76273
74056
74077
52523
与基数 52523 的比率小于 2。我想知道如何在视觉上放大差异?因为我在终端中打印直方图,所以我无法使用图形直方图库,除非它可以将图像保存为文件。
最佳答案
我还推荐这个:
您有 min_v
和 max_v
值,然后选择您想要的 max_v
值的星数(例如,适合一半屏幕) - 表示为 N,并且还用 M < N 颗星表示 min_v
值(例如,可以为 0)
那么,每个值的星数为:
M + (N - M) * (e.getValue() - min_v)/(max_v - min_v)
关于java - 在Java中打印直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19624347/