用python畫價格—需求曲線圖
阿新 • • 發佈:2019-02-12
今天小老婆給我抱怨說複習得很累,寫了特別多的東西。突然跟我說她有點想用Word寫筆記,但是她不會畫圖(其實會畫也比手寫花時間)。然後我讓她給我發了一下她畫的圖(微觀經濟學的圖)就是這樣的
然後我感覺以我水平應該可以用python畫一下這個圖。
說幹就幹。
import matplotlib.pyplot as plt
import numpy as np
from pylab import *
from scipy import interpolate
#一個小函式
def demand_curve(x, a, c):
return 5*(x-a)**(2)+c
#設定編碼,讓中文可以在圖上顯示
mpl.rcParams['font.sans-serif'] = ['SimHei']
#開啟一個視窗,num設定子圖數量,figsize設定視窗大小,dpi設定解析度
fig = plt.figure(num=1, figsize=(15, 8),dpi=80)
plt.title("送給小老婆", {"size":24})
#這是和L1相切的無差異曲線
x = np.arange(0, 0.2, 0.01)
y = demand_curve(x, 0.3, 0.6)
plt.plot(x, y, linestyle="--")
#這是和L2相切的無差異曲線
x = np.arange(0.5,0.7 ,0.01)
y = demand_curve(x, 0.7, 0.35)
plt.plot(x, y, linestyle="--")
#這是和L3相切的無差異曲線
x = np.arange(1.1,1.3,0.01)
y = demand_curve(x, 1.25, 0.3875)
plt.plot(x, y, linestyle="--")
#這是三條切線
plt.plot([0,0.5],[1,0], label="L1", linestyle="-")
plt.plot([0,1],[1,0], label="L2", linestyle="-")
plt.plot([0,2],[1,0], label="L3" , linestyle="-")
#這是三條無差異曲線和切線的切點以及一個額外點表示價格-消費曲線,這裡我用線性插值的方式把價格-消費曲線補全
x = np.array([0.1, 0.6, 1.2, 1.5])
y = np.array([0.8, 0.4, 0.4, 0.5])
xnew = np.arange(0.1,1.5,0.01)
func = interpolate.interp1d(x, y, kind='quadratic')
ynew = func(xnew)
plt.plot(xnew,ynew,label="價格-消費曲線",linestyle="-.")
#這是三個切點
plt.plot(0.1, 0.8, 'rs', 0.6, 0.4, 'bs', 1.2, 0.4, 'ys')
#這些是圖例以及座標軸顯示範圍
plt.legend(["U1", "U2", "U3", "L1", "L2", "L3","價格-消費曲線", "A", "B", "C"], loc=0, ncol=2, prop={"size":20})
plt.xlim(0,2.2)
plt.ylim(0,1.2)
plt.xlabel("食物(單位/月)",{"size":20})
plt.ylabel("衣服(單位/月)",{"size":20})
#讓座標軸刻度隱身
plt.xticks([])
plt.yticks([])
#顯示繪圖結果
plt.show()
最後就是跑一下,得到的圖是這樣的
看上去還不錯,給小老婆發一下她也說不錯。美滋滋