Javascript 提供时扭曲的结果;“扩展编码”;数据

Javascript 提供时扭曲的结果;“扩展编码”;数据,javascript,python,python-2.7,image-charts,Javascript,Python,Python 2.7,Image Charts,我一直在尝试使用作为现在不推荐使用的Google Image Charts Api的替代品。我一直在查看文档,并试图构建一个python脚本来创建表示过去24小时加密(以太坊)定价的图形 我已经能够从cryptocurrency Api中很好地获取数据。当试图对价格列表进行“扩展编码”时,问题就出现了,正如图像图表的文档所说,需要对大型数据集和大型值进行编码。我必须做一些错误的编码功能,因为我的图表总是这样扭曲出来 它们提供了对这些值和数据集进行编码的方法,我试图将其转换为python。我怀疑

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

我已经能够从cryptocurrency Api中很好地获取数据。当试图对价格列表进行“扩展编码”时,问题就出现了,正如图像图表的文档所说,需要对大型数据集和大型值进行编码。我必须做一些错误的编码功能,因为我的图表总是这样扭曲出来

它们提供了对这些值和数据集进行编码的方法,我试图将其转换为python。我怀疑在翻译函数时我弄错了什么,但我不是100%确定

问题 在编码和/或绘制数据时,有人能发现我哪里出错了吗

精简的工作python代码-输出图表url

JS-Bin
披露:我是图像图表的创始人

图像图表模仿谷歌图像图表自己的实现,因此:

缩放数据值以适应该编码的完整范围

由于您使用的是扩展编码
e:
,因此它将在0到4095之间缩放数据集

好消息是,您可以使用
a:
参数
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])