From ec83cb72da148db192c89e11f2f5da38caf98a46 Mon Sep 17 00:00:00 2001
From: rudolfkoenig <>
Date: Thu, 20 Jun 2019 13:39:55 +0000
Subject: [PATCH] 98_SVG.pm: log minimum patches by justme1968 (Forum #101522)
git-svn-id: https://svn.fhem.de/fhem/trunk@19667 2b470e98-0d58-463d-a4d8-8e2adae1ed80
---
fhem/FHEM/98_SVG.pm | 32 ++++++++++++++++++++------------
fhem/www/pgm2/svg.js | 4 +++-
2 files changed, 23 insertions(+), 13 deletions(-)
diff --git a/fhem/FHEM/98_SVG.pm b/fhem/FHEM/98_SVG.pm
index fb33cf326..f096e10d9 100644
--- a/fhem/FHEM/98_SVG.pm
+++ b/fhem/FHEM/98_SVG.pm
@@ -1770,7 +1770,8 @@ SVG_render($$$$$$$$$$)
my $scale = "y".($axis)."scale"; $scale = "yscale" if( $axis == 1 );
my $log = ""; $log = $conf{$scale} if( $conf{$scale} );
- my $f_log = int($hmax{$a}) ? (SVG_log10($hmax{$a}) / $hmax{$a}) : 1;
+ my $f_log = int($hmax{$a}) ? ((SVG_log10($hmax{$a})-SVG_log10($hmin{$a})) /
+ ($hmax{$a}-$hmin{$a})) : 1;
# offsets
my ($align,$display,$cll);
@@ -1811,8 +1812,8 @@ SVG_render($$$$$$$$$$)
if($tic && $tic !~ m/mirror/) {
$tic =~ s/^\((.*)\)$/$1/; # Strip ()
for(my $decimal = 0;
- $decimal < ($log eq 'log'?SVG_log10($hmax{$a}):1);
- $decimal++ ) {
+ $decimal <($log eq 'log'?SVG_log10($hmax{$a})-SVG_log10($hmin{$a}):1);
+ $decimal++) {
foreach my $onetic (split(",", $tic)) {
$onetic =~ s/^ *(.*) *$/$1/;
my ($tlabel, $tvalue) = split(" ", $onetic);
@@ -1822,7 +1823,8 @@ SVG_render($$$$$$$$$$)
$tlabel = $tvalue if( !$tlabel );
$off2 = int($y+($hmax{$a}-$tvalue)*$hmul);
- $off2 = int($y+($hmax{$a}-SVG_log10($tvalue)/$f_log)*$hmul)
+ $off2 = int($y+($hmax{$a}-
+ (SVG_log10($tvalue)-SVG_log10($hmin{$a}))/$f_log)*$hmul)
if( $log eq 'log' );
#-- tics
SVG_pO "";
@@ -1844,13 +1846,18 @@ SVG_render($$$$$$$$$$)
#-- tics automatically
} elsif( $hstep{$a}>0 ) {
for(my $decimal = 0;
- $decimal < ($log eq 'log'?SVG_log10($hmax{$a}):1);
- $decimal++ ) {
- for(my $i = $hmin{$a}; $i <= $hmax{$a}; $i += $hstep{$a}) {
+ $decimal <($log eq 'log'?SVG_log10($hmax{$a})-SVG_log10($hmin{$a}):1);
+ $decimal++) {
+ for(my $i = ($log eq 'log' ? 0 : $hmin{$a});
+ $i <= $hmax{$a}; $i += $hstep{$a}) {
my $i = $i / 10 ** $decimal;
- $off2 = int($y+($hmax{$a}-$i)*$hmul);
- $off2 = int($y+($hmax{$a}-SVG_log10($i)/$f_log)*$hmul)
- if( $log eq 'log' );
+ if( $log eq 'log' ) {
+ next if( $i < $hmin{$a} );
+ $off2 = int($y + ($hmax{$a} -
+ (SVG_log10($i) - SVG_log10($hmin{$a})) / $f_log) * $hmul);
+ } else {
+ $off2 = int($y+($hmax{$a}-$i)*$hmul);
+ }
#-- tics
SVG_pO " ";
#--grids
@@ -1899,10 +1906,11 @@ SVG_render($$$$$$$$$$)
SVG_pO "" if(!defined($dxp));
next if(!defined($dxp));
- my $f_log = int($hmax{$a}) ? (SVG_log10($hmax{$a}) / $hmax{$a}) : 1;
+ my $f_log = int($hmax{$a}) ? ((SVG_log10($hmax{$a}) -
+ SVG_log10($hmin{$a})) / ($hmax{$a}-$hmin{$a})) : 1;
if( $log eq 'log' ) {
foreach my $i (1..int(@{$dxp})-1) {
- $dyp->[$i] = SVG_log10($dyp->[$i]) / $f_log;
+ $dyp->[$i] = (SVG_log10($dyp->[$i])-SVG_log10($hmin{$a})) / $f_log;
}
}
diff --git a/fhem/www/pgm2/svg.js b/fhem/www/pgm2/svg.js
index 74d2853e7..be1830004 100644
--- a/fhem/www/pgm2/svg.js
+++ b/fhem/www/pgm2/svg.js
@@ -304,7 +304,9 @@ sv_menu(evt, embed)
if( par.log_scale ) {
y *= par.log_scale;
- y = Math.pow(10,y) - 1;
+ if( par.y_min )
+ y += Math.log(par.y_min)/Math.log(10);
+ y = Math.pow(10,y);
}
y = y.toFixed(par.decimals);