Library: customisation of the generated Gnuplot diagram
This commit is contained in:
parent
96202f845a
commit
55f8f229f1
5 changed files with 225 additions and 122 deletions
|
|
@ -30,7 +30,42 @@
|
|||
** without much structure or preconceptions and written in a way to encourage adding
|
||||
** more use-cases by copy-and-paste. Following this pragmatic approach, generalisations
|
||||
** and common schemes will emerge eventually.
|
||||
** @todo WIP-WIP 4/2024 first usage as part of Scheduler stress testing.
|
||||
**
|
||||
** # Script generation
|
||||
** The resulting Gnuplot script is combined from several building blocks, and
|
||||
** passed through the lib::TextTemplate engine to substitute the data and further
|
||||
** configuration parameters at designated places into the code. Notably, the script
|
||||
** performs further evaluations at run time, especially in reaction to the number
|
||||
** of given data rows (relying on the `stats` command of Gnuplot). Data input is
|
||||
** configured to CSV format and data is pasted as »here document« into a
|
||||
** _data block variable_ `$RunData`
|
||||
**
|
||||
** \par simple plot
|
||||
** By default, the `points` plotting style is used; this can be overridden
|
||||
** through the placeholder #KEY_DiagramKind. All given data rows are combined
|
||||
** into a single plot, using a common x and y axis, and assigning consecutive
|
||||
** line drawing styles to each data row (from blue to green, yellow, red).
|
||||
** A maximum of 9 line styles is prepared for drawing. The x/y-ranges and
|
||||
** custom labels can be added.
|
||||
**
|
||||
** \par scatter plot with regression line
|
||||
** Typically this is used for measurement data, assuming linear relation.
|
||||
** The data is visualised as (x,y) points, overlaying a linear regression line
|
||||
** plotted in red. Possibly further data rows can be given, which are then
|
||||
** plotted into a secondary diagram, arranged below the main measurement data
|
||||
** and using the same x-axis layout. This additional display is featured only
|
||||
** when more than 2 columns are present in the data; the number of columns is
|
||||
** picked up from the _second data row_ (since the first row provides the
|
||||
** key names used for the legend). In further rows, some data points can be
|
||||
** omitted. The 3rd data column will be shown as »impulse diagram«, while all
|
||||
** further data columns will be displayed as points, using the _secondary_
|
||||
** Y-axis. All axis ranges and labels can be customised. By default, the
|
||||
** **linear regression model** is calculated by Gnuplot, based on the
|
||||
** data in columns 1 and 2 (the main measurement data), yet an
|
||||
** alternative regression line can be defined by parameters.
|
||||
**
|
||||
** @todo WIP 4/2024 first usage as part of Scheduler stress testing.
|
||||
** @see GnuplotGen_test
|
||||
*/
|
||||
|
||||
|
||||
|
|
@ -83,9 +118,12 @@ set arrow 11 from graph 0,0 to graph 0,1.08 size screen 0.025,15,60 filled ls 10
|
|||
# GNUPLOT - data plot from Lumiera
|
||||
#
|
||||
|
||||
${if Term}set term ${Term} ${
|
||||
if TermSizeSpec}size ${TermSizeSpec}${endif}${
|
||||
endif Term}
|
||||
${if Term
|
||||
}set term ${Term} ${
|
||||
if TermSize}size ${TermSize}${endif}
|
||||
${else}${if TermSize
|
||||
}set term wxt size ${TermSize}
|
||||
${endif}${endif Term}
|
||||
|
||||
set datafile separator ",;"
|
||||
|
||||
|
|
@ -98,19 +136,20 @@ _End_of_Data_
|
|||
${CommonStyleDef}
|
||||
${AxisGridSetup}
|
||||
|
||||
${if XLabel
|
||||
}set xlabel '${XLabel}'
|
||||
${if Xlabel
|
||||
}set xlabel '${Xlabel}'
|
||||
${else
|
||||
}stats $RunData using (abscissaName=strcol(1)) every ::0::0 nooutput
|
||||
|
||||
set xlabel abscissaName
|
||||
${end if XLabel
|
||||
}${if YLabel
|
||||
}set ylabel '${YLabel}' ${end if YLabel
|
||||
${end if Xlabel
|
||||
}${if Ylabel
|
||||
}set ylabel '${Ylabel}' ${end if Ylabel
|
||||
}
|
||||
${if Yrange}
|
||||
set yrange [${Yrange}]
|
||||
${endif
|
||||
${if Xrange}
|
||||
set xrange [${Xrange}] ${endif
|
||||
}${if Yrange}
|
||||
set yrange [${Yrange}] ${endif
|
||||
}
|
||||
set key autotitle columnheader tmargin
|
||||
|
||||
|
|
@ -124,17 +163,23 @@ plot for [i=2:*] $RunData using 1:i with ${DiagramKind} linestyle i-1
|
|||
|
||||
|
||||
const string GNUPLOT_SCATTER_REGRESSION = R"~(#
|
||||
#
|
||||
####---------Scatter-Regression-Plot-------------
|
||||
#
|
||||
stats $RunData using 1:2 nooutput
|
||||
|
||||
# draw regression line as arrow
|
||||
${if RegrSlope
|
||||
}# regression line function (given as parameter)
|
||||
regLine(x) = ${RegrSlope} * x + ${RegrSocket}
|
||||
${else
|
||||
}# regression line function derived from data
|
||||
regLine(x) = STATS_slope * x + STATS_intercept
|
||||
set arrow 1 from graph 0, first regLine(STATS_min_x) \
|
||||
to graph 1, first regLine(STATS_max_x) \
|
||||
nohead linestyle 9
|
||||
|
||||
${end if
|
||||
}
|
||||
${if Xtics
|
||||
}set xtics ${Xtics}
|
||||
${else}${if Xrange}${else
|
||||
}set xrange [0:*]
|
||||
set xtics 1
|
||||
${end if}${end if Xtics
|
||||
}
|
||||
plots = STATS_columns - 1
|
||||
# Adjust layout based on number of data sequences;
|
||||
# additional sequences placed into secondary diagram
|
||||
|
|
@ -144,21 +189,22 @@ if (plots > 1) {
|
|||
set lmargin at screen 0.12 # fixed margins to align diagrams
|
||||
set rmargin at screen 0.88
|
||||
}
|
||||
####-------------------------------
|
||||
plot $RunData using 1:2 with points linestyle 1
|
||||
#
|
||||
#
|
||||
####---------Scatter-Regression-Plot-------------
|
||||
plot $RunData using 1:2 with points linestyle 1, \
|
||||
regLine(x) with line linestyle 9
|
||||
|
||||
if (plots > 1) {
|
||||
# switch off decorations for secondary diagram
|
||||
unset arrow 1
|
||||
unset arrow 10
|
||||
unset arrow 11
|
||||
set border 2+8
|
||||
set key bmargin
|
||||
|
||||
${if Y2range}
|
||||
set yrange [${Y2range}]
|
||||
${endif
|
||||
} unset xlabel
|
||||
${endif}
|
||||
unset xlabel
|
||||
set format x ""
|
||||
${if Y2label
|
||||
} set ylabel '${Y2label}' ${endif
|
||||
|
|
@ -171,11 +217,13 @@ ${if Y2label
|
|||
# more than one additional data sequence
|
||||
#
|
||||
${if Y3range
|
||||
} set y2range [${Y3range}] ${endif
|
||||
} set y2range [${Y3range}]
|
||||
|
||||
${endif
|
||||
} set y2tics
|
||||
${if Y3label
|
||||
} set y2label '${Y3label}' offset -1 ${endif
|
||||
}
|
||||
} set y2label '${Y3label}' offset -1.5
|
||||
${endif}
|
||||
####---------------------------------------------
|
||||
plot $RunData using 1:3 with impulses linestyle 3, \
|
||||
for [i=4:*] $RunData using 1:i with points linestyle 5+(i-4) axes x1y2
|
||||
|
|
@ -188,6 +236,8 @@ ${if Y3label
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @remark each column of the given data is featured as sequence
|
||||
* over the first column interpreted as common abscissa. The name
|
||||
|
|
@ -208,6 +258,16 @@ ${if Y3label
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* @remark the layout of this diagram differs, based on the given
|
||||
* number of data columns. The main measurement data is expected in
|
||||
* columns `[1:2]` and showed in the primary display, adding a
|
||||
* regression line. When further columns are given, a `multiplot`
|
||||
* layout is established, showing those additional related series
|
||||
* in a second diagram below. It may be necessary to define a larger
|
||||
* canvas with different aspect ratio, which is possibly using the
|
||||
* placeholder #KEY_TermSize
|
||||
*/
|
||||
string
|
||||
scatterRegression (ParamRecord params)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -25,17 +25,19 @@
|
|||
** The visualisation tool [gnuplot] allows for simple data visualisation
|
||||
** in various formats, integrated into a *NIX commandline work environment.
|
||||
**
|
||||
** The namespace lib::gnuplot_gen provides ....
|
||||
** The namespace lib::gnuplot_gen allows to generate diagrams relying on
|
||||
** some common layout schemes, which can be customised. Data is passed in
|
||||
** as CSV string; the generated Gnuplot script adapts dynamically to the
|
||||
** number of data columns given, where the first column always holds
|
||||
** the common x-axis values. Additional parameters can be added to
|
||||
** the _data binding_ used for script generation; this binding
|
||||
** is comprised of key = value settings in a `Rec<GenNode>`
|
||||
** (Lumiera's »ETD« format for structural data)
|
||||
**
|
||||
** @todo 3/2024 this is an initial draft, shaped by the immediate need to visualise
|
||||
** [measurement data](\ref vault::gear::test::SchedulerStress_test) collected
|
||||
** while testing the new [Scheduler](\ref scheduler.hpp) implementation.
|
||||
**
|
||||
** ## Usage
|
||||
** TBW
|
||||
** - blah
|
||||
** - blubb
|
||||
**
|
||||
** @see GnuplotGen_test
|
||||
** @see SchedulerStress_test
|
||||
** @see text-template.hpp
|
||||
|
|
@ -67,13 +69,21 @@ namespace gnuplot_gen { ///< preconfigured setup for Gnuplot data visualisation
|
|||
const string KEY_CSVData = "CSVData";
|
||||
const string KEY_DiagramKind = "DiagramKind";
|
||||
|
||||
const string KEY_Term = "Term";
|
||||
const string KEY_TermSize = "TermSize";
|
||||
|
||||
const string KEY_Xtics = "Xtics";
|
||||
const string KEY_Xrange = "Xrange";
|
||||
const string KEY_Yrange = "Yrange";
|
||||
const string KEY_Y2range = "Y2range";
|
||||
const string KEY_Y3range = "Y3range";
|
||||
const string KEY_Xlabel = "Xlabel";
|
||||
const string KEY_Ylabel = "Ylabel";
|
||||
const string KEY_Y2label = "Y2label";
|
||||
const string KEY_Y3label = "Y2label";
|
||||
const string KEY_Y3label = "Y3label";
|
||||
|
||||
const string KEY_RegrSocket = "RegrSocket";
|
||||
const string KEY_RegrSlope = "RegrSlope";
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -414,7 +414,7 @@ return: 0
|
|||
END
|
||||
|
||||
|
||||
PLANNED "generate a Gnuplot diagram" GnuplotGen_test <<END
|
||||
TEST "generate a Gnuplot diagram" GnuplotGen_test <<END
|
||||
return: 0
|
||||
END
|
||||
|
||||
|
|
|
|||
|
|
@ -27,11 +27,10 @@
|
|||
|
||||
|
||||
#include "lib/test/run.hpp"
|
||||
#include "lib/test/test-helper.hpp"///////////////////////TODO
|
||||
#include "lib/gnuplot-gen.hpp"
|
||||
#include "lib/iter-explorer.hpp"
|
||||
#include "lib/format-cout.hpp"///////////////////////TODO
|
||||
#include "lib/test/diagnostic-output.hpp"///////////////////////TODO
|
||||
#include "lib/format-cout.hpp"
|
||||
#include "lib/util.hpp"
|
||||
|
||||
using lib::stat::CSVData;
|
||||
using util::contains;
|
||||
|
|
@ -56,18 +55,11 @@ namespace test{
|
|||
{
|
||||
simpeUsage();
|
||||
plot_scatter_regression();
|
||||
verify_keySubstituton();
|
||||
verify_conditional();
|
||||
verify_iteration();
|
||||
verify_Map_binding();
|
||||
verify_ETD_binding();
|
||||
|
||||
verify_customisation();
|
||||
}
|
||||
|
||||
|
||||
/** @test Create simple (x,y) data point visualisation
|
||||
* @todo WIP 4/24 ✔ define ⟶ ✔ implement
|
||||
*/
|
||||
/** @test Create simple (x,y) data point visualisation */
|
||||
void
|
||||
simpeUsage()
|
||||
{
|
||||
|
|
@ -97,9 +89,7 @@ namespace test{
|
|||
/** @test Create a (x,y) scatter plot with regression line
|
||||
* - in the simple case, there is only one diagram
|
||||
* - use the `stats` command to let Gnuplot calculate the linear regression
|
||||
* - draw a regrsssion line using the `arrow` command
|
||||
* and a function representing the linear regression model
|
||||
* @todo WIP 4/24 🔁 define ⟶ ✔ implement
|
||||
* - draw a regression line as function representing the regression model
|
||||
*/
|
||||
void
|
||||
plot_scatter_regression()
|
||||
|
|
@ -120,7 +110,6 @@ namespace test{
|
|||
CHECK (contains (gnuplot, "\"step\",\"fib\""));
|
||||
CHECK (contains (gnuplot, "7,21.55"));
|
||||
CHECK (contains (gnuplot, "regLine(x) = STATS_slope * x + STATS_intercept"));
|
||||
CHECK (contains (gnuplot, "set arrow 1 from graph 0, first regLine(STATS_min_x)"));
|
||||
CHECK (contains (gnuplot, "plot $RunData using 1:2 with points"));
|
||||
|
||||
|
||||
|
|
@ -135,7 +124,7 @@ namespace test{
|
|||
,{6,13, 1.3, 110 }
|
||||
,{7,21, 1.4, 100 }
|
||||
}});
|
||||
cout << gnuplot <<endl;
|
||||
// cout << gnuplot <<endl;
|
||||
|
||||
// more than one data row given => using multiplot layout
|
||||
CHECK (contains (gnuplot, "set multiplot"));
|
||||
|
|
@ -144,49 +133,54 @@ namespace test{
|
|||
}
|
||||
|
||||
|
||||
/** @test TODO
|
||||
* @todo WIP 4/24 🔁 define ⟶ implement
|
||||
/** @test various customisations through additional parameters
|
||||
* - a custom defined regression line
|
||||
* - use a specific output »term« and specify canvas size
|
||||
* - define the common horizontal data range and x-tic spacing
|
||||
* - define display ranges for 3 different Y-axis
|
||||
* - define custom labels for all axes
|
||||
* @note when using additional parameters, csv data
|
||||
* must also be given explicitly as `KEY_CSVData`
|
||||
*/
|
||||
void
|
||||
verify_keySubstituton()
|
||||
{
|
||||
UNIMPLEMENTED ("nebbich");
|
||||
}
|
||||
|
||||
|
||||
/** @test TODO
|
||||
* @todo WIP 4/24 🔁 define ⟶ implement
|
||||
*/
|
||||
void
|
||||
verify_conditional()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
/** @test TODO
|
||||
* @todo WIP 4/24 🔁 define ⟶ implement
|
||||
*/
|
||||
void
|
||||
verify_iteration()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
/** @test TODO
|
||||
* @todo WIP 4/24 🔁 define ⟶ implement
|
||||
*/
|
||||
void
|
||||
verify_Map_binding()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
/** @test TODO
|
||||
* @todo WIP 4/24 🔁 define ⟶ implement
|
||||
*/
|
||||
void
|
||||
verify_ETD_binding()
|
||||
verify_customisation()
|
||||
{
|
||||
string csv =
|
||||
CSVData{{"abscissa","points","e1","e2","e3"}
|
||||
,{{1,1 , 1.1,"" ,210}
|
||||
,{2,2 , 1.2,150,220}
|
||||
,{3,5 , 5.5,140}
|
||||
}};
|
||||
using namespace gnuplot_gen;
|
||||
string gnuplot = scatterRegression(
|
||||
ParamRecord()
|
||||
.set(KEY_CSVData , csv)
|
||||
.set(KEY_RegrSocket, 3)
|
||||
.set(KEY_RegrSlope, -1.5)
|
||||
.set(KEY_Xtics , 2)
|
||||
.set(KEY_Xrange , "-1:5.5")
|
||||
.set(KEY_Yrange , "0:6")
|
||||
.set(KEY_Y2range, "1.1:1.5")
|
||||
.set(KEY_Y3range, "100:*")
|
||||
.set(KEY_Xlabel , "common axis")
|
||||
.set(KEY_Ylabel , "measurement")
|
||||
.set(KEY_Y2label, "auxiliary-1")
|
||||
.set(KEY_Y3label, "auxiliary-2")
|
||||
.set(KEY_TermSize, "500,800")
|
||||
);
|
||||
// cout << gnuplot <<endl;
|
||||
|
||||
CHECK (contains (gnuplot, "set term wxt size 500,800"));
|
||||
CHECK (contains (gnuplot, "\"abscissa\",\"points\",\"e1\",\"e2\",\"e3\""));
|
||||
CHECK (contains (gnuplot, "regLine(x) = -1.5 * x + 3"));
|
||||
CHECK (contains (gnuplot, "set xlabel 'common axis'"));
|
||||
CHECK (contains (gnuplot, "set ylabel 'measurement'"));
|
||||
CHECK (contains (gnuplot, "set xrange [-1:5.5]"));
|
||||
CHECK (contains (gnuplot, "set yrange [0:6]"));
|
||||
CHECK (contains (gnuplot, "set yrange [1.1:1.5]"));
|
||||
CHECK (contains (gnuplot, "set ylabel 'auxiliary-1'"));
|
||||
CHECK (contains (gnuplot, "set y2range [100:*]"));
|
||||
CHECK (contains (gnuplot, "set y2label 'auxiliary-2'"));
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -112386,13 +112386,13 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1710079820663" ID="ID_346209836" MODIFIED="1712107106974" TEXT="ein gnuplot-Skript generieren">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1710633755833" ID="ID_395770848" MODIFIED="1710633858137" TEXT="Grundlagen Gnuplot lernen">
|
||||
<node COLOR="#338800" CREATED="1710079820663" ID="ID_346209836" MODIFIED="1712165155677" TEXT="ein Gnuplot-Skript generieren">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node BACKGROUND_COLOR="#b6c3c8" COLOR="#2a44ae" CREATED="1710633755833" ID="ID_395770848" MODIFIED="1712165207008" TEXT="Grundlagen Gnuplot lernen">
|
||||
<arrowlink COLOR="#425fc8" DESTINATION="ID_1898552649" ENDARROW="Default" ENDINCLINATION="-1042;110;" ID="Arrow_ID_1130805562" STARTARROW="None" STARTINCLINATION="-1030;94;"/>
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1710079859600" ID="ID_1865864348" MODIFIED="1711767335018" TEXT="Skript aufbauen">
|
||||
<node COLOR="#338800" CREATED="1710079859600" FOLDED="true" ID="ID_1865864348" MODIFIED="1711767335018" TEXT="Skript aufbauen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1710079895431" ID="ID_129580336" MODIFIED="1711767148348" TEXT="inline-CSV lesen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
|
|
@ -112406,8 +112406,25 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node COLOR="#338800" CREATED="1711740556574" ID="ID_539287826" MODIFIED="1711767325444" TEXT="Regressionslinie">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1711767163798" ID="ID_1994488422" MODIFIED="1711767172498" TEXT="entweder eine Kurven-Funktion definieren"/>
|
||||
<node CREATED="1711671270918" ID="ID_945426768" LINK="http://gnuplot.info/docs_5.5/loc9771.html" MODIFIED="1711767205997" TEXT="oder einen »Arrow« verwenden und Koordinaten ausrechnen"/>
|
||||
<node CREATED="1711767163798" ID="ID_1994488422" MODIFIED="1712158862171" TEXT="entweder eine Kurven-Funktion definieren">
|
||||
<icon BUILTIN="forward"/>
|
||||
</node>
|
||||
<node COLOR="#5b280f" CREATED="1711671270918" ID="ID_945426768" LINK="http://gnuplot.info/docs_5.5/loc9771.html" MODIFIED="1712158772924" TEXT="oder einen »Arrow« verwenden und Koordinaten ausrechnen">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node CREATED="1712158776473" ID="ID_616853093" MODIFIED="1712158927050" TEXT="ist letztlich keine gute Idee">
|
||||
<linktarget COLOR="#913855" DESTINATION="ID_616853093" ENDARROW="Default" ENDINCLINATION="224;23;" ID="Arrow_ID_376194184" SOURCE="ID_651930519" STARTARROW="None" STARTINCLINATION="430;-45;"/>
|
||||
</node>
|
||||
<node CREATED="1712158783773" ID="ID_1132746832" MODIFIED="1712158847988" TEXT="weil man die Anfangs / Endpunkte explizit ausrechnen muß">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...was nicht möglich ist, sofern man Gnuplot irgendwie den xrange automatisch bestimmen läßt (dann ist der xrange nämlich erst <i>nach</i>  dem Plotten bekannt)
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1710079916553" ID="ID_1466798395" MODIFIED="1711767279959" TEXT="Legende hinzufügen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
|
|
@ -114334,8 +114351,8 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1711767367983" ID="ID_447481681" MODIFIED="1711904772361" TEXT="geignet in Templating übersetzen">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1711767367983" ID="ID_447481681" MODIFIED="1712165061379" TEXT="geignet in Templating übersetzen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1711815238130" ID="ID_644083123" MODIFIED="1711815256928" TEXT="Grundidee: Bausteine + externe Steuer-Mechanik">
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1711815907291" ID="ID_530652307" MODIFIED="1711815930539" TEXT="Templates relativ »dumm« halten"/>
|
||||
|
|
@ -114352,7 +114369,7 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
<node CREATED="1711816185232" ID="ID_301292459" MODIFIED="1711816215559" TEXT="Range-Grenzen und Namen der Achsenbeschriftungen"/>
|
||||
<node CREATED="1711816271564" ID="ID_1862603482" MODIFIED="1711816277255" TEXT="Parameter der Regressionslinie"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1711816316013" ID="ID_1527861975" MODIFIED="1711904757510" TEXT="Rahmen schaffen">
|
||||
<node COLOR="#338800" CREATED="1711816316013" FOLDED="true" ID="ID_1527861975" MODIFIED="1711904757510" TEXT="Rahmen schaffen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1711816320800" ID="ID_310548089" MODIFIED="1711845412382" TEXT="separate Translation-Unit">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
|
|
@ -114377,10 +114394,10 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1711816503707" ID="ID_1610562996" MODIFIED="1711816512171" TEXT="Hilfsmittel zur Aufbereitung">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1711816605957" ID="ID_1301642198" MODIFIED="1711816625887" TEXT="Notation für Parmeter-Konfiguration">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1711816503707" ID="ID_1610562996" MODIFIED="1712163894228" TEXT="Hilfsmittel zur Aufbereitung">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1711816605957" ID="ID_1301642198" MODIFIED="1712163895261" TEXT="Notation für Parmeter-Konfiguration">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1711816632267" ID="ID_243539327" MODIFIED="1711816646604" TEXT="auf ETD / MakeRec() aufbauen"/>
|
||||
<node CREATED="1711816648544" ID="ID_1216726530" MODIFIED="1711816663402" TEXT="damit ist auch die String-Konvertierung schon gewährleistet"/>
|
||||
</node>
|
||||
|
|
@ -114449,8 +114466,8 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
<node CREATED="1711900361616" ID="ID_1245877883" MODIFIED="1711900371643" TEXT="dann gibt es zusätzliche Builder, die schon Teile vorbereiten"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1711820846814" ID="ID_131434294" MODIFIED="1712107103288" TEXT="Template-Bausteine">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1711820846814" ID="ID_131434294" MODIFIED="1712165063590" TEXT="Template-Bausteine">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1711820852404" ID="ID_1098550176" MODIFIED="1711904777126" TEXT="einfacher Daten-Plot">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1711820876736" ID="ID_1449855332" MODIFIED="1711820912379" TEXT="gemeinsame Abszisse + 1...9 Datenreihen"/>
|
||||
|
|
@ -114550,8 +114567,8 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
</node>
|
||||
<node COLOR="#338800" CREATED="1712101781128" ID="ID_304832758" MODIFIED="1712105281865" TEXT="Regrssions-Parameter">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1712101788544" ID="ID_703744386" MODIFIED="1712105228379" TEXT="kann man entweder vom User durchgeben lassen">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1712101788544" ID="ID_703744386" MODIFIED="1712165123948" TEXT="kann man entweder vom User durchgeben lassen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1712101798926" ID="ID_259712004" MODIFIED="1712105225760" TEXT="...oder von Gnuplot selber bestimmen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
|
|
@ -114562,9 +114579,15 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
<node COLOR="#338800" CREATED="1712105236313" ID="ID_445047208" MODIFIED="1712105251309" TEXT="Hierfür Funktion regLine(x) in gnuplot definieren">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1712105256166" ID="ID_411655467" MODIFIED="1712105278628" TEXT="⟹ diese dann verwenden für arrow-command">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#5b280f" CREATED="1712105256166" ID="ID_411655467" MODIFIED="1712158873748" TEXT="⟹ diese dann verwenden für arrow-command">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node CREATED="1712158876637" ID="ID_651930519" MODIFIED="1712158927049" TEXT="das ist problematisch">
|
||||
<arrowlink COLOR="#913855" DESTINATION="ID_616853093" ENDARROW="Default" ENDINCLINATION="224;23;" ID="Arrow_ID_376194184" STARTARROW="None" STARTINCLINATION="430;-45;"/>
|
||||
<icon BUILTIN="stop-sign"/>
|
||||
</node>
|
||||
<node CREATED="1712158885400" ID="ID_595958717" MODIFIED="1712158893497" TEXT="und unnötig, wenn wir schon die Funktion haben"/>
|
||||
</node>
|
||||
<node CREATED="1712159156179" ID="ID_986549444" MODIFIED="1712159169384" TEXT="stattdessen regLine(x) direkt mit plotten"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -114590,9 +114613,9 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1711820647889" ID="ID_149856563" MODIFIED="1711845599165" TEXT="GnuplotGen_test">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1711820662341" ID="ID_1728359549" MODIFIED="1712107237930" TEXT="einfachster Testfall: ein Daten-Punkt-Plot">
|
||||
<node COLOR="#338800" CREATED="1711820647889" ID="ID_149856563" MODIFIED="1712165118129" TEXT="GnuplotGen_test">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1711820662341" FOLDED="true" ID="ID_1728359549" MODIFIED="1712165149775" TEXT="einfachster Testfall: ein Daten-Punkt-Plot">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1711845516384" ID="ID_1778551442" MODIFIED="1711845526641" TEXT="kann einfaches Diagramm generieren">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
|
|
@ -114610,23 +114633,20 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1712107249502" ID="ID_758586411" MODIFIED="1712107251833" TEXT="plot_scatter_regression">
|
||||
<node COLOR="#338800" CREATED="1712107249502" FOLDED="true" ID="ID_758586411" MODIFIED="1712165147408" TEXT="plot_scatter_regression">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#5b280f" CREATED="1712107263609" ID="ID_1696889047" MODIFIED="1712107278412" TEXT="Verifikation hat ihre Grenzen">
|
||||
<icon BUILTIN="yes"/>
|
||||
<icon BUILTIN="stop-sign"/>
|
||||
<node CREATED="1712107282261" ID="ID_848988536" MODIFIED="1712107365616" TEXT="bedingt durch die Logik im Gnuplot-Skript">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
man kann hier eigentlich nur stichprobenartig verifizieren, daß das jeweilige Template zum Einsatz kam, und daß einige markante Werte per Text-Templating eingebaut wurden. Also z.B. die Datenheader, oder eine Achsenbeschriftung.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node COLOR="#5b280f" CREATED="1712107290460" ID="ID_352326813" MODIFIED="1712107309763" TEXT="wir können / wollen nicht Gnuplot in der Testsuite aufrufen">
|
||||
<icon BUILTIN="closed"/>
|
||||
|
|
@ -114639,7 +114659,26 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1712157571036" FOLDED="true" ID="ID_594850034" MODIFIED="1712165148496" TEXT="verify_customisation">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1712157579419" ID="ID_862141948" MODIFIED="1712165115431" TEXT="durch manuelle Inspektion prüfen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1712157601048" ID="ID_1356431130" MODIFIED="1712165112964" TEXT="kommen alle gesetzten Einstellungen im Skript an?"/>
|
||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1712157633183" ID="ID_182422803" MODIFIED="1712165112964" TEXT="sind die Bereiche korrekt gesetzt?"/>
|
||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1712157642106" ID="ID_1203874444" MODIFIED="1712165112964" TEXT="stimmt die Regressionsline auch mit xrange?">
|
||||
<node CREATED="1712158732758" ID="ID_1254764279" MODIFIED="1712158748896" TEXT="zeigt sich: ist so nicht realisierbar"/>
|
||||
<node CREATED="1712165090926" ID="ID_1866837123" MODIFIED="1712165099841" TEXT="stattdessen : Funktion verwenden"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1712165101021" ID="ID_1355216021" MODIFIED="1712165112964" TEXT="Fall-back wenn keine x-range gegeben"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1712165069402" ID="ID_1643060238" MODIFIED="1712165081801" TEXT="enige Verifikationen für durchgereichte Konfiguration">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1712165247528" ID="ID_1095964212" MODIFIED="1712165254925" TEXT="Regression berechnen und visualisieren">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
|
|||
Loading…
Reference in a new issue