Skip to content
Snippets Groups Projects

Make pie chart plotting ratio of delivered messages

+ 52
0
import matplotlib.pyplot as plt
import sys
import re
# Script that translates one-to-one message delivery ratio into a pie chart
# Takes as arguments
# (1) a delivery probability report
# (2) path to save the graphic to.
#
# The delivery probability report file should have a format like:
#
# Message stats for scenario realisticScenario
# sim_time: 50400.0000
# created: 2099
# delivered: 251
# delivery_prob: 0.1196
def getValueFromString(string):
Please register or sign in to reply
"""Return the value contained in the string as an int or float depending on whether its an integer number."""
match = re.match("(\D+)(\d+(\.\d+)?)", string)
if match is None:
print("Formatting problem")
exit(2)
if (match.group(3)):
#The number has decimal point
return float(match.group(2))
return int(match.group(2))
# Read delivery probability from file
with open(sys.argv[1]) as file_name:
analysis = file_name.readlines()
created = getValueFromString(analysis[2])
delivered = getValueFromString(analysis[3])
delivery_prob = getValueFromString(analysis[4])
values=[delivery_prob, 1-delivery_prob]
labels=["delivered:\n{p:.1f}% ({t})".format(p=delivery_prob*100, t=delivered),
"not delivered:\n{p:.1f}% ({t})".format(p=(1-delivery_prob)*100, t=(created-delivered))]
# Create pie chart.
fig1, ax1 = plt.subplots()
ax1.pie(values, labels=labels, shadow=True, explode=(0.1, 0), labeldistance=0.3)
ax1.axis('equal') # Equal aspect ratio ensures that pie is drawn as a circle.
#Add total sum
plt.figtext(0.6, 0.05, 'Total created messages: %d' % created)
plt.title("Message delivery ratio for one-to-one messages")
# Save to file
plt.savefig(sys.argv[2])
\ No newline at end of file
Loading