From cc3c13727ed1021397401edc063fa465a86c2b6b Mon Sep 17 00:00:00 2001 From: Maximilian Stiefel Date: Sat, 6 Nov 2021 12:40:18 +0000 Subject: [PATCH] First draft of script --- ecar.json | 28 ++++++++++++++++++++++++++++ ecar.py | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 ecar.json create mode 100644 ecar.py diff --git a/ecar.json b/ecar.json new file mode 100644 index 0000000..bdc6d3d --- /dev/null +++ b/ecar.json @@ -0,0 +1,28 @@ +{ + "kwh_price_home": 0.2, + "kwh_price_commercial": 0.5, + "petrol_litre_price": 1.75, + "kilometers_per_year": 20000.0, + "years": 3, + "ecar": { + "label": "Nissan Leaf", + "price": 7600, + "taxes": 0, + "insurance": 354, + "kwh_per_kilometer": 0.16, + "maintenance": 200, + "charging_behaviour": { + "percent_free_charges": 80, + "percent_home_charges": 10, + "percent_commercial_charges": 10 + } + }, + "ccar": { + "label": "Suzuki Grand Vitara", + "price": 7000, + "taxes": 350, + "insurance": 362, + "litre_per_kilometer": 0.08, + "maintenance": 1000 + } +} diff --git a/ecar.py b/ecar.py new file mode 100644 index 0000000..e557a50 --- /dev/null +++ b/ecar.py @@ -0,0 +1,44 @@ +import matplotlib.pyplot as plt +import numpy as np +import json + +with open("ecar.json", "r") as rf: + settings = json.load(rf) + +kilometer_price = np.array( [settings["ecar"]["kwh_per_kilometer"] * settings["kwh_price_home"], + settings["ccar"]["litre_per_kilometer"] * settings["petrol_litre_price"]]) +labels = [settings["ecar"]["label"], settings["ccar"]["label"]] +price = np.array([settings["ecar"]["price"], settings["ccar"]["price"]]) +taxes = np.array([settings["ecar"]["taxes"], settings["ccar"]["taxes"]]) +insurance = np.array([settings["ecar"]["insurance"], settings["ccar"]["insurance"]]) +kilometer_price_ecar = (settings["ecar"]["charging_behaviour"]["percent_home_charges"] * settings["kwh_price_home"] + + settings["ecar"]["charging_behaviour"]["percent_commercial_charges"] * settings["kwh_price_commercial"]) / 100.0 +driving = np.array([kilometer_price_ecar * settings["kilometers_per_year"], kilometer_price[1] * settings["kilometers_per_year"]]) +maintenance = np.array([settings["ecar"]["maintenance"], settings["ecar"]["maintenance"]]) +width = 0.3 + +fig, ax = plt.subplots() +ax.bar(labels, price, width, label = "Price", color = "gray") +currenty = price +y = 0 + +for i in range(settings["years"]): +#while currenty[0] > currenty[1]: + ax.bar(labels, taxes, width, bottom = currenty, label = "Taxes".format(y), color = "darkgreen") + currenty = currenty + taxes + ax.bar(labels, insurance, width, bottom = currenty, label = "Insurance".format(y), color = "royalblue") + currenty = currenty + insurance + ax.bar(labels, driving, width, bottom = currenty, label = "Driving".format(y), color = "midnightblue") + currenty = currenty + driving + ax.bar(labels, maintenance, width, bottom = currenty, label = "Maintenance".format(y), color = "lavender") + currenty = currenty + maintenance + y += 1 +ecar_top = currenty[0] +#ax.plot(np.linspace(-0.2, 1.2, 10), [ecar_top]*10, "--", color = "firebrick", label = "Break even") +ax.text(0.3, ecar_top * 0.95, "Break even: {} years, {} kilometers".format(y, y*settings["kilometers_per_year"])) +ax.set_ylabel("CHF") +ax.set_title("Comparision of economics electric vs. combustion car") +ax.legend(["Price", "Taxes", "Insurance", "Driving", "Maintenance"]) +ax.grid(axis = "y") +print("Break even after {} years and {} kilometers. {}, {}".format(y, y*settings["kilometers_per_year"], currenty[0], currenty[1])) +plt.show()