URI: 
       tplot.py - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
       tplot.py (1878B)
       ---
            1 import datetime
            2 from collections import defaultdict
            3 
            4 import matplotlib
            5 matplotlib.use('Qt5Agg')
            6 import matplotlib.pyplot as plt
            7 import matplotlib.dates as md
            8 
            9 from .i18n import _
           10 from .bitcoin import COIN
           11 
           12 
           13 class NothingToPlotException(Exception):
           14     def __str__(self):
           15         return _("Nothing to plot.")
           16 
           17 
           18 def plot_history(history):
           19     if len(history) == 0:
           20         raise NothingToPlotException()
           21     hist_in = defaultdict(int)
           22     hist_out = defaultdict(int)
           23     for item in history:
           24         if not item['confirmations']:
           25             continue
           26         if item['timestamp'] is None:
           27             continue
           28         value = item['value'].value/COIN
           29         date = item['date']
           30         datenum = int(md.date2num(datetime.date(date.year, date.month, 1)))
           31         if value > 0:
           32             hist_in[datenum] += value
           33         else:
           34             hist_out[datenum] -= value
           35 
           36     f, axarr = plt.subplots(2, sharex=True)
           37     plt.subplots_adjust(bottom=0.2)
           38     plt.xticks( rotation=25 )
           39     ax = plt.gca()
           40     plt.ylabel('BTC')
           41     plt.xlabel('Month')
           42     xfmt = md.DateFormatter('%Y-%m-%d')
           43     ax.xaxis.set_major_formatter(xfmt)
           44     axarr[0].set_title('Monthly Volume')
           45     xfmt = md.DateFormatter('%Y-%m')
           46     ax.xaxis.set_major_formatter(xfmt)
           47     width = 20
           48 
           49     r1 = None
           50     r2 = None
           51     dates_values = list(zip(*sorted(hist_in.items())))
           52     if dates_values and len(dates_values) == 2:
           53         dates, values = dates_values
           54         r1 = axarr[0].bar(dates, values, width, label='incoming')
           55         axarr[0].legend(loc='upper left')
           56     dates_values = list(zip(*sorted(hist_out.items())))
           57     if dates_values and len(dates_values) == 2:
           58         dates, values = dates_values
           59         r2 = axarr[1].bar(dates, values, width, color='r', label='outgoing')
           60         axarr[1].legend(loc='upper left')
           61     if r1 is None and r2 is None:
           62         raise NothingToPlotException()
           63     return plt