Skip to content

Commit

Permalink
kombinierter Plot
Browse files Browse the repository at this point in the history
  • Loading branch information
kt86 committed Jan 16, 2025
1 parent 6095504 commit 604cbe6
Show file tree
Hide file tree
Showing 2 changed files with 131 additions and 3 deletions.
120 changes: 120 additions & 0 deletions src/main/java/org/tub/vsp/bvwp/users/kmt/FiguresKMT.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import org.tub.vsp.bvwp.data.Headers;
import org.tub.vsp.bvwp.data.HeadersKN;
import org.tub.vsp.bvwp.data.type.Einstufung;
import tech.tablesaw.api.DoubleColumn;
import tech.tablesaw.api.Table;
import tech.tablesaw.plotly.components.Axis;
import tech.tablesaw.plotly.components.Axis.Type;
Expand All @@ -14,6 +15,9 @@
import tech.tablesaw.plotly.traces.ScatterTrace.Mode;
import tech.tablesaw.plotly.traces.Trace;

import java.util.ArrayList;
import java.util.List;

class FiguresKMT {

private static final String legendFormat = "%30s";
Expand Down Expand Up @@ -346,4 +350,120 @@ static Figure createFigureNkvChange(Table table, String yName, String yName2) {
layout, cbrOverCbrTrace1, cbrOverCbrTrace2, diagonale, horizontalCbr1, verticalCbr1);
}

/**
* Für NKV vergleich-Plot mit 2 Y-Achsen.
* */
static Figure createFigureElaChange(Table table, String xName, String yName1, String yName2, String yName3, String yAxisName) {

// String xName = Headers.NKV_NO_CHANGE;
// String yName = Headers.NKV_CO2;
//Todo: Berechnen
double maxX = table.numberColumn( xName ).max() * 1.1;
double maxY = calculateMaxValue(table, List.of(yName1, yName2, yName3)) * 1.1;

// double maxX = 20.;
// double maxY = 20.;

Axis xAxis =
Axis.builder()
.type(Type.LINEAR)
.title(xName)
.range(0., maxX)
// .autoRange( Axis.AutoRange.REVERSED );
.build();

table = table.sortDescendingOn(HeadersKN.NKV_ORIG);

Axis yAxis =
Axis.builder()
.type(Type.LINEAR)
.range(Double.min(0., 1.1 * table.numberColumn(yName1).min()), maxY)
// .range( 1.1*table.numberColumn( y2Name ).min(),4. )
.title(yName1)
.build();

Axis yAxis2 =
Axis.builder()
.type(Type.LINEAR)
.range(Double.min(0., 1.1 * table.numberColumn(yName2).min()), maxY)
// .range( 1.1*table.numberColumn( y2Name ).min(),4. )
.title(yAxisName)
.build();


Layout layout =
Layout.builder( "Changes from calculation approaches over " + xName)
.xAxis(xAxis)
.yAxis(yAxis)
.yAxis2(yAxis2)
.width(RunLocalCsvScrapingKMT_EWGT.plotWidth)
.build();

Trace y1overX =
ScatterTrace.builder(table.numberColumn(xName), table.numberColumn(yName1))
.text(table.stringColumn(Headers.PROJECT_NAME).asObjectArray())
.name(yName1)
.marker(Marker.builder().color("blue").build())
.build();

Trace y2overX =
ScatterTrace.builder(table.numberColumn(xName), table.numberColumn(yName2))
.text(table.stringColumn(Headers.PROJECT_NAME).asObjectArray())
.name(yName2)
.marker(Marker.builder().color("red").build())
.build();

Trace y3overX =
ScatterTrace.builder(table.numberColumn(xName), table.numberColumn(yName3))
.text(table.stringColumn(Headers.PROJECT_NAME).asObjectArray())
.name(yName3)
.marker(Marker.builder().color("orange").build())
.build();

//Diagonalen
double overallMax = Math.max(maxX, maxY);
double[] xx = new double[] {0.,overallMax};
double[] yy = new double[] {0., overallMax};
double[] xy1 = new double[] {1., 1.};

Trace diagonale =
ScatterTrace.builder(xx, yy)
.name("diagonal Line")
.mode(Mode.LINE)
.marker(Marker.builder().color("magenta").build())
.build();

return new Figure(layout, y1overX, y2overX, y3overX, diagonale);

// Trace horizontalCbr1 =
// ScatterTrace.builder(xx, xy1)
// .name(yAxisName + " = 1")
// .mode(Mode.LINE)
// .marker(Marker.builder().color("gray").build())
// .build();
//
// Trace verticalCbr1 =
// ScatterTrace.builder(xy1, yy)
// .name(xName+ " = 1")
// .mode(Mode.LINE)
// .marker(Marker.builder().color("gray").build())
// .build();
//
// return new Figure(layout, y1overX, y2overX, y3overX, diagonale, horizontalCbr1, verticalCbr1);
}

private static double calculateMaxValue(Table table, List<String> yNames) {
List<Double> allValues = new ArrayList<>();

for (String yName : yNames) {
DoubleColumn column = table.doubleColumn(yName);
for (double value : column) {
if (!Double.isNaN(value)) {
allValues.add(value);
}
}
}
return allValues.stream().max(Double::compare).orElse(Double.NaN);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
import org.apache.logging.log4j.Logger;
import org.tub.vsp.bvwp.BvwpUtils;
import org.tub.vsp.bvwp.Gbl;
import org.tub.vsp.bvwp.data.Headers;
import org.tub.vsp.bvwp.data.HeadersKN;
import org.tub.vsp.bvwp.data.container.analysis.StreetAnalysisDataContainer;
import org.tub.vsp.bvwp.data.type.Einstufung;
Expand Down Expand Up @@ -113,13 +112,13 @@ private static void plotKMTforHeartFigures(Table table) throws IOException {
Figures2KN figures2 = new Figures2KN(table);

List<Pair<String, List<Figure>>> figures = new ArrayList<>();
Figure fig;

figures.add( Pair.create( Figures2KN.createHeader1( "Plots für hEART-Paper 2025" ), null ) );

//#####
figures.add( Pair.create( Figures2KN.createHeader1( "Aus Elastizitäten" ), null ) );

Figure fig;

fig = figures2.fzkmEl_vs_fzkm(ADDTL_PKWKM_ORIG, ADDTL_PKWKM_EL06 );
figures.add( Pair.create( Figures2KN.createHeader2( "Elastizität 0.6"), Collections.singletonList( fig )));

Expand All @@ -130,6 +129,7 @@ private static void plotKMTforHeartFigures(Table table) throws IOException {
figures.add( Pair.create( Figures2KN.createHeader2( "'reduziert': Elastizität 0.3 oder 0.6 ja nach Bautyp; halbiert"), Collections.singletonList( fig )));


//####
figures.add( Pair.create( Figures2KN.createHeader1( "Aus Reisezeitgewinnen" ), null ) );

fig = figures2.fzkmEl_vs_fzkm(ADDTL_PKWKM_ORIG, ADDTL_PKWKM_FROM_TTIME_29_HALF);
Expand All @@ -138,6 +138,14 @@ private static void plotKMTforHeartFigures(Table table) throws IOException {
fig = figures2.fzkmEl_vs_fzkm(ADDTL_PKWKM_ORIG, ADDTL_PKWKM_FROM_TTIME_29_HALF_InklBVWP);
figures.add( Pair.create( Figures2KN.createHeader2( "BVWP plus 0.5 Fahreitgewinnen, 29km/h, "), Collections.singletonList( fig )));


//####
figures.add( Pair.create( Figures2KN.createHeader1( "Kombiniert" ), null ) );

fig = FiguresKMT.createFigureElaChange(table, ADDTL_PKWKM_ORIG, ADDTL_PKWKM_EL06, ADDTL_PKWKM_EL0306_HALF, ADDTL_PKWKM_FROM_TTIME_29_HALF_InklBVWP, "additional mio vkm/a");
figures.add( Pair.create( Figures2KN.createHeader2( "Kombiniert die verschiedenen Ansätze"), Collections.singletonList( fig )));


plotFigures("multiplot_hEART.html", figures);


Expand Down

0 comments on commit 604cbe6

Please sign in to comment.