Skip to content

Commit

Permalink
ENH: disp more results to rocketpy.plots & rocketpy.prints
Browse files Browse the repository at this point in the history
See issue 730
  • Loading branch information
mohdsaid497566 committed Dec 14, 2024
1 parent 39d47cf commit 2e99e7f
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 13 deletions.
5 changes: 4 additions & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -325,5 +325,8 @@
"zlabel",
"zlim",
"zorder"
]
],
"files.associations": {
"plyconfig.json": "jsonc"
}
}
24 changes: 18 additions & 6 deletions rocketpy/plots/monte_carlo_plots.py
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,8 @@ def ellipses(

def all(self, keys=None):
"""
Plot the histograms of the Monte Carlo simulation results.
Plot the histograms with Boxplots & density plots
of the Monte Carlo simulation results.
Parameters
----------
Expand All @@ -175,8 +176,19 @@ def all(self, keys=None):
raise ValueError("The 'keys' argument must be a string, list, or tuple.")

for key in keys:
plt.figure()
plt.hist(self.monte_carlo.results[key])
plt.title(f"Histogram of {key}")
plt.ylabel("Number of Occurrences")
plt.show()
figure, plt = plt.subplots(3,1,sharex=True,gridspec_kw={'height_ratios':[1,3]})

plt[0].boxplot(self.monte_carlo.results[key],vert=False)
plt[0].ytick([])

plt[1].hist(self.monte_carlo.results[key])
plt[1].title(f"Histogram of {key}")
plt[1].ylabel("Number of Occurrences")

plt[2].hist(self.monte_carlo.results[key], density=True)
plt[2].title(f" Density {key}")
plt[2].ylabel("Probability Density")
kde = kde.gaussian_kde(self.monte_carlo.results[key])
x_array = np.linspace(min(self.monte_carlo.results[key]), max(self.monte_carlo.results[key]), 100)
plt[2].plot(x_array, kde(x_array), label='KDE')
plt.show()
16 changes: 10 additions & 6 deletions rocketpy/prints/monte_carlo_prints.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
import numpy as np

class _MonteCarloPrints:
"""Class to print the monte carlo analysis results."""

def __init__(self, monte_carlo):
self.monte_carlo = monte_carlo

def all(self):
"""Print the mean and standard deviation of each parameter in the results
dictionary or of the variables passed as argument.
"""Print the mean, standard deviation, and quantiles (0%, 2.5%, 50%, 97.5%, 100%)
of each parameter in the results dictionary or of the variables passed as argument.
Parameters
----------
Expand All @@ -19,12 +21,14 @@ def all(self):
"""
print("Monte Carlo Simulation by RocketPy")
print("Data Source: ", self.monte_carlo.filename)
print("Number of simulations: ", self.monte_carlo.num_of_loaded_sims)
print("Number of Simulations: ", self.monte_carlo.num_of_loaded_sims)
print("Results: \n")
print(f"{'Parameter':>25} {'Mean':>15} {'Std. Dev.':>15}")

print(f"{'Parameter':>25} {'Mean':>15} {'Std. Dev.':>15} {'0% Quant':>15} {'2.5% Quant.':>15} {'50% Quant.':>15} {'97.5% Quant.':>15} {'100% Quant.':>15}")
print("-" * 60)
for key, value in self.monte_carlo.processed_results.items():
try:
print(f"{key:>25} {value[0]:>15.3f} {value[1]:>15.3f}")
pt = self.monte_carlo.results[key]
print (f"{key:>25} {value[0]:>15.3f} {value[1]:>15.3f} {np.quantile(pt,0):>15.3f} {np.quantile(pt,0.025):>15.3f} {np.quantile(pt,0.5):>15.3f} {np.quantile(pt,0.975):>15.3f} {np.quantile(pt,1):>15.3f}")
except TypeError:
print(f"{key:>25} {str(value[0]):>15} {str(value[1]):>15}")
print (f"{key:>25} {str(value[0]):>15} {str(value[1]):>15} {str(np.quantile(pt,0)):>15} {str(np.quantile(pt,0.025)):>15} {str(np.quantile(pt,0.5)):>15} {str(np.quantile(pt,0.975)):>15} {str(np.quantile(pt,1)):>15}")

0 comments on commit 2e99e7f

Please sign in to comment.