C++程序 绘制直方图
在数据分析和可视化中,直方图是一种非常常见的图形形式,它可以很直观地展示数据的分布情况。在C++中,我们也可以通过操纵字符来绘制直方图,下面我们来学习如何使用C++编写程序绘制直方图。
基本思路
绘制直方图的基本思路是先确定数据的区间范围,然后统计每个区间内数据的个数,最后用字符表示数据的数量,从而形成直方图。
例如,我们要绘制一个1~10之间整数的直方图,分为5个区间(1~2、3~4、5~6、7~8、9~10),我们需要统计每个区间内数据的个数,并将结果用字符表示,如下所示:
区间 | 数据数量 |
---|---|
1~2 | **** |
3~4 | ******** |
5~6 | ************ |
7~8 | ******** |
9~10 | ** |
代码实现
下面是一个简单的C++程序,用于绘制直方图:
#include <iostream>
#include <vector>
using namespace std;
// 统计数据数量
vector<int> countData(vector<int> data, int bin) {
int n = bin + 1;
vector<int> counts(n, 0);
for (int i = 0; i < data.size(); i++) {
int index = data[i] / (10 / bin);
counts[index]++;
}
return counts;
}
// 绘制直方图
void drawHistogram(vector<int> counts) {
int maxHeight = 0;
for (int i = 0; i < counts.size(); i++) {
if (counts[i] > maxHeight) {
maxHeight = counts[i];
}
}
for (int i = maxHeight; i > 0; i--) {
cout << "| ";
for (int j = 0; j < counts.size(); j++) {
if (counts[j] >= i) {
cout << "*";
} else {
cout << " ";
}
cout << " | ";
}
cout << endl;
}
cout << "+-";
for (int j = 0; j < counts.size(); j++) {
cout << "-+-";
}
cout << endl;
cout << "| ";
for (int i = 0; i < counts.size(); i++) {
cout << i << " | ";
}
cout << endl;
}
int main() {
vector<int> data = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int bin = 5;
vector<int> counts = countData(data, bin);
drawHistogram(counts);
return 0;
}
程序中首先调用countData
函数统计每个区间内数据的数量,然后通过调用drawHistogram
函数绘制直方图。其中,countData
函数中的参数bin
表示将数据分为几个区间。
运行该程序,可以得到以下输出:
| * |
| * |
| * * |
| * * |
| * * |
| * * |
| * * |
| * * |
| * * |
| * * |
+-+--+--+--+--+--+
| 0 1 2 3 4 5 |
总结
本文介绍了如何使用C++编写程序绘制直方图,通过统计数据数量并用字符表示,我们可以方便地展示数据的分布情况。希望读者能够学有所得,迈向数据可视化的世界。