Sasha (KobzevAV) 2 лет назад
Родитель a308f587ff
Сommit 55311054d0

@ -27,7 +27,7 @@ void svg_rect(double x, double y, double width, double height, string stroke = "
} }
void void
show_histogram_svg(const vector<size_t>& bins, const std::vector<double>& borders, size_t bin_count) { show_histogram_svg(const vector<size_t>& bins, const std::vector<double>& borders, size_t bin_count, string filling) {
const auto IMAGE_WIDTH = 400; const auto IMAGE_WIDTH = 400;
const auto IMAGE_HEIGHT = 300; const auto IMAGE_HEIGHT = 300;
const auto TEXT_LEFT = 20; const auto TEXT_LEFT = 20;
@ -40,26 +40,33 @@ show_histogram_svg(const vector<size_t>& bins, const std::vector<double>& border
size_t max_bin = *max_element(bins.begin(), bins.end()); size_t max_bin = *max_element(bins.begin(), bins.end());
size_t number_of_blocks; size_t number_of_blocks;
double top = 0; double top = 0;
size_t color = 0; size_t paint_swicher = 0;
string color;
size_t border = 0; size_t border = 0;
for (size_t bin: bins){ for (size_t bin: bins){
if (filling != "base"){
color = filling;
}
else{
color = colors[paint_swicher];
}
number_of_blocks = bin; number_of_blocks = bin;
if ((max_bin * BLOCK_WIDTH) > (IMAGE_WIDTH - TEXT_WIDTH)){ if ((max_bin * BLOCK_WIDTH) > (IMAGE_WIDTH - TEXT_WIDTH)){
number_of_blocks = ((IMAGE_WIDTH - TEXT_WIDTH)/10) * (static_cast<double>(bin) / max_bin); number_of_blocks = ((IMAGE_WIDTH - TEXT_WIDTH)/10) * (static_cast<double>(bin) / max_bin);
} }
const double bin_width = BLOCK_WIDTH * number_of_blocks; const double bin_width = BLOCK_WIDTH * number_of_blocks;
svg_text(TEXT_LEFT, top + TEXT_BASELINE, to_string(bin)); svg_text(TEXT_LEFT, top + TEXT_BASELINE, to_string(bin));
svg_rect(TEXT_WIDTH, top, bin_width, BIN_HEIGHT, "black", colors[color]); svg_rect(TEXT_WIDTH, top, bin_width, BIN_HEIGHT, "black", color);
paint_swicher += 1;
if (paint_swicher > 6){
paint_swicher = 0;
}
if (border < bin_count - 1){ if (border < bin_count - 1){
top += BIN_HEIGHT; top += BIN_HEIGHT;
svg_text(TEXT_LEFT / 2, top + TEXT_BASELINE , to_string(borders[border])); svg_text(TEXT_LEFT / 2, top + TEXT_BASELINE , to_string(borders[border]));
border += 1; border += 1;
top += BIN_HEIGHT; top += BIN_HEIGHT;
} }
color += 1;
if (color > 6){
color = 0;
}
} }
svg_end(); svg_end();
} }

Загрузка…
Отмена
Сохранить