@@ -6,7 +6,7 @@ import { max, min } from "d3-array";
66import { scaleLinear , scaleTime } from "d3-scale" ;
77import { drag } from "d3-drag" ;
88import { zoom } from "d3-zoom" ;
9- import { axisBottom , axisLeft } from "d3-axis" ;
9+ import { axisBottom , axisLeft , axisRight } from "d3-axis" ;
1010import { line } from "d3-shape" ;
1111//import { timeFormat } from "d3-time-format";
1212
@@ -791,6 +791,7 @@ function renderChart(options) {
791791 . style ( "border" , "1px solid black" ) ;
792792
793793 // Extract profile & temperature data into local arrays
794+ // First: profiles
794795 var profileData = header [ 0 ] [ 'jobProfile' ] ;
795796 var profileLineData = [ ] ;
796797 var temperatureLineDataHolder = [ ] ;
@@ -810,7 +811,7 @@ function renderChart(options) {
810811 if ( header [ 0 ] . hasOwnProperty ( "sensors" ) ) {
811812 sensorList = header [ 0 ] [ "sensors" ] ;
812813 }
813- // Extract temperature data for all sensors
814+ // Second, extract temperature data for all sensors
814815 var sensor_instance ;
815816 for ( sensor_instance = 0 ; sensor_instance < sensorList . length ; sensor_instance ++ ) {
816817 //console.log("renderChart() sensor name: " + sensorList[sensor_instance]);
@@ -834,11 +835,15 @@ function renderChart(options) {
834835 }
835836
836837 // Find extent of values in both profileLineData & all the temperatureLineData arrays (1 for each sensor)
837- // N.B. could maybe do this while populating the *LineData arrays
838838 var minDataPoint = min ( profileLineData , function ( d ) { return parseFloat ( d . y ) ; } ) ;
839839 var maxDataPoint = max ( profileLineData , function ( d ) { return parseFloat ( d . y ) ; } ) ;
840840 var maxTime = max ( profileLineData , function ( d ) { return parseFloat ( d . x ) ; } ) ;
841841
842+ // Separate scaling for gravity, so need separate min/max points
843+ var minGravDataPoint = 1.0 ;
844+ var maxGravDataPoint = 1.0 ;
845+ var maxGravTime = maxTime ;
846+
842847 for ( sensor_instance = 0 ; sensor_instance < sensorList . length ; sensor_instance ++ ) {
843848 if ( temperatureLineDataHolder [ sensor_instance ] . length > 0 ) {
844849 var temperature = min ( temperatureLineDataHolder [ sensor_instance ] , function ( d ) { return parseFloat ( d . y ) ; } ) ;
@@ -851,27 +856,40 @@ function renderChart(options) {
851856
852857 if ( gravityLineDataHolder [ sensor_instance ] . length > 0 ) {
853858 var gravity = min ( gravityLineDataHolder [ sensor_instance ] , function ( d ) { return parseFloat ( d . y ) ; } ) ;
854- if ( gravity < minDataPoint ) minDataPoint = gravity ;
859+ if ( gravity < minGravDataPoint ) minGravDataPoint = gravity ;
855860 gravity = max ( gravityLineDataHolder [ sensor_instance ] , function ( d ) { return parseFloat ( d . y ) ; } ) ;
856- if ( gravity > maxDataPoint ) maxDataPoint = gravity ;
861+ if ( gravity > maxGravDataPoint ) maxGravDataPoint = gravity ;
857862 gravity = max ( gravityLineDataHolder [ sensor_instance ] , function ( d ) { return parseFloat ( d . x ) ; } ) ;
858- if ( gravity > maxTime ) maxTime = gravity ;
863+ if ( gravity > maxGravTime ) maxGravTime = gravity ;
859864 }
860865 }
861866 // Add some clearance
862867 minDataPoint -= 5 ;
863868 maxDataPoint += 5 ;
864869 maxTime += 60 ;
870+ minGravDataPoint -= 0.05 ;
871+ maxGravDataPoint += 0.05 ;
872+ maxGravTime += 60 ;
865873
866874 //console.log("Min = " + minDataPoint + " Max = " + maxDataPoint);
867875 var linearScaleY = scaleLinear ( )
868876 . domain ( [ minDataPoint , maxDataPoint ] )
869877 . range ( [ graphHeight , 0 ] ) ;
870- var yAxis = axisLeft ( linearScaleY ) . ticks ( 5 ) ;
878+ var yAxis = axisLeft ( linearScaleY ) . ticks ( 10 ) ;
871879 svg . append ( "g" )
872880 . attr ( 'class' , 'y ' + nameBase + 'Axis unselectable' )
873881 . attr ( "transform" , "translate(" + graphMargin . left + "," + graphMargin . top + ")" )
874882 . call ( yAxis ) ;
883+
884+ var linearGravScaleY = scaleLinear ( )
885+ . domain ( [ minGravDataPoint , maxGravDataPoint ] )
886+ . range ( [ graphHeight , 0 ] ) ;
887+ var yGravAxis = axisRight ( linearGravScaleY ) . ticks ( 8 ) ;
888+ svg . append ( "g" )
889+ . attr ( 'class' , 'y grav ' + nameBase + 'Axis unselectable' )
890+ . attr ( "transform" , "translate(" + ( graphWidth + graphMargin . left ) + "," + graphMargin . top + ")" )
891+ . call ( yGravAxis ) ;
892+
875893 var linearScaleX = scaleTime ( )
876894 . domain ( [ 0 , maxTime ] )
877895 . range ( [ 0 , graphWidth ] ) ;
@@ -1002,7 +1020,7 @@ function renderChart(options) {
10021020 //console.log("scaled sp = " + gravityLineData[sp].x + " : " + gravityLineData[sp].y);
10031021 scaledGravityLineData . push ( {
10041022 "x" :linearScaleX ( gravityLineData [ sp ] . x ) ,
1005- "y" :linearScaleY ( gravityLineData [ sp ] . y )
1023+ "y" :linearGravScaleY ( gravityLineData [ sp ] . y )
10061024 } ) ;
10071025 }
10081026 // Draw gravity graph
@@ -1035,7 +1053,7 @@ function renderChart(options) {
10351053 . append ( "tspan" ) . attr ( "x" , 50 ) . attr ( "y" , 18 ) . attr ( 'dy' , '1.1em' ) . attr ( "text-anchor" , "end" ) . text ( "Time:" )
10361054 . append ( "tspan" ) . attr ( "x" , 60 ) . attr ( "y" , 18 ) . attr ( 'dy' , '1.1em' ) . attr ( "text-anchor" , "start" ) . text ( tickText ( linearScaleX . invert ( mouse ( this ) [ 0 ] ) ) )
10371055 . append ( "tspan" ) . attr ( "x" , 50 ) . attr ( "y" , 36 ) . attr ( 'dy' , '1.1em' ) . attr ( "text-anchor" , "end" ) . text ( "Grav:" )
1038- . append ( "tspan" ) . attr ( "x" , 60 ) . attr ( "y" , 36 ) . attr ( 'dy' , '1.1em' ) . attr ( "text-anchor" , "start" ) . text ( ( linearScaleY . invert ( mouse ( this ) [ 1 ] ) ) . toFixed ( gravDisplayPrecision ) ) ;
1056+ . append ( "tspan" ) . attr ( "x" , 60 ) . attr ( "y" , 36 ) . attr ( 'dy' , '1.1em' ) . attr ( "text-anchor" , "start" ) . text ( ( linearGravScaleY . invert ( mouse ( this ) [ 1 ] ) ) . toFixed ( gravDisplayPrecision ) ) ;
10391057 // Measure dummy text
10401058 var bbox = select ( "#" + nameBase + "TooltipText_" + longName ) . node ( ) . getBBox ( ) ;
10411059 // Remove dummy text
@@ -1048,7 +1066,7 @@ function renderChart(options) {
10481066 . append ( "tspan" ) . attr ( "x" , 50 ) . attr ( "y" , 18 ) . attr ( 'dy' , '1.1em' ) . attr ( "text-anchor" , "end" ) . text ( "Time:" )
10491067 . append ( "tspan" ) . attr ( "x" , 60 ) . attr ( "y" , 18 ) . attr ( 'dy' , '1.1em' ) . attr ( "text-anchor" , "start" ) . text ( tickText ( linearScaleX . invert ( mouse ( this ) [ 0 ] ) ) )
10501068 . append ( "tspan" ) . attr ( "x" , 50 ) . attr ( "y" , 36 ) . attr ( 'dy' , '1.1em' ) . attr ( "text-anchor" , "end" ) . text ( "Grav:" )
1051- . append ( "tspan" ) . attr ( "x" , 60 ) . attr ( "y" , 36 ) . attr ( 'dy' , '1.1em' ) . attr ( "text-anchor" , "start" ) . text ( ( linearScaleY . invert ( mouse ( this ) [ 1 ] ) ) . toFixed ( gravDisplayPrecision ) ) ;
1069+ . append ( "tspan" ) . attr ( "x" , 60 ) . attr ( "y" , 36 ) . attr ( 'dy' , '1.1em' ) . attr ( "text-anchor" , "start" ) . text ( ( linearGravScaleY . invert ( mouse ( this ) [ 1 ] ) ) . toFixed ( gravDisplayPrecision ) ) ;
10521070
10531071 // Find size of new text box
10541072 bbox = select ( "#" + nameBase + "TooltipText_" + longName ) . node ( ) . getBBox ( ) ;
0 commit comments