file reorganization with top-level module
This commit is contained in:
63
electrum/plot.py
Normal file
63
electrum/plot.py
Normal file
@@ -0,0 +1,63 @@
|
||||
import datetime
|
||||
from collections import defaultdict
|
||||
|
||||
import matplotlib
|
||||
matplotlib.use('Qt5Agg')
|
||||
import matplotlib.pyplot as plt
|
||||
import matplotlib.dates as md
|
||||
|
||||
from .i18n import _
|
||||
from .bitcoin import COIN
|
||||
|
||||
|
||||
class NothingToPlotException(Exception):
|
||||
def __str__(self):
|
||||
return _("Nothing to plot.")
|
||||
|
||||
|
||||
def plot_history(history):
|
||||
if len(history) == 0:
|
||||
raise NothingToPlotException()
|
||||
hist_in = defaultdict(int)
|
||||
hist_out = defaultdict(int)
|
||||
for item in history:
|
||||
if not item['confirmations']:
|
||||
continue
|
||||
if item['timestamp'] is None:
|
||||
continue
|
||||
value = item['value'].value/COIN
|
||||
date = item['date']
|
||||
datenum = int(md.date2num(datetime.date(date.year, date.month, 1)))
|
||||
if value > 0:
|
||||
hist_in[datenum] += value
|
||||
else:
|
||||
hist_out[datenum] -= value
|
||||
|
||||
f, axarr = plt.subplots(2, sharex=True)
|
||||
plt.subplots_adjust(bottom=0.2)
|
||||
plt.xticks( rotation=25 )
|
||||
ax = plt.gca()
|
||||
plt.ylabel('BTC')
|
||||
plt.xlabel('Month')
|
||||
xfmt = md.DateFormatter('%Y-%m-%d')
|
||||
ax.xaxis.set_major_formatter(xfmt)
|
||||
axarr[0].set_title('Monthly Volume')
|
||||
xfmt = md.DateFormatter('%Y-%m')
|
||||
ax.xaxis.set_major_formatter(xfmt)
|
||||
width = 20
|
||||
|
||||
r1 = None
|
||||
r2 = None
|
||||
dates_values = list(zip(*sorted(hist_in.items())))
|
||||
if dates_values and len(dates_values) == 2:
|
||||
dates, values = dates_values
|
||||
r1 = axarr[0].bar(dates, values, width, label='incoming')
|
||||
axarr[0].legend(loc='upper left')
|
||||
dates_values = list(zip(*sorted(hist_out.items())))
|
||||
if dates_values and len(dates_values) == 2:
|
||||
dates, values = dates_values
|
||||
r2 = axarr[1].bar(dates, values, width, color='r', label='outgoing')
|
||||
axarr[1].legend(loc='upper left')
|
||||
if r1 is None and r2 is None:
|
||||
raise NothingToPlotException()
|
||||
return plt
|
||||
Reference in New Issue
Block a user