My code is as follows. I am using MatPlotLib to create an image, but the image is not rendering in the png. Someone, please fix my code so it will render.
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
#Sets the size of the chart
from pylab import rcParams
rcParams['figure.figsize'] = 7, 2
#AverageAnnualMedicalCostPerEE = "{}".format('jpg')
#print AverageAnnualMedicalCostPerEE
#Creates the dataframe
raw_data = {'plan_type': ['Total Annual Cost, Single', 'Total Annual Cost,
Family'],
'Your Plan': [6000, 3000],
'Benchmark': [4800, 1600],
'Region': [1800, 2800],
'Industry': [4900, 1300],
'Size': [5700, 1600],
}
data = ['Your Plan','Benchmark','Region','Industry','Size']
df = pd.DataFrame(raw_data,
columns = ['plan_type','Your Plan', 'Benchmark', 'Region',
'Industry', 'Size'])
#Plots the bars, adding desired colors
ax = df.plot.bar(rot=0, color=['#ffc000',"#305496", '#8ea9db', '#b4c6e7',
'#D9E1F2'],
width = 0.8 )
#Adds data labels to top of bars
for p in ax.patches[0:]:
h = p.get_height()
x = p.get_x()+p.get_width()/2.
if h != 0:
ax.annotate( '$' + "%g" % p.get_height(), xy=(x,h), xytext=(0,4),
rotation=0,
textcoords="offset points", ha="center", va="bottom",
fontsize='small', color='grey')
# Remove Bordering Frame
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['left'].set_visible(False)
ax.spines['bottom'].set_color('#B4C7E7')
ax.get_xaxis().tick_bottom()
ax.get_yaxis().tick_left()
# Remove Y-axis Labels
ax.axes.get_yaxis().set_visible(False)
#Sets x-axis limits and margins
ax.set_xlim(-0.5, +1.5)
ax.margins(y=0)
# Set Y-Axis Ticks to the Right
ax.yaxis.tick_right()
# Set the Y Axis Limits
ax.set_ylim(0,(df[['Your
Plan','Benchmark','Region','Industry','Size']].max(axis=1).max(axis=0)*1.5))
ax.margins(y=0)
#Adds legend to the top of the page
ax.legend(ncol=len(df.columns), loc="Lower Left", bbox_to_anchor=
(0,1.02,1,0.08),
borderaxespad=0, mode="expand",frameon=False, fontsize='small')
#Add labels to the x-axis
ax.set_xticklabels(df["plan_type"], fontsize='small')
ax.xaxis.set_ticks_position('none')
#shows the plot and prints it to
plt.show()
plt.savefig('AverageAnnualMedicalCostPerEE.png')
So, again I am looking to get a png I can then later import into a table and add to my story. The latter is easy, except the image rendering issue. Please let me know if you can solve this, probably a quick fix.
I think you should change the order of saving the image and showing it, since the figure will be reset after the plt.show()
. So you should be able to fix this by either removing the plt.show()
command from your code or switch plt.savefig(...)
and plt.show()
.