diff --git a/svg.cpp b/svg.cpp index 8f524b9..a814587 100644 --- a/svg.cpp +++ b/svg.cpp @@ -4,11 +4,11 @@ using namespace std; void svg_begin(double width, double height) { cout << "\n"; - cout << "\n"; + cout << "\n"; } void svg_end() { @@ -33,40 +33,38 @@ void svg_rect(double x, double y, double width, double height, << "' />\n"; } -void show_histogram_svg(const std::vector& bins, double bin_size, double min_val) { +void show_histogram_svg(const vector& bins) { 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; + const double BLOCK_WIDTH = 10; 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; + for (size_t count : bins) { + if (count > max_count) { + max_count = count; + } + } - double width; + double max_width = IMAGE_WIDTH - TEXT_WIDTH; + double top = 0; + for (size_t count : bins) { + double bin_width; if (max_count > 0) { - width = static_cast(count) / max_count * max_width; + bin_width = static_cast(count) / max_count * max_width; } else { - width = 0.0; + bin_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_text(TEXT_LEFT, top + TEXT_BASELINE, to_string(count)); + svg_rect(TEXT_WIDTH, top, bin_width, BIN_HEIGHT, "blue", "blue"); + top += BIN_HEIGHT; } svg_end();