繁体   English   中英

Plot C++ 中矢量数据的直方图

[英]Plot Histogram from vector data in C++

我正在尝试做一个简单的任务。 在 C++ 中绘制直方图,我正在从音频文件中读取数据并将计数值存储在向量中。

wav_hist.h

class WAVHist {
  private:
    std::vector<std::map<short, size_t>> counts;

  public:
    WAVHist(const SndfileHandle& sfh) {
        counts.resize(sfh.channels());
    }

    // Mono channel
    WAVHist() {
        counts.resize(1);
    }

    void update(const std::vector<short>& samples) {
        size_t n { };
        for(auto s : samples)
            counts[n++ % counts.size()][s]++;
    }

    void dump(const size_t channel) const {
        for(auto [value, counter] : counts[channel])
            std::cout << value << '\t' << counter << '\n';
    }

    void mid_channel(const std::vector<short>& samples) {
        for(auto i = 0; i < samples.size()/2; i++)
            counts[0][(samples[2*i] + samples[2*i+1]) / 2]++;
    }

dump function (freq count_value) 中显示了最终的 output。 我如何将其转换为绘制直方图?

output 需要

gnuplot这样的东西。

在此处输入图像描述

C++ 标准本身不提供任何用于可视化或图形用户界面的类。 当然,有许多框架和库可用于此。

由于您已经了解 gnuplot,因此您可能对 gnuplot 的 C++ 接口感兴趣。 其他替代方案包括Qt ChartsBoost.Python

另请参阅此问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM