Plotting the Tax Model Part 2
Now let’s add in the taxes raised from both consumers and producers. For consumers, the taxes are a rectangle that has a bottom left corner at quantity=0, price=non-tax price and an upper right corner at quantity=quantity in equilibrium, price=consumer price. The rectangle for producer tax has a bottom left corner at quantity=0, price=producer price and a top right corner at quantity= quantity in equilibrium, price=non-tax price. These two rectangles have area equal to the respective taxes raised, and the two areas added together equals the total taxes raised. Total taxes raised also equals tax*quantity.
rect1 = patches.Rectangle((0,nonTaxPrice),equilibriumQ,equilibriumP1-nonTaxPrice,linewidth=1,facecolor="red")
rect2 = patches.Rectangle((0,nonTaxPrice),equilibriumQ,equilibriumP2-nonTaxPrice,linewidth=1,facecolor="yellow")
currentAxis.add_patch(rect1)
currentAxis.add_patch(rect2)
Let’s also add a legend to represent each of our new shapes. We feed the legend an array of the objects, followed by labels for each object
plt.legend([rect1,rect2,triangle1,triangle2], ["Consumer Tax","Producer Tax","Consumer Deadweight Loss","Producer Deadweight Loss"])
We should also add in some print statements to see what the taxes collected looks like.
print("Taxes raised from consumers equals "+str(equilibriumQ*(equilibriumP1-nonTaxPrice)))
print("Taxes raised from producers equals "+str(equilibriumQ*(nonTaxPrice-equilibriumP2)))
print("Total taxes raised equals "+str(equilibriumQ*tax))
The updated function….
import sympy
import matplotlib.pyplot as plt
import matplotlib.patches as patches
p = sympy.Symbol("p")
q = sympy.Symbol("q")
cTax = sympy.Symbol("cTax")
pTax = sympy.Symbol("pTax")
def EquilibriumTax(demandEquation,supplyEquation,priceStart,priceEnd,tax):
prices = []
demand = []
supply = []
for price in range(priceStart,priceEnd+1):
prices += [price]
demand += [demandEquation.subs(p,price)]
supply += [supplyEquation.subs(p,price)]
nonTaxPrice = sympy.solve(demandEquation-supplyEquation)[0]
nonTaxQ = demandEquation.subs(p,nonTaxPrice)
equilibriumQ = eqSolve(demandEquation,supplyEquation,tax)
equilibriumP1 = sympy.solve(demandEquation-equilibriumQ)[0]
equilibriumP2 = sympy.solve(supplyEquation-equilibriumQ)[0]
triangle1 = patches.Polygon([[nonTaxQ,nonTaxPrice],[equilibriumQ,nonTaxPrice],[equilibriumQ,equilibriumP1]],True,color="green")
triangle2 = patches.Polygon([[nonTaxQ,nonTaxPrice],[equilibriumQ,nonTaxPrice],[equilibriumQ,equilibriumP2]],True)
currentAxis = plt.gca()
currentAxis.add_patch(triangle1)
currentAxis.add_patch(triangle2)
rect1 = patches.Rectangle((0,nonTaxPrice),equilibriumQ,equilibriumP1-nonTaxPrice,linewidth=1,facecolor="red")
rect2 = patches.Rectangle((0,nonTaxPrice),equilibriumQ,equilibriumP2-nonTaxPrice,linewidth=1,facecolor="yellow")
currentAxis.add_patch(rect1)
currentAxis.add_patch(rect2)
plt.plot(demand,prices)
plt.plot(supply,prices)
plt.legend([rect1,rect2,triangle1,triangle2], ["Consumer Tax","Producer Tax","Consumer Deadweight Loss","Producer Deadweight Loss"])
plt.plot(equilibriumQ,equilibriumP1, 'ro')
plt.plot(equilibriumQ,equilibriumP2, 'ro')
plt.xlabel("Supply and Demand Quantity")
plt.ylabel("Price")
plt.show()
print("The equilibrium prices are "+str(equilibriumP1)+" and "+str(equilibriumP2)+" and equilibrium quantity is "+str(equilibriumQ)+".")
print("Taxes raised from consumers equals "+str(equilibriumQ*(equilibriumP1-nonTaxPrice)))
print("Taxes raised from producers equals "+str(equilibriumQ*(nonTaxPrice-equilibriumP2)))
print("Total taxes raised equals "+str(equilibriumQ*tax))
EquilibriumTax(10-p,p,0,10,4)