Microeconomics
Python画埃奇沃思盒
求助:如何用计算机软件画埃奇沃思盒呢?
能附带Python编程最好。谢谢大佬指教。
遇到的问题:总是无法放在一个框内
题目:
我的代码
import matplotlib.pyplot as plt
import numpy as np
from pylab import mpl
plt.axis([0,40,0,80])
ax1 = plt.gca()
w1 = np.arange(0, 40, 0.1)
b1 = np.arange(0, 80, 0.1)
b1 = -w1 +20
ax1.plot(w1, b1, 'g-')
ax1.set_xlabel('X data')
ax1.set_ylabel('Y1=Morris_books,color=g')
plt.scatter(10,60)
ax2 = plt.subplots
ax2 = plt.gca()
ax2.xaxis.set_ticks_position('top')
ax2.invert_xaxis()
ax2.yaxis.set_ticks_position('right')
ax2.invert_yaxis()
w2 = np.arange(0, 40, 0.1)
b2 = np.arange(0, 80, 0.1)
b2 = 50/ (w2)
ax2.set_xlabel('X data')
ax2.set_ylabel('Y2=Philip_books,color=b,')
plt.scatter(10,60)
ax2.plot(w2, b2, 'b-')
plt.show()
效果图:
Now we use another way to figure it out!
Question 1
代码:
import matplotlib.pyplot as plt
import numpy as np
from sympy import *
import math
# 第一问:draw an edgeworth box
u1 = 210
b1 = np.arange(0,80,0.1)
w1 = 1/3*u1 - b1
plt.plot(b1,w1,'g-')
u2 = 1200
b2 = np.arange(0,80,0.1)
w2 = u2 / (2*b2)
b3 = 80 - b2##this
w3 = 40 - w2##this
plt.plot(b3,w3,'b-')
plt.scatter(60,10,c='r')
area = np.pi * 10**2 # 点面积
plt.scatter(0,0,c='g',marker='*',s=area)
plt.scatter(80,40,c='b',marker='*',s=area)
plt.xlim([0,80])
plt.ylim([0,40])
plt.xlabel('Book')
plt.ylabel('Wine')
plt.legend(['u1=210','u2=1200','endowment','Morris','Philip'],loc=0)
plt.title('Edgeworth_Box')
效果图:
Question 3
附加代码:
##第三问Contract curve
w4=np.arange(0,40,0.1)
b4=w4+40
plt.plot(b4,w4,'y-',label='contract_curve')
plt.legend(loc=0)
效果图:
Thank to Sue_Yuan to figure it out!