public ServiceRepository([NotNull] PlotMaker plotMaker, [NotNull] MapDrawer mapDrawer, [NotNull] MySqlConnection sqlConnection, [NotNull] Logger logger, [NotNull] RunningConfig runningConfig, [NotNull] Random rnd) { PlotMaker = plotMaker; MapDrawer = mapDrawer; SqlConnection = sqlConnection; Logger = logger; MyLogger = logger; RunningConfig = runningConfig; Rnd = rnd; }
public ServiceRepository([NotNull] PlotMaker plotMaker, [NotNull] MapDrawer mapDrawer, [NotNull] Logger logger, [NotNull] RunningConfig runningConfig, [NotNull] Random rnd) { PlotMaker = plotMaker; MapDrawer = mapDrawer; Logger = logger; MyLogger = logger; RunningConfig = runningConfig; Rnd = rnd; SqlConnectionPreparer = new SqlConnectionPreparer(runningConfig); StartingTime = DateTime.Now; }
private void VisualizeOneProfile([NotNull] string targetDir, [NotNull] Profile p, [NotNull] PlotMaker pm, bool limitToZero) { if (!Directory.Exists(targetDir)) { Directory.CreateDirectory(targetDir); Thread.Sleep(500); } var filename = Path.Combine(targetDir, p.Name + ".png"); var filenameCsv = Path.Combine(targetDir, p.Name + ".csv"); var ls = p.GetLineSeriesEntry(); var allLs = new List <LineSeriesEntry> { ls }; pm.MakeLineChart(filename, p.Name, allLs, new List <PlotMaker.AnnotationEntry>(), limitToZero ? 0 : p.Values.Min()); if (p.Values.Count < 8700) { using (var sw1 = new StreamWriter(filenameCsv)) { for (var i = 0; i < p.Values.Count; i++) { sw1.WriteLine(p.Values[i]); } sw1.Close(); return; } } var oneDayProfile = p.MakeDailyAverages(); var bs = oneDayProfile.GetBarSeries(); var lbs = new List <BarSeriesEntry> { bs }; var times = new List <string>(); for (var i = 0; i < oneDayProfile.Values.Count; i++) { if (i % 30 == 0) { times.Add(i.ToString()); } else { times.Add(""); } } pm.MakeBarChart(filename + ".bar.png", p.Name, lbs, times); var negatives = p.GetOnlyNegative("load").MakeDailyAverages().GetBarSeries(); var positives = p.GetOnlyPositive("feedin").MakeDailyAverages().GetBarSeries(); var lbs2 = new List <BarSeriesEntry> { negatives, positives }; pm.MakeBarChart(filename + ".barSplit.png", p.Name, lbs2, times); using (var sw = new StreamWriter(filenameCsv)) { foreach (var value in p.Values) { sw.WriteLine(value); } sw.Close(); } }
/* * private static double FindMinimumTargetLoad([NotNull] Profile bkw, [NotNull] Profile residualAfterPv, double storageSize) * { * if (Math.Abs(storageSize) < 0.00001) { * return bkw.Values.Max(); * } * double targetLoad =0; * double peakLoad = Double.MaxValue; * while (peakLoad > targetLoad) { * var withStorage10KWhPredictive = * residualAfterPv.IntegrateStorageWithAdjustedCurrentValue(storageSize * 4000, * "10kwhStoragePredictive-target-" + targetLoad, * out var _, targetLoad); * peakLoad = withStorage10KWhPredictive.Values.Max(); * if (peakLoad > targetLoad) { * targetLoad += 50; * } * //logger.Info("trying targete load of " + targetLoad); * } * return targetLoad; * }*/ private void VisualizeStackedProfiles([NotNull] string targetDir, [ItemNotNull][NotNull] List <Profile> ps, [NotNull] PlotMaker pm, [NotNull] string name, [NotNull] Profile residual) { if (!Directory.Exists(targetDir)) { Directory.CreateDirectory(targetDir); Thread.Sleep(500); } var filename = Path.Combine(targetDir, name + ".png"); var filenameCsv = Path.Combine(targetDir, name + ".csv"); var filenameHourlyCsv = Path.Combine(targetDir, name + ".hourly.csv"); var allLs = new List <LineSeriesEntry>(); double min = 0; var allBars = new List <BarSeriesEntry>(); foreach (var profile in ps) { var ls = profile.GetLineSeriesEntry(); allLs.Add(ls); if (profile.Values.Min() < min) { min = profile.Values.Min(); } allBars.Add(profile.MakeDailyAverages().GetBarSeries()); } pm.MakeLineChart(filename, name, allLs, new List <PlotMaker.AnnotationEntry>(), min); pm.MakeBarChart(filename + ".bars.png", name, allBars, new List <string>()); { using (var sw = new StreamWriter(filenameCsv)) { var sb1 = new StringBuilder(); foreach (var profile in ps) { sb1.Append(profile.Name).Append(";"); } sw.WriteLine(sb1); var dailyProfiles = new List <Profile>(); foreach (var profile in ps) { dailyProfiles.Add(profile.MakeDailyAverages()); } for (var i = 0; i < 365; i++) { var sb = new StringBuilder(); foreach (var profile in dailyProfiles) { sb.Append(profile.Values[i]).Append(";"); } sw.WriteLine(sb); } sw.Close(); } } { using (var sw = new StreamWriter(filenameHourlyCsv)) { var sb1 = new StringBuilder(); ps.Add(residual); foreach (var profile in ps) { sb1.Append(profile.Name).Append(";"); } sw.WriteLine(sb1); for (var i = 0; i < 8760; i++) { var sb = new StringBuilder(); foreach (var profile in ps) { sb.Append(profile.Values[i]).Append(";"); } sw.WriteLine(sb); } sw.Close(); } } }
public void Run() { var logger = new Logging.Logger(null); var pm = new PlotMaker(new MapDrawer(logger), logger, null); const string targetDir = @"c:\work\simzukunft\Stadtprofile"; //read profiles const string filename = @"U:\SimZukunft\StadtProfil\BKWLast_1h.csv"; const string profilename = "01-bkwlast"; var bkwRaw = ZZ_ProfileImportHelper.ReadCSV(filename, profilename); var bkwScaled = bkwRaw.ScaleToTargetSum(103_000_000, "BKW"); VisualizeOneProfile(targetDir, bkwScaled, pm, false); const string filename2 = @"U:\SimZukunft\StadtProfil\PVEinspeisung_1h.csv"; const string profilename2 = "01-pv"; var evProfile = Profile.MakeConstantProfile(15_000_000, "EV", Profile.ProfileResolution.Hourly); var pv = ZZ_ProfileImportHelper.ReadCSV(filename2, profilename2); VisualizeOneProfile(targetDir, pv, pm, false); //scaling const string filename3 = @"U:\SimZukunft\StadtProfil\temperaturen.csv"; const string profilename3 = "01-temperaturen"; var temperaturen = ZZ_ProfileImportHelper.ReadCSV(filename3, profilename3); const string filename4 = @"U:\SimZukunft\StadtProfil\pv_einspeisung_pvgis_2016_35_süd.csv"; const string profilename4 = "pvgis_süd_35"; var pvgis35 = ZZ_ProfileImportHelper.ReadCSV(filename4, profilename4); const string filename5 = @"U:\SimZukunft\StadtProfil\pv_einspeisung_pvgis_2016_90_süd.csv"; const string profilename5 = "pvgis_süd_90"; var pvgis90 = ZZ_ProfileImportHelper.ReadCSV(filename5, profilename5); VisualizeOneProfile(targetDir, temperaturen, pm, false); var degreeDayPowerProfile = temperaturen.MakeDegreeDayPowerProfile("02-HeatingDegreedays", 15, 22_000_000); var coolingdegreeDayPowerProfile = temperaturen.MakeCoolingDegreeHours("02-CoolingDegreeHours", 20, 15_000_000); VisualizeOneProfile(targetDir, coolingdegreeDayPowerProfile, pm, false); var summedLoadProfile = bkwScaled.Add(evProfile, "with ev").Add(degreeDayPowerProfile, "with heating").Add(coolingdegreeDayPowerProfile, "with cooling"); var bkwsum = summedLoadProfile.EnergySum(); var scaledPv1 = pv.ScaleToTargetSum(bkwsum, "02-PV Scaled"); var scaledPv35 = pvgis35.ScaleToTargetSum(bkwsum, "pvgis_süd_35_scaled"); VisualizeOneProfile(targetDir, scaledPv35, pm, false); var scaledPv90 = pvgis90.ScaleToTargetSum(bkwsum, "pvgis_süd_90_scaled"); VisualizeOneProfile(targetDir, scaledPv90, pm, false); VisualizeOneProfile(targetDir, degreeDayPowerProfile, pm, false); const string targetdir1 = @"c:\work\simzukunft\Stadtprofile\measured"; AnalyzePVProfile(bkwScaled, scaledPv1, degreeDayPowerProfile, evProfile, coolingdegreeDayPowerProfile, targetdir1, pm, summedLoadProfile); const string targetdir2 = @"c:\work\simzukunft\Stadtprofile\35süd"; AnalyzePVProfile(bkwScaled, scaledPv35, degreeDayPowerProfile, evProfile, coolingdegreeDayPowerProfile, targetdir2, pm, summedLoadProfile); const string targetdir3 = @"c:\work\simzukunft\Stadtprofile\90süd"; AnalyzePVProfile(bkwScaled, scaledPv90, degreeDayPowerProfile, evProfile, coolingdegreeDayPowerProfile, targetdir3, pm, summedLoadProfile); //var withStorage50KWh = residualAfterPv.IntegrateStorage(50 * 4000, "06-50kwhStorage", out var storageValues50Kwh); //VisualizeOneProfile(withStorage50KWh, pm, true); //VisualizeOneProfile(storageValues50Kwh, pm, false); //var onlypositiveBattery50Kwh = withStorage50KWh.GetOnlyPositive("06-50kwhBatterly only positive"); //VisualizeOneProfile(onlypositiveBattery50Kwh, pm, false); //level target for 10 kWh //var targetLoad = FindMinimumTargetLoad(summedLoadProfile, residualAfterPv,10); //var leveledProfile =residualAfterPv.IntegrateStorageWithAdjustedCurrentValue(20 * 4000,"07-20kwhStoragePredictive-target-" + targetLoad,out var _, targetLoad); //VisualizeOneProfile(leveledProfile, pm, true); //VisualizeOneProfile(leveledProfile.GetOnlyPositive("07-20kwh_predicitive_onlypositive"), pm, true); //look at minimum power draw over different storage sizes //Profile minimumTargetLoads = new Profile("08-MinimumTargetLoads"); //double maxLoad = summedLoadProfile.Values.Max(); //for (int i = 0; i < 3000; i+=10) { //var targetLoad1 = FindMinimumTargetLoad(summedLoadProfile, residualAfterPv,i); //double relativeLoad = targetLoad1 / maxLoad; //minimumTargetLoads.Values.Add(relativeLoad); //} //VisualizeOneProfile(minimumTargetLoads, pm, true); pm.Finish(); }
private void AnalyzePVProfile([NotNull] Profile bkwScaled, [NotNull] Profile pvProfile, [NotNull] Profile degreeDayPowerProfile, [NotNull] Profile evProfile, [NotNull] Profile coolingdegreeDayPowerProfile, [NotNull] string targetDir, [NotNull] PlotMaker pm, [NotNull] Profile summedLoadProfile) { var stackedProfiles = new List <Profile> { bkwScaled, pvProfile.MultiplyWith(-1, "PV"), degreeDayPowerProfile, evProfile, coolingdegreeDayPowerProfile }; var residualAfterPv = summedLoadProfile.MinusProfile(pvProfile, "03-ResidualAfterPV"); VisualizeStackedProfiles(targetDir, stackedProfiles, pm, "0a-FullCityStack", residualAfterPv); VisualizeOneProfile(targetDir, residualAfterPv, pm, true); residualAfterPv.Name += " full"; VisualizeOneProfile(targetDir, residualAfterPv, pm, false); //pm.Finish();return; var onlyNegative = residualAfterPv.GetOnlyNegative("03-Residual after pv only negative"); VisualizeOneProfile(targetDir, onlyNegative, pm, false); var onlypositive = residualAfterPv.GetOnlyPositive("03-Residual after pv only positive"); VisualizeOneProfile(targetDir, onlypositive, pm, false); const int batterySize = 400000; var withStorage = residualAfterPv.IntegrateStorage(batterySize, "04-" + batterySize + "kwhStorage", out var storageValues); VisualizeOneProfile(targetDir, withStorage, pm, false); withStorage.Name += "-limited"; VisualizeOneProfile(targetDir, withStorage, pm, true); VisualizeOneProfile(targetDir, storageValues, pm, false); var onlypositiveBattery = withStorage.GetOnlyPositive("04-" + batterySize + "kwhBattery only positive"); VisualizeOneProfile(targetDir, onlypositiveBattery, pm, false); }
// ReSharper disable once FunctionComplexityOverflow public void Run() { var logger = new Logging.Logger(null); using (var db = new Database("Data Source=v:\\Test.sqlite", DatabaseType.SQLite, System.Data.SQLite.SQLiteFactory.Instance)) { var ebd = db.Fetch <RasterDatenEnergiebedarfKanton>(); var dict = GetLongNames(); var pm = new PlotMaker(new MapDrawer(logger), logger, null); const string path = "v:\\plots\\"; //anzahl gebäude var bses = new List <BarSeriesEntry>(); var colNames = new List <string>(); var col = 0; colNames.Add("Summe"); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.wg_gwr)], ebd.Sum(x => x.wg_gwr), col)); col++; colNames.Add("GEAK"); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.wg_geak)], ebd.Sum(x => x.wg_geak), col)); col++; colNames.Add("Gebäude nach Typ"); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.wg_1010)], ebd.Sum(x => x.wg_1010), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.wg_1021)], ebd.Sum(x => x.wg_1021), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.wg_1025)], ebd.Sum(x => x.wg_1025), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.wg_1030)], ebd.Sum(x => x.wg_1030), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.wg_1040)], ebd.Sum(x => x.wg_1040), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.wg_1060)], ebd.Sum(x => x.wg_1060), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.wg_1080)], ebd.Sum(x => x.wg_1080), col)); pm.MakeBarChart(Path.Combine(path, "Gebäudeanzahl" + ".png"), "Gebäude-Anzahl", bses, colNames); //wärme/energiebedarfe bses = new List <BarSeriesEntry>(); colNames = new List <string>(); col = 0; colNames.Add("Wärmebedarf für \nHeizen und\nWarmwasser "); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.whzww)], ebd.Sum(x => x.whzww), col)); col++; colNames.Add("Wärmebedarf \naufgeteilt"); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.whz)], ebd.Sum(x => x.whz), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.www)], ebd.Sum(x => x.www), col)); col++; colNames.Add("Energiebedarf \nGesamt"); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww)], ebd.Sum(x => x.ehzww), col)); col++; colNames.Add("Energiebedarf \nWarmwasser und\nHeizen"); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehz)], ebd.Sum(x => x.ehz), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.eww)], ebd.Sum(x => x.eww), col)); col++; colNames.Add("Energiebedarf \nHeizen \naufteilt"); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehz_ol)], ebd.Sum(x => x.ehz_ol), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehz_gz)], ebd.Sum(x => x.ehz_gz), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehz_ho)], ebd.Sum(x => x.ehz_ho), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehz_el)], ebd.Sum(x => x.ehz_el), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehz_ko)], ebd.Sum(x => x.ehz_ko), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehz_wp)], ebd.Sum(x => x.ehz_wp), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehz_so)], ebd.Sum(x => x.ehz_so), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehz_fw)], ebd.Sum(x => x.ehz_fw), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehz_a)], ebd.Sum(x => x.ehz_a), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehz_u)], ebd.Sum(x => x.ehz_u), col)); col++; colNames.Add("Energiebedarf \nWarmwasser \naufteilt"); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.eww_ol)], ebd.Sum(x => x.eww_ol), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.eww_gz)], ebd.Sum(x => x.eww_gz), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.eww_ho)], ebd.Sum(x => x.eww_ho), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.eww_el)], ebd.Sum(x => x.eww_el), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.eww_ko)], ebd.Sum(x => x.eww_ko), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.eww_wp)], ebd.Sum(x => x.eww_wp), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.eww_so)], ebd.Sum(x => x.eww_so), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.eww_fw)], ebd.Sum(x => x.eww_fw), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.eww_a)], ebd.Sum(x => x.eww_a), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.eww_u)], ebd.Sum(x => x.eww_u), col)); col++; colNames.Add("Energiebedarf \nGesamt\nnach Haustyp"); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_1010)], ebd.Sum(x => x.ehzww_1010), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_1021)], ebd.Sum(x => x.ehzww_1021), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_1025)], ebd.Sum(x => x.ehzww_1025), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_1030)], ebd.Sum(x => x.ehzww_1030), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_1040)], ebd.Sum(x => x.ehzww_1040), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_1060)], ebd.Sum(x => x.ehzww_1060), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_1080)], ebd.Sum(x => x.ehzww_1080), col)); col++; colNames.Add("Energiebedarf \nGesamt\nnach Baujahr"); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_8011)], ebd.Sum(x => x.ehzww_8011), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_8012)], ebd.Sum(x => x.ehzww_8012), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_8013)], ebd.Sum(x => x.ehzww_8013), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_8014)], ebd.Sum(x => x.ehzww_8014), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_8015)], ebd.Sum(x => x.ehzww_8015), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_8016)], ebd.Sum(x => x.ehzww_8016), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_8017)], ebd.Sum(x => x.ehzww_8017), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_8018)], ebd.Sum(x => x.ehzww_8018), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_8019)], ebd.Sum(x => x.ehzww_8019), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_8020)], ebd.Sum(x => x.ehzww_8020), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_8021)], ebd.Sum(x => x.ehzww_8021), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_8022)], ebd.Sum(x => x.ehzww_8022), col)); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio(dict[nameof(RasterDatenEnergiebedarfKanton.ehzww_8023)], ebd.Sum(x => x.ehzww_8023), col)); col++; colNames.Add("Energiebedarf \nGesamt\nRichtplan 2012"); bses.Add(BarSeriesEntry.MakeBarSeriesEntryDividedBy1Mio("Richtplan 2012 Total", 111131000, col)); pm.MakeBarChart(Path.Combine(path, "WärmeBedarfe" + ".png"), "Wärme", bses, colNames); pm.Finish(); } }