提供“ extendedEncoded”数据时结果失真

我一直在尝试使用Image-Charts Api代替现在不推荐使用的Google Image Charts Api。我一直在查看文档,并试图构建一个python脚本来创建表示过去24小时的加密(以太坊)定价的图形。

我已经能够从加密货币Api中获取数据。当试图“扩展编码”价格清单时出现问题,正如Image-Charts的文档所述,需要对大型数据集和较大的值进行处理。我必须在编码功能中做一些错误,因为我的图表总是像这样失真

http://img3.mukewang.com/60a36c370001a15807000500.jpg

它们提供了用于对这些值和数据集进行编码的javascript函数,我尝试将其转换为python。我怀疑在翻译函数时我搞砸了一些东西,但我不确定100%。


问题

有人可以在编码和/或绘制数据时发现我出了问题吗?


精简有效的python代码-输出图表网址

from datetime import datetime

import requests

import time

import math


EXTENDED_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-.'

EXTENDED_MAP_LENGTH = len(EXTENDED_MAP)


def extendedEncode(arrVals, maxVal):

    chartData = 'e:'

    for val in arrVals:

        numericVal = int(float(val))

        scaledVal = int(math.floor(EXTENDED_MAP_LENGTH * EXTENDED_MAP_LENGTH * numericVal / maxVal))

        if scaledVal > (EXTENDED_MAP_LENGTH * EXTENDED_MAP_LENGTH - 1):

            chartData += '..'

        elif scaledVal < 0:

            chartData += '__'

        else:

            quotient = int(math.floor(scaledVal / EXTENDED_MAP_LENGTH))

            remainder = int(scaledVal - EXTENDED_MAP_LENGTH * quotient)

            chartData += EXTENDED_MAP[quotient] + EXTENDED_MAP[remainder]

    return chartData


ts = time.time()

utc_offset = int((datetime.fromtimestamp(ts) - datetime.utcfromtimestamp(ts)).total_seconds())

cryptocompare = 'https://min-api.cryptocompare.com/data/histohour?fsym=ETH&tsym=USD&limit=24'

chartbase= 'https://image-charts.com/chart?cht=lc&chs=700x500&chxt=x,y'


resp = requests.get(cryptocompare).json()['Data']

print '{0} data points'.format(len(resp))


lvals = [dp['close'] for dp in resp]

labels = 'chxl=0:|{0}'.format('|'.join([datetime.utcfromtimestamp(dp['time']+utc_offset).strftime('%I%p') 

                                        for dp in resp]))

values = 'chd={0}'.format(extendedEncode(lvals, max(lvals)))

print '&'.join([chartbase, labels, values])


眼眸繁星
浏览 132回答 1
1回答

波斯汪

图片图表模仿了Google图片图表自己的实现,因此:缩放数据值以适合该编码的整个范围由于您使用的是扩展编码,e:因此它将在0到4095之间缩放数据集。好消息是,您可以使用很棒的文本格式 a:参数?。它具有浮点数,没有上下限值的限制(与Google Image Charts 0-61、0-100或0-4095的限制不同),自动缩放(不需要chds = a)。任何小于零或大于零的值都是有效的,不再有截断。这是最容易使用,手工读写的方式。用法:chd=a:30010,-30000.1,50000.5,80000.10,20000
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python