【问题标题】:Bokeh vbar arguments sequences not same length?Bokeh vbar 参数序列长度不同?
【发布时间】:2019-06-06 04:09:37
【问题描述】:

我有一个具有以下格式的 .csv,我将其加载到数据框中:

version, add, subtract, divide, multiply, mod, exp
1.0, 1, 2, 3, 4, 5, 6
1.1, 1, 2, 3, 4, 5, 6
1.2, 1, 2, 3, 4, 5, 6

我格式化数据,使其在字典中:

{
'version' : [1.0, 1.2, 1.3]
'add' : [1, 1, 1]
'subtract' : [2, 2, 2]
'divide' : [3, 3, 3]
'multiply' : [4, 4, 4]
'mod' : [5, 5, 5]
'exp' : [6, 6, 6]
}

我正在尝试根据example found here 将其绘制为散景 vbar 堆栈。其中 x 轴是随时间变化的版本号,每个条形图是每个版本的每个操作的总和的堆叠条形图。

这是我的代码:

operations_df = pd.read_csv('the_csv')

# grab versions from first column
op_versions = list(operations_df.iloc[:, 0])

# grab operations from header except version
operations = list(operations_df.columns.values[1:])

data = {'op_verions': op_versions}
# loop through columns appending to dict
for col in operations_df:
    data[col] = list(operations_df[col])

operations_plot = figure(x_range=op_versions, title="Operation Timings")
operations_plot.vbar_stack(operations, x='op_versions' color=Inferno[len(operations)], source=data,
                               legend=[value(x) for x in op_versions])

但我得到了错误:

广播的关键字参数序列的长度必须相同。得到长度:[3, 6]

我不明白不匹配的来源?每个操作和版本有 3 个值。我确信这是一个简单的解决方法,我盯着它看这么久是看不出来的。唯一有 6 个值的地方是操作数,我给出了正确的颜色数。

【问题讨论】:

    标签: python pandas bokeh


    【解决方案1】:

    3 来自

    legend=[value(x) for x in op_versions]
    

    vbar_stack 的工作方式是为堆栈中的每个“行”创建一个vbar 字形。每个堆栈中有 6 个操作,因此您需要提供 6 个图例名称,每行一个。也许您打算这样做:

    legend=[value(x) for x in operations]
    

    相反?如果我这样做(并修复代码中的一些其他问题,例如,x 的数据源中的列名是version 而不是op_versions,以及将字符串列表传递给x_range 以获取一个分类轴)然后它产生预期的输出:

    【讨论】:

    • 啊,是的,versionop_version 只是写这个问题的一个错字。不过谢谢!我搞定了!
    猜你喜欢
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 2014-04-06
    • 2019-08-10
    • 1970-01-01
    • 2019-01-01
    相关资源
    最近更新 更多