import numpy as np
import matplotlib.pyplot as plt
# Rango de precios
P = np.linspace(0, 100, 300)
# Funciones de demanda y oferta iniciales
D_initial = 200 - P
O = 3 * P - 40
# Funciones de demanda con nueva renta
D_new = 180 - P
# Gráfico del equilibrio inicial
plt.figure(figsize=(10, 6))
plt.plot(P, D_initial, label='Demanda Inicial (D)', color='red')
plt.plot(P, O, label='Oferta (O)', color='blue')
# Añadimos líneas de equilibrio inicial
plt.axvline(x=60, color='gray', linestyle='--')
plt.axhline(y=140, color='gray', linestyle='--')
# Gráfico del nuevo equilibrio
plt.plot(P, D_new, label='Nueva Demanda (D)', color='orange')
# Añadimos líneas de nuevo equilibrio
plt.axvline(x=55, color='green', linestyle='--')
plt.axhline(y=125, color='green', linestyle='--')
# Añadimos etiquetas y leyenda
plt.title('Equilibrios de Mercado')
plt.xlabel('Precio (P)')
plt.ylabel('Cantidad')
plt.legend()
plt.grid(True)
plt.xlim(0, 100)
plt.ylim(0, 200)
plt.show()
aW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKCiMgUmFuZ28gZGUgcHJlY2lvcwpQID0gbnAubGluc3BhY2UoMCwgMTAwLCAzMDApCgojIEZ1bmNpb25lcyBkZSBkZW1hbmRhIHkgb2ZlcnRhIGluaWNpYWxlcwpEX2luaXRpYWwgPSAyMDAgLSBQCk8gPSAzICogUCAtIDQwCgojIEZ1bmNpb25lcyBkZSBkZW1hbmRhIGNvbiBudWV2YSByZW50YQpEX25ldyA9IDE4MCAtIFAKCiMgR3LDoWZpY28gZGVsIGVxdWlsaWJyaW8gaW5pY2lhbApwbHQuZmlndXJlKGZpZ3NpemU9KDEwLCA2KSkKcGx0LnBsb3QoUCwgRF9pbml0aWFsLCBsYWJlbD0nRGVtYW5kYSBJbmljaWFsIChEKScsIGNvbG9yPSdyZWQnKQpwbHQucGxvdChQLCBPLCBsYWJlbD0nT2ZlcnRhIChPKScsIGNvbG9yPSdibHVlJykKCiMgQcOxYWRpbW9zIGzDrW5lYXMgZGUgZXF1aWxpYnJpbyBpbmljaWFsCnBsdC5heHZsaW5lKHg9NjAsIGNvbG9yPSdncmF5JywgbGluZXN0eWxlPSctLScpCnBsdC5heGhsaW5lKHk9MTQwLCBjb2xvcj0nZ3JheScsIGxpbmVzdHlsZT0nLS0nKQoKIyBHcsOhZmljbyBkZWwgbnVldm8gZXF1aWxpYnJpbwpwbHQucGxvdChQLCBEX25ldywgbGFiZWw9J051ZXZhIERlbWFuZGEgKEQpJywgY29sb3I9J29yYW5nZScpCgojIEHDsWFkaW1vcyBsw61uZWFzIGRlIG51ZXZvIGVxdWlsaWJyaW8KcGx0LmF4dmxpbmUoeD01NSwgY29sb3I9J2dyZWVuJywgbGluZXN0eWxlPSctLScpCnBsdC5heGhsaW5lKHk9MTI1LCBjb2xvcj0nZ3JlZW4nLCBsaW5lc3R5bGU9Jy0tJykKCiMgQcOxYWRpbW9zIGV0aXF1ZXRhcyB5IGxleWVuZGEKcGx0LnRpdGxlKCdFcXVpbGlicmlvcyBkZSBNZXJjYWRvJykKcGx0LnhsYWJlbCgnUHJlY2lvIChQKScpCnBsdC55bGFiZWwoJ0NhbnRpZGFkJykKcGx0LmxlZ2VuZCgpCnBsdC5ncmlkKFRydWUpCnBsdC54bGltKDAsIDEwMCkKcGx0LnlsaW0oMCwgMjAwKQpwbHQuc2hvdygp