简体   繁体   中英

Nested dictionary to line graph - Python

How can I get the following nested dictionary into a line graph using matplotlib?

Ideally on the x axis I have each poet's name and 4 lines on the graph, each for every key (average sentence length, number of sentences, longest, shortest).

poemsD = {'Maya Angelou': {'Average Sentence Lenght': 16.68,
  'Number of sentences': 40,
  'Longest': 45,
  'Shortest': 2},
 'Amanda Gorman': {'Average Sentence Lenght': 14.49,
  'Number of sentences': 49,
  'Longest': 38,
  'Shortest': 3},
 'Elizabeth Alexander': {'Average Sentence Lenght': 14.57,
  'Number of sentences': 23,
  'Longest': 40,
  'Shortest': 1},
 'Miller Williams': {'Average Sentence Lenght': 12.83,
  'Number of sentences': 24,
  'Longest': 39,
  'Shortest': 2},
 'Richard Blanco': {'Average Sentence Lenght': 34.53,
  'Number of sentences': 17,
  'Longest': 63,
  'Shortest': 1},
 'Robert Frost': {'Average Sentence Lenght': 30.25,
  'Number of sentences': 4,
  'Longest': 37,
  'Shortest': 25}}

You can to it by creating a Pandas dataframe and plotting it:

import pandas as pd
import matplotlib.pyplot as plt

poemsD = {'Maya Angelou': {'Average Sentence Lenght': 16.68, 'Number of sentences': 40, 'Longest': 45, 'Shortest': 2},
          'Amanda Gorman': {'Average Sentence Lenght': 14.49, 'Number of sentences': 49, 'Longest': 38, 'Shortest': 3},
          'Elizabeth Alexander': {'Average Sentence Lenght': 14.57, 'Number of sentences': 23, 'Longest': 40, 'Shortest': 1},
          'Miller Williams': {'Average Sentence Lenght': 12.83, 'Number of sentences': 24, 'Longest': 39, 'Shortest': 2},
          'Richard Blanco': {'Average Sentence Lenght': 34.53, 'Number of sentences': 17, 'Longest': 63, 'Shortest': 1},
          'Robert Frost': {'Average Sentence Lenght': 30.25, 'Number of sentences': 4, 'Longest': 37, 'Shortest': 25}}

df = pd.DataFrame(poemsD)
df2 = df.transpose()
df2.plot(figsize = (10,8))
plt.show()

在此处输入图像描述

A better visualization would be a bar graph. This is very easy to do by changing one line of the code:

df2.plot(figsize = (10,8), kind = 'bar')

在此处输入图像描述

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM