Si yo tuviera un diccionario de las palabras y su frecuencia en una cadena, por ejemplo:

{'hello': 3, 'how': 4, 'yes': 10, 'you': 11, 'days': 10, 'are': 20, 'ago': 11}

¿Cómo podría yo hacer un gráfico de barras fuera de este uso de matplotlib? He encontrado una pregunta anterior que tenía una aparentemente buena solución, pero no funcionó para mí (python: trazar una barra con matplotlib el uso de un diccionario)

Cuando ejecuto

plt.bar(range(len(d)), d.values(), align="center")
plt.xticks(range(len(d)), d.keys())

Me sale el error

TypeError: 'dict_keys' object does not support indexing

Yo no veo de donde yo soy la indización de mi diccionario. Podría ser debido a que en la pregunta que me dieron el código de los valores de x fueron también los números? No estoy seguro.

InformationsquelleAutor Howcan | 2014-02-21

2 Comentarios

  1. 9

    Tratar de envolver su d.keys() en un list() llamada:

    plt.bar(range(len(d)), d.values(), align="center")
    plt.xticks(range(len(d)), list(d.keys()))

    En Python3, dict.keys() no devuelve la lista de teclas directamente, sino que devuelve un generador que le dará las teclas de una en una a medida que se utiliza.

    • Funcionó a la perfección, gracias! Voy a mantener en mente que es como dict.las teclas() funciona.
    • Esto no es muy relevante para mi pregunta, pero ¿hay alguna manera de que pueda automatizar el espacio entre las barras de manera que todas las palabras que caben en el eje x (o tal vez hacer que las palabras de ir a una nueva línea?)
    • tal vez te gustaría dividir el largo de las palabras a varias líneas?
  2. 1

    Sobre » ¿hay alguna manera de que pueda automatizar el espacio entre las barras de manera que todas las palabras que caben en el eje x (o tal vez hacer que las palabras de ir a una nueva línea?)»

    Voy a dividir las palabras largas en varias líneas, por ejemplo, 'looooooooongWord' a 'looooo-\noooong-\nWord':

    In [300]: d={'hello': 3, 'how': 4, 'yes': 10, 'you': 11, 'days': 10, 'are': 20, 'ago': 11, 'looooooooongWord': 10}
         ...: plt.bar(range(len(d)), d.values(), align="center")
         ...: plt.xticks(range(len(d)), [split_word(i) for i in d.keys()])

    donde split_word se define como:

    In [595]: def split_word(s):
         ...:     n=6
         ...:     return '-\n'.join(s[i:i+n] for i in range(0, len(s), n))
         ...: split_word('looooooooongWord')
    Out[595]: 'looooo-\noooong-\nWord'

    Con el diccionario para hacer un matplotlib gráfica?

Dejar respuesta

Please enter your comment!
Please enter your name here