From ea80d148ec242d972ebcf3ae70596058b67e9e17 Mon Sep 17 00:00:00 2001 From: eddex Date: Thu, 1 Oct 2020 17:08:21 +0200 Subject: [PATCH] fix: LineChart2D now loads and shows the data as expected --- addons/easy_charts/LineChart2D/LineChart2D.gd | 57 ++++++++++--------- 1 file changed, 29 insertions(+), 28 deletions(-) diff --git a/addons/easy_charts/LineChart2D/LineChart2D.gd b/addons/easy_charts/LineChart2D/LineChart2D.gd index b718149..ae18302 100644 --- a/addons/easy_charts/LineChart2D/LineChart2D.gd +++ b/addons/easy_charts/LineChart2D/LineChart2D.gd @@ -3,14 +3,14 @@ extends Chart2D """ [Linechart2D] - General purpose node for Line Charts -A line chart or line plot or line graph or curve chart is a type of chart which -displays information as a series of data points called 'markers' +A line chart or line plot or line graph or curve chart is a type of chart which +displays information as a series of data points called 'markers' connected by straight line segments. -It is a basic type of chart common in many fields. It is similar to a scatter plot -except that the measurement points are ordered (typically by their x-axis value) -and joined with straight line segments. -A line chart is often used to visualize a trend in data over intervals of time – -a time series – thus the line is often drawn chronologically. +It is a basic type of chart common in many fields. It is similar to a scatter plot +except that the measurement points are ordered (typically by their x-axis value) +and joined with straight line segments. +A line chart is often used to visualize a trend in data over intervals of time – +a time series – thus the line is often drawn chronologically. In these cases they are known as run charts. / source : Wikipedia / """ @@ -36,7 +36,7 @@ var OFFSET : Vector2 = Vector2(0,0) #-------------------------------------------------------------------------# var origin : Vector2 -# actual distance between x and y values +# actual distance between x and y values var x_pass : float var y_pass : float @@ -123,6 +123,7 @@ func _ready(): func _get_children(): OutlinesTween = $OutlinesTween + FunctionsTween = $FunctionsTween Functions = $Functions GridTween = $GridTween PointData = $PointData/PointData @@ -139,7 +140,7 @@ func _set_size(size : Vector2): Outlines.set_point_position(2,Vector2(SIZE.x,origin.y)) Outlines.set_point_position(3,origin) Outlines.set_point_position(4,Vector2(origin.x,0)) - + Grid.get_node("VLine").set_point_position(0,Vector2((OFFSET.x+SIZE.x)/2,0)) Grid.get_node("VLine").set_point_position(1,Vector2((OFFSET.x+SIZE.x)/2,origin.y)) Grid.get_node("HLine").set_point_position(0,Vector2(origin.x,origin.y/2)) @@ -165,12 +166,12 @@ func load_font(): func _plot(source_ : String, delimiter_ : String, are_values_columns_ : bool, x_values_index_ : int): randomize() - + clear() - + load_font() PointData.hide() - + datas = read_datas(source_,delimiter_) count_functions() structure_datas(datas,are_values_columns_,x_values_index_) @@ -179,18 +180,18 @@ func _plot(source_ : String, delimiter_ : String, are_values_columns_ : bool, x_ calculate_coordinates() calculate_colors() draw_chart() - + create_legend() emit_signal("chart_plotted", self) func plot(): randomize() - + clear() - + load_font() PointData.hide() - + if source == "" or source == null: Utilities._print_message("Can't plot a chart without a Source file. Please, choose it in editor, or use the custom function _plot().",1) return @@ -202,7 +203,7 @@ func plot(): calculate_coordinates() calculate_colors() draw_chart() - + create_legend() emit_signal("chart_plotted", self) @@ -279,7 +280,7 @@ func draw_function(f_index : int, function : Array): var line : Line2D = Line2D.new() var backline : Line2D = Line2D.new() construct_line(line,backline,f_index,function) - var pointv : Point + var pointv : Point for point in function.size(): pointv = point_node.instance() Functions.add_child(pointv) @@ -358,7 +359,7 @@ func structure_datas(database : Array, are_values_columns : bool, x_values_index for data in y_datas: for value in data.size(): data[value] = data[value] as float - + # draw y labels var to_order : Array var to_order_min : Array @@ -371,7 +372,7 @@ func structure_datas(database : Array, are_values_columns : bool, x_values_index var margin_min = ordered_cluster[0] to_order.append(margin_max) to_order_min.append(margin_min) - + to_order.sort() to_order_min.sort() var margin = to_order.pop_back() @@ -385,12 +386,12 @@ func structure_datas(database : Array, are_values_columns : bool, x_values_index multi+=1 p = (v_dist*multi) + ((y_margin_min) if not origin_at_zero else 0) y_chors.append(p as String) - + # draw x_labels if not show_x_values_as_labels: to_order.clear() to_order = x_datas as PoolIntArray - + to_order.sort() margin = to_order.pop_back() if not origin_at_zero: @@ -415,7 +416,7 @@ func calculate_pass(): x_chors = x_datas as PoolStringArray else: x_chors = x_labels - + # calculate distance in pixel between 2 consecutive values/datas x_pass = (SIZE.x - OFFSET.x) / (x_chors.size()-1) y_pass = origin.y / (y_chors.size()-1) @@ -425,7 +426,7 @@ func calculate_coordinates(): y_coordinates.clear() point_values.clear() point_positions.clear() - + if invert_chart: for column in y_datas[0].size(): var single_coordinates : Array @@ -444,7 +445,7 @@ func calculate_coordinates(): else: single_coordinates.append((cluster[value] - y_margin_min)*y_pass/v_dist) y_coordinates.append(single_coordinates) - + if show_x_values_as_labels: for x in x_datas.size(): x_coordinates.append(x_pass*x) @@ -457,11 +458,11 @@ func calculate_coordinates(): x_coordinates.append(x_datas[x]*x_pass/h_dist) else: x_coordinates.append((x_datas[x] - x_margin_min)*x_pass/h_dist) - + for f in functions: point_values.append([]) point_positions.append([]) - + if invert_chart: for function in y_coordinates.size(): for function_value in y_coordinates[function].size(): @@ -553,7 +554,7 @@ func apply_template(template_name : int): box_color = Color(custom_template.outline_color) font_color = Color(custom_template.font_color) property_list_changed_notify() - + if Engine.editor_hint: _get_children() Outlines.set_default_color(box_color)