You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.7 KiB
54 lines
1.7 KiB
from PyQt5.QtGui import * |
|
from electrum.i18n import _ |
|
|
|
|
|
import datetime |
|
from collections import defaultdict |
|
from electrum.bitcoin import COIN |
|
|
|
import matplotlib |
|
matplotlib.use('Qt5Agg') |
|
import matplotlib.pyplot as plt |
|
import matplotlib.dates as md |
|
from matplotlib.patches import Ellipse |
|
from matplotlib.offsetbox import AnchoredOffsetbox, TextArea, DrawingArea, HPacker |
|
|
|
|
|
def plot_history(wallet, history): |
|
hist_in = defaultdict(int) |
|
hist_out = defaultdict(int) |
|
for item in history: |
|
tx_hash, height, confirmations, timestamp, value, balance = item |
|
if not confirmations: |
|
continue |
|
if timestamp is None: |
|
continue |
|
value = value*1./COIN |
|
date = datetime.datetime.fromtimestamp(timestamp) |
|
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 |
|
dates, values = zip(*sorted(hist_in.items())) |
|
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') |
|
return plt
|
|
|