This is an attempt to commit the changes made to Electrum-BTC to morph it into FLO, on top of the latest Electrum-BTC codebase at the time of writing. The code has become messy pulling upstream changes and its become difficult to debug issues
64 lines
1.8 KiB
Python
64 lines
1.8 KiB
Python
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
|