MCPcopy Create free account
hub / github.com/alandefreitas/matplotplusplus / data_string

Method data_string

source/matplot/axes_objects/histogram.cpp:89–145  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

87 }
88
89 std::string histogram::data_string() {
90 make_sure_data_is_preprocessed();
91 std::stringstream ss;
92 ss.precision(10);
93 ss << std::fixed;
94 if (!is_polar()) {
95 for (size_t i = 0; i < values_.size(); ++i) {
96 // <box center> <box height> <box width>
97 ss << " " << (bin_edges_[i] + bin_edges_[i + 1]) * 0.5 << " "
98 << values_[i] << " "
99 << (bin_edges_[i + 1] - bin_edges_[i]) * bar_width_ << "\n";
100 }
101 ss << "e\n";
102
103 } else {
104 // resolutions of the petals
105 constexpr double points_per_circle = 360;
106 const double n_histogram_bins = bin_edges_.size() - 1.;
107 // ensure at least one line segment (2 points) per petal.
108 const size_t points_per_bin = static_cast<size_t>(max(2.0, points_per_circle / n_histogram_bins));
109 if (!stairs_only_) {
110 for (size_t i = 0; i < values_.size(); ++i) {
111 // make a petal for each value
112 // theta = edge_begin rho = 0
113 // theta = edge_begin rho = bin_value
114 // theta = edge_end rho = bin_value
115 // theta = edge_end rho = 0
116 ss << " " << bin_edges_[i] << " " << 0 << "\n";
117 auto arc_between_edges =
118 linspace(bin_edges_[i], bin_edges_[i + 1], points_per_bin);
119 for (size_t j = 0; j < arc_between_edges.size(); ++j) {
120 ss << " " << arc_between_edges[j] << " "
121 << values_[i] << "\n";
122 }
123 ss << " " << bin_edges_[i + 1] << " " << 0 << "\n";
124 }
125 } else {
126 for (size_t i = 0; i < values_.size(); ++i) {
127 // stair petals don't start at rho 0
128 // theta = edge_begin rho = bin_value
129 // theta = edge_end rho = bin_value
130 // theta = edge_end rho = next bin value
131 auto arc_between_edges =
132 linspace(bin_edges_[i], bin_edges_[i + 1], points_per_bin);
133 for (size_t j = 0; j < arc_between_edges.size(); ++j) {
134 ss << " " << arc_between_edges[j] << " "
135 << values_[i] << "\n";
136 }
137 ss << " " << bin_edges_[i + 1] << " "
138 << values_[(i + 1) % values_.size()] << "\n";
139 }
140 }
141
142 ss << "e\n";
143 }
144 return ss.str();
145 }
146

Callers

nothing calls this directly

Calls 3

linspaceFunction · 0.85
maxFunction · 0.50
sizeMethod · 0.45

Tested by

no test coverage detected