我有一個包含用戶註冊的數據庫。對於每個用戶,我都有註冊日期。Matplotlib:繪製一段時間內的用戶總數
我想繪製該日期範圍內的用戶總數作爲階梯線圖,線下面的區域被填充。
我的第一個想法是爲了在可能的日期範圍內每天創建一個數值爲0的Numpy數組,然後遍歷所有日期並增加相應的數組項。這可以使用numpy.cumsum(y)
進行繪圖。
from django.contrib.auth import get_user_model
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.dates import date2num
# Get user join dates
User = get_user_model()
datetimes = User.objects.values_list('date_joined', flat=True) \
.order_by('date_joined')
dates = map(lambda d: d.date(), datetimes) # This is now a list of date objects
# Get some auxilliary values
min_date = date2num(dates[0])
max_date = date2num(dates[-1])
days = max_date - min_date + 1
# Initialize X and Y axes
x = np.arange(min_date, max_date + 1)
y = np.zeros(days)
# Iterate over dates, increase registration array
for date in dates:
index = int(date2num(date) - min_date)
y[index] += 1
# Plot
plt.plot(x, np.cumsum(y), drawstyle='steps-post')
plt.show()
結果:
我的問題關於這一點:
- 我懷疑還有一個更簡單的方法來實現我做什麼,而不是手動填充x和y軸。有沒有更簡單的方法,如果是的話,它是如何工作的?
- 如何用純色填充線條下面的區域?
- 如何獲取日期而不是x軸上的數字?
matplotlib將針對'datetime'對象進行繪圖。 '情節(日期,np.cumsum(y))'應該'正常工作' – tacaswell