Home > Mobile >  Plotting a Lorenz curve from a given NumPy file
Plotting a Lorenz curve from a given NumPy file

Time:05-02

I am trying to write a program that reads data from a NumPy file, and then uses that data to plot a Lorenz curve, but I'm not exactly sure how to make the Lorenz curve. I tried using the cumsum() function, but I was not able to plot the Lorenz curve. Here's what I have so far:

import numpy as np
import matplotlib.pyplot as plt

data = np.load('pop2010.npy')
print(data)
plt.plot(data[0]) # display all the points
plt.show()

plot_x = [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
plot_y = [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]

plt.plot(plot_x, plot_y)

# set the labels for x, y, and title
plt.xlabel("Countries")
plt.ylabel("Wealth")
plt.title("Population-Lorenz Curve") 

# save plot as png file
plt.savefig('population-lorenz.png', dpi = 200)
plt.show()

Any advice would be appreciated, thanks!

CodePudding user response:

Adapting from https://zhiyzuo.github.io/Plot-Lorenz/, combining with your code.

Not quite clear from the context you provide, but I think data is what you want to plot as a Lorenz curve, and the plot_x, plot_y variables are your way of plotting the x-y line?

Note that I am using the object-oriented API instead of the pyplot API since this is what the docs now recommend--I think you'll find it's easier to work with in the long run. See https://matplotlib.org/stable/api/index.html#usage-patterns for detail.

import numpy as np
import matplotlib.pyplot as plt

data = np.load('pop2010.npy')

X_lorenz = data.cumsum() / data.sum()
X_lorenz = np.insert(X_lorenz, 0, 0)

fig, ax = plt.subplots(figsize=[6,6])
## scatter plot of Lorenz curve
ax.scatter(np.arange(X_lorenz.size)/(X_lorenz.size-1), X_lorenz, 
           marker='x', color='darkgreen', s=100)
## line plot of equality
ax.plot([0,1], [0,1], color='k')


# set the labels for x, y, and title
ax.set_xlabel("Countries")
ax.set_ylabel("Wealth")
ax.set_title("Population-Lorenz Curve") 

plt.show()

# save plot as png file
plt.savefig('population-lorenz.png', dpi = 200)

  • Related