python: несоответствие формы при добавлении элемента в список - PullRequest
0 голосов
/ 05 января 2019

Я использую matplotlib для построения графика из словаря со строками и целыми числами, когда я строю график с его начальными значениями, он работает, но если я добавлю еще один ключ в словарь скажем, например,

ADD,example,example.com,20.0

выдает следующую ошибку, когда я снова строю график

"ValueError: shape mismatch: objects cannot be broadcast to a single shape"

но эта проблема возникает только с этим графиком, всякий раз, когда я использую круговую диаграмму, я могу добавить элементы в словарь и успешно построить график снова.

Может ли кто-то с большим опытом, чем я, показать мне, что я делаю неправильно?

вот соответствующая часть моего кода для этой проблемы Спасибо за ваше время.

import numpy as np
import matplotlib.pyplot as plt
empresas = { "Prodsmart": ["prodsmart.com",1.5],"James": ["james.finance",3.9],
            "Talkdesk": ["talkdesk.com",24.5], "Codacy": ["codacy.com",6.7],
            "Veniam": ["veniam.com", 26.9], "Sensei": ["sensei.tech",0.5]}


def add_empresa(info):
    empresas[info[0]] = [info[1],float(info[2])]

nlist = []
for x, k in empresas.items():
    nlist.append(k[1]) 

def graph1():
    group_data = nlist
    group_names = list(empresas.keys())
    fig, ax = plt.subplots()
    ax.barh(group_names, group_data)
    plt.show()
    return        

inputs = ""
while inputs != "EXIT":
    inputs = input("insert a command:" )
    inputzs = inputs.split(",")
    if inputzs[0] == "ADD" and len(inputzs) == 4:
        add_empresa(inputzs[1:])        
    elif inputzs[0] == "PLOT":
        graph1()

1 Ответ

0 голосов
/ 05 января 2019

nlist (и, следовательно, group_data) создается один раз перед циклом while. Поэтому, как только вы добавите новый элемент в словарь в цикле while, empresas будет иметь больше элементов, чем nlist, и, следовательно, group_names будет длиннее group-data в вашем вызове graph1.

Чтобы исправить это, извлеките значения для group_data в вызове graph1:

def graph1():
    gen = ((k, v[1]) for k, v in empresas.items())
    group_names, group_data = zip(*gen)
    fig, ax = plt.subplots()
    ax.barh(group_names, group_data)
    plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...