move plot plugin to lib; plot histograms
This commit is contained in:
parent
375885deb3
commit
dbf0a6f7a5
|
@ -402,7 +402,11 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError):
|
||||||
self.import_privkey_menu = self.private_keys_menu.addAction(_("&Import"), self.do_import_privkey)
|
self.import_privkey_menu = self.private_keys_menu.addAction(_("&Import"), self.do_import_privkey)
|
||||||
self.export_menu = self.private_keys_menu.addAction(_("&Export"), self.export_privkeys_dialog)
|
self.export_menu = self.private_keys_menu.addAction(_("&Export"), self.export_privkeys_dialog)
|
||||||
self.import_address_menu = wallet_menu.addAction(_("Import addresses"), self.import_addresses)
|
self.import_address_menu = wallet_menu.addAction(_("Import addresses"), self.import_addresses)
|
||||||
wallet_menu.addAction(_("&Export History"), self.export_history_dialog)
|
|
||||||
|
hist_menu = wallet_menu.addMenu(_("&History"))
|
||||||
|
hist_menu.addAction("Plot", self.plot_history_dialog)
|
||||||
|
hist_menu.addAction("Export", self.export_history_dialog)
|
||||||
|
|
||||||
wallet_menu.addAction(_("Find"), self.toggle_search).setShortcut(QKeySequence("Ctrl+F"))
|
wallet_menu.addAction(_("Find"), self.toggle_search).setShortcut(QKeySequence("Ctrl+F"))
|
||||||
wallet_menu.addAction(_("Addresses"), self.toggle_addresses_tab).setShortcut(QKeySequence("Ctrl+A"))
|
wallet_menu.addAction(_("Addresses"), self.toggle_addresses_tab).setShortcut(QKeySequence("Ctrl+A"))
|
||||||
|
|
||||||
|
@ -2100,6 +2104,17 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError):
|
||||||
return
|
return
|
||||||
self.show_message(_("Your wallet history has been successfully exported."))
|
self.show_message(_("Your wallet history has been successfully exported."))
|
||||||
|
|
||||||
|
def plot_history_dialog(self):
|
||||||
|
try:
|
||||||
|
from electrum.plot import plot_history
|
||||||
|
except:
|
||||||
|
return
|
||||||
|
wallet = self.wallet
|
||||||
|
history = wallet.get_history()
|
||||||
|
if len(history) > 0:
|
||||||
|
plt = plot_history(self.wallet, history)
|
||||||
|
plt.show()
|
||||||
|
|
||||||
|
|
||||||
def do_export_history(self, wallet, fileName, is_csv):
|
def do_export_history(self, wallet, fileName, is_csv):
|
||||||
history = wallet.get_history()
|
history = wallet.get_history()
|
||||||
|
|
|
@ -0,0 +1,58 @@
|
||||||
|
from PyQt4.QtGui import *
|
||||||
|
from electrum.i18n import _
|
||||||
|
|
||||||
|
|
||||||
|
import datetime
|
||||||
|
from collections import defaultdict
|
||||||
|
|
||||||
|
from electrum.util import format_satoshis
|
||||||
|
from electrum.bitcoin import COIN
|
||||||
|
|
||||||
|
import matplotlib
|
||||||
|
matplotlib.use('Qt4Agg')
|
||||||
|
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('Dates')
|
||||||
|
xfmt = md.DateFormatter('%Y-%m-%d')
|
||||||
|
ax.xaxis.set_major_formatter(xfmt)
|
||||||
|
|
||||||
|
axarr[0].set_title('History Transactions')
|
||||||
|
|
||||||
|
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 = zip(*sorted(hist_out.items()))
|
||||||
|
r2 = axarr[1].bar(dates, values, width, color='r', label='outgoing')
|
||||||
|
axarr[1].legend(loc='upper left')
|
||||||
|
# plt.annotate('unknown transaction = %d \n pending transactions = %d' %(unknown_trans,pending_trans),xy=(0.7,0.05),xycoords='axes fraction',size=12)
|
||||||
|
return plt
|
Loading…
Reference in New Issue