C++程序 绘制直方图

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++编写程序绘制直方图,通过统计数据数量并用字符表示,我们可以方便地展示数据的分布情况。希望读者能够学有所得,迈向数据可视化的世界。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

C++ 示例