#include "svg.h" #include using namespace std; void svg_begin(double width, double height) { cout << "\n"; cout << "\n"; } void svg_end() { cout << "\n"; } void svg_text(double left, double baseline, const string& text) { cout << "" << text << "\n"; } void svg_rect(double x, double y, double width, double height, const string& stroke, const string& fill) { cout << "\n"; } void show_histogram_svg(const std::vector& bins, double bin_size, double min_val) { const double IMAGE_WIDTH = 400; const double IMAGE_HEIGHT = 300; const double TEXT_LEFT = 20; const double TEXT_BASELINE = 20; const double TEXT_WIDTH = 50; const double BIN_HEIGHT = 30; const double VSPACE = BIN_HEIGHT + TEXT_BASELINE * 2 + 5; svg_begin(IMAGE_WIDTH, IMAGE_HEIGHT); size_t max_count = 0; for (size_t c : bins) if (c > max_count) max_count = c; double max_width = IMAGE_WIDTH - TEXT_WIDTH - 100; for (size_t j = 0; j < bins.size(); ++j) { size_t count = bins[j]; double y = j * VSPACE; double width; if (max_count > 0) { width = static_cast(count) / max_count * max_width; } else { width = 0.0; } svg_text(TEXT_LEFT, y + TEXT_BASELINE, to_string(count)); svg_rect(TEXT_WIDTH, y, width, BIN_HEIGHT, "blue", "blue"); double boundary = min_val + bin_size * (j + 1); svg_text(TEXT_WIDTH,y + BIN_HEIGHT + TEXT_BASELINE,to_string(boundary) ); } svg_end(); }