13 #include "../js_utils.h" 14 #include "../../tools/string_utils.h" 24 template <
typename SCALE_TYPE = LinearScale>
29 std::string dom_id =
"";
30 std::string label_offset =
"";
31 std::string orientation;
48 Axis(std::string type, std::string label =
"") {
51 this->orientation = type;
54 js.objects[$0] = d3.axisLeft(js.objects[$1]);
55 }, this->
id, scale.GetID());
56 }
else if (type ==
"right") {
58 js.objects[$0] = d3.axisRight(js.objects[$1]);
59 }, this->
id, scale.GetID());
60 }
else if (type ==
"bottom") {
62 js.objects[$0] = d3.axisBottom(js.objects[$1]);
63 }, this->
id, scale.GetID());
64 }
else if (type ==
"top") {
66 js.objects[$0] = d3.axisTop(js.objects[$1]);
67 }, this->
id, scale.GetID());
69 std::cout <<
"WARNING: Invalid type given to axis constructor" <<
std::endl;
71 js.objects[$0] = d3.axisBottom(js.objects[$1]);
72 }, this->
id, scale.GetID());
88 var axis_range = js.objects[$0].scale().range();
89 js.objects[$3] = js.objects[$1].append(
"g");
91 js.objects[$3].append(
"g").attr(
"id", Pointer_stringify($2))
92 .call(js.objects[$0]);
94 var canvas_width = js.objects[$1].attr(
"width");
95 var canvas_height = js.objects[$1].attr(
"height");
97 var orient = Pointer_stringify($6);
101 js.objects[$3].attr(
"transform",
"translate(0,"+(canvas_height-60)+
")");
102 if (orient ==
"top") {
105 js.objects[$3].attr(
"transform",
"translate(0,60)");
106 }
else if (orient ==
"left") {
110 js.objects[$3].attr(
"transform",
"translate(60,0)");
111 }
else if(orient ==
"right") {
114 js.objects[$3].attr(
"transform",
"translate("+(canvas_width-60)+
",0)");
117 if (Pointer_stringify($5) !=
"") {
118 dy = Pointer_stringify($5);
121 var label_x = axis_range[0]+(axis_range[1]-axis_range[0])/x_divisor;
122 if (axis_range[0] > axis_range[1]) {
123 label_x = axis_range[1]+(axis_range[0]-axis_range[1])/x_divisor;
126 js.objects[$3].append(
"text")
127 .attr(
"id", Pointer_stringify($2)+
"_label")
128 .attr(
"transform",
"rotate("+text_orient+
")")
130 .attr(
"dy", dy).style(
"text-anchor",
"middle")
131 .text(Pointer_stringify($4));
132 }, this->
id, selection.
GetID(), dom_id.c_str(), group.
GetID(), label.c_str(),
133 label_offset.c_str(), orientation.c_str());
139 template <
typename T>
142 js.objects[$1].call(js.objects[$0]);
143 }, this->
id, selection.
GetID());
154 js.objects[$0].scale(js.objects[$1]);
155 }, this->
id, scale.GetID());
168 label_offset = offset;
170 group.
Select(
"#"+dom_id+
"_label").
SetAttr(
"dy", label_offset);
182 template <
typename T, std::
size_t SIZE>
187 js.objects[$0].tickValues(emp_i.__incoming_array);
194 js.objects[$0].tickSize($1);
201 js.objects[$0].tickSizeInner($1);
208 js.objects[$0].tickSizeOuter($1);
215 js.objects[$0].tickPadding($1);
216 }, this->
id, padding);
223 js.objects[$0].ticks($1);
233 js.objects[$0].tickFormat(d3.format(Pointer_stringify($1)));
234 }, this->
id, format.c_str());
241 template <
typename T>
254 template <
typename SCALE_X_TYPE = D3::LinearScale,
typename SCALE_Y_TYPE = D3::LinearScale>
256 x_axis.
Draw(selection);
257 y_axis.
Draw(selection);
260 x_range = js.objects[$0].scale().range();
261 y_range = js.objects[$1].scale().range();
263 js.objects[$2].attr(
"transform",
"translate(0,"+d3.max(y_range)+
")");
264 js.objects[$3].attr(
"transform",
"translate("+x_range[0]+
",0)");
Axis & SetTickFormat(std::string format)
Definition: axis.h:231
Axis(std::string type, std::string label="")
Definition: axis.h:48
Axis & SetTicks(int count)
Set the number of ticks along the axis.
Definition: axis.h:221
static void remove_whitespace(std::string &in_string)
Remove all whitespace from anywhere within a string.
Definition: string_utils.h:392
Axis & SetTickSizeOuter(float size)
Definition: axis.h:206
DERIVED & SetAttr(std::string name, std::string value)
Definition: selection.h:208
Selection group
Definition: axis.h:38
int id
Definition: d3_init.h:45
Axis & SetScale(SCALE_TYPE &scale)
Definition: axis.h:150
static const PrintStr endl("<br>")
Pre-define emp::endl to insert a "<br>" and thus acting like a newline.
Tools for scaling graph axes in D3.
Definition: selection.h:39
void DrawAxes(Axis< SCALE_X_TYPE > &x_axis, Axis< SCALE_Y_TYPE > &y_axis, Selection &selection)
Definition: axis.h:255
Definition: selection.h:936
Axis & SetTickSizeInner(float size)
Definition: axis.h:199
Axis & Draw(Selection &selection)
Definition: axis.h:79
Axis & SetTickPadding(int padding)
Definition: axis.h:213
Axis & Rescale(double new_min, double new_max, const D3::SelectionOrTransition< T > &svg)
Definition: axis.h:242
Axis & Move(int x, int y)
Definition: axis.h:177
Selection & Move(int x, int y)
Definition: selection.h:1486
Axis & ApplyAxis(const SelectionOrTransition< T > &selection)
Definition: axis.h:140
Axis & SetTickValues(emp::array< T, SIZE > values)
Definition: axis.h:183
DERIVED Select(std::string selector) const
Definition: selection.h:47
Axis & AdjustLabelOffset(std::string offset)
Definition: axis.h:167
int GetID() const
Definition: d3_init.h:96
void pass_array_to_javascript(C values)
Definition: js_utils.h:212
SCALE_TYPE & GetScale()
Get a reference to this object's scale.
Definition: axis.h:160
Axis & SetTickSize(float size)
Definition: axis.h:192