Как преобразовать переменную в график с процентами с помощью matplot lib

#python #matplotlib

#python #matplotlib

Вопрос:

У меня есть список словаря ниже

 [{'id': 0, 'Title': 'The Land Girls', 'US Gross': 146083, 'Worldwide Gross': 146083, 'US DVD Sales': 'null', 'Production Budget': 8000000, 'Release Date': 'Jun 12 1998', 'MPAA Rating': 'R', 'Running Time min': 'null', 'Distributor': 'Gramercy', 'Source': 'null', 'Major Genre': 'null', 'Creative Type': 'null', 'Director': 'null', 'Rotten Tomatoes Rating': 'null', 'IMDB Rating': 6.1, 'IMDB Votes': 1071},
 {'id': 1, 'Title': 'First Love, Last Rites', 'US Gross': 10876, 'Worldwide Gross': 10876, 'US DVD Sales': 'null', 'Production Budget': 300000, 'Release Date': 'Aug 07 1998', 'MPAA Rating': 'R', 'Running Time min': 'null', 'Distributor': 'Strand', 'Source': 'null', 'Major Genre': 'Drama', 'Creative Type': 'null', 'Director': 'null', 'Rotten Tomatoes Rating': 'null', 'IMDB Rating': 6.9, 'IMDB Votes': 207},
 {'id': 2, 'Title': 'I Married a Strange Person', 'US Gross': 203134, 'Worldwide Gross': 203134, 'US DVD Sales': 'null', 'Production Budget': 250000, 'Release Date': 'Aug 28 1998', 'MPAA Rating': 'null', 'Running Time min': 'null', 'Distributor': 'Lionsgate', 'Source': 'null', 'Major Genre': 'Comedy', 'Creative Type': 'null', 'Director': 'null', 'Rotten Tomatoes Rating': 'null', 'IMDB Rating': 6.8, 'IMDB Votes': 865},
 {'id': 3, 'Title': "Let's Talk About Sex", 'US Gross': 373615, 'Worldwide Gross': 373615, 'US DVD Sales': 'null', 'Production Budget': 300000, 'Release Date': 'Sep 11 1998', 'MPAA Rating': 'null', 'Running Time min': 'null', 'Distributor': 'Fine Line', 'Source': 'null', 'Major Genre': 'Comedy', 'Creative Type': 'null', 'Director': 'null', 'Rotten Tomatoes Rating': 13, 'IMDB Rating': 'null', 'IMDB Votes': 'null'},
 {'id': 4, 'Title': 'Slam', 'US Gross': 1009819, 'Worldwide Gross': 1087521, 'US DVD Sales': 'null', 'Production Budget': 1000000, 'Release Date': 'Oct 09 1998', 'MPAA Rating': 'R', 'Running Time min': 'null', 'Distributor': 'Trimark', 'Source': 'Original Screenplay', 'Major Genre': 'Drama', 'Creative Type': 'Contemporary Fiction', 'Director': 'null', 'Rotten Tomatoes Rating': 62, 'IMDB Rating': 3.4, 'IMDB Votes': 165},
 {'id': 5, 'Title': 'Mississippi Mermaid', 'US Gross': 24551, 'Worldwide Gross': 2624551, 'US DVD Sales': 'null', 'Production Budget': 1600000, 'Release Date': 'Jan 15 1999', 'MPAA Rating': 'null', 'Running Time min': 'null', 'Distributor': 'MGM', 'Source': 'null', 'Major Genre': 'null', 'Creative Type': 'null', 'Director': 'null', 'Rotten Tomatoes Rating': 'null', 'IMDB Rating': 'null', 'IMDB Votes': 'null'},
 {'id': 6, 'Title': 'Following', 'US Gross': 44705, 'Worldwide Gross': 44705, 'US DVD Sales': 'null', 'Production Budget': 6000, 'Release Date': 'Apr 04 1999', 'MPAA Rating': 'R', 'Running Time min': 'null', 'Distributor': 'Zeitgeist', 'Source': 'null', 'Major Genre': 'null', 'Creative Type': 'null', 'Director': 'Christopher Nolan', 'Rotten Tomatoes Rating': 'null', 'IMDB Rating': 7.7, 'IMDB Votes': 15133},
 {'id': 7, 'Title': 'Foolish', 'US Gross': 6026908, 'Worldwide Gross': 6026908, 'US DVD Sales': 'null', 'Production Budget': 1600000, 'Release Date': 'Apr 09 1999', 'MPAA Rating': 'R', 'Running Time min': 'null', 'Distributor': 'Artisan', 'Source': 'Original Screenplay', 'Major Genre': 'Comedy', 'Creative Type': 'Contemporary Fiction', 'Director': 'null', 'Rotten Tomatoes Rating': 'null', 'IMDB Rating': 3.8, 'IMDB Votes': 353},
 {'id': 8, 'Title': 'Pirates', 'US Gross': 1641825, 'Worldwide Gross': 6341825, 'US DVD Sales': 'null', 'Production Budget': 40000000, 'Release Date': 'Jul 01 1986', 'MPAA Rating': 'R', 'Running Time min': 'null', 'Distributor': 'null', 'Source': 'null', 'Major Genre': 'null', 'Creative Type': 'null', 'Director': 'Roman Polanski', 'Rotten Tomatoes Rating': 25, 'IMDB Rating': 5.8, 'IMDB Votes': 3275},
 {'id': 9, 'Title': 'Duel in the Sun', 'US Gross': 20400000, 'Worldwide Gross': 20400000, 'US DVD Sales': 'null', 'Production Budget': 6000000, 'Release Date': 'Dec 31 2046', 'MPAA Rating': 'null', 'Running Time min': 'null', 'Distributor': 'null', 'Source': 'null', 'Major Genre': 'null', 'Creative Type': 'null', 'Director': 'null', 'Rotten Tomatoes Rating': 86, 'IMDB Rating': 7, 'IMDB Votes': 2906},
 {'id': 10, 'Title': 'Tom Jones', 'US Gross': 37600000, 'Worldwide Gross': 37600000, 'US DVD Sales': 'null', 'Production Budget': 1000000, 'Release Date': 'Oct 07 1963', 'MPAA Rating': 'null', 'Running Time min': 'null', 'Distributor': 'null', 'Source': 'null', 'Major Genre': 'null', 'Creative Type': 'null', 'Director': 'null', 'Rotten Tomatoes Rating': 81, 'IMDB Rating': 7, 'IMDB Votes': 4035},
 {'id': 11, 'Title': 'Oliver!', 'US Gross': 37402877, 'Worldwide Gross': 37402877, 'US DVD Sales': 'null', 'Production Budget': 10000000, 'Release Date': 'Dec 11 1968', 'MPAA Rating': 'null', 'Running Time min': 'null', 'Distributor': 'Sony Pictures', 'Source': 'null', 'Major Genre': 'Musical', 'Creative Type': 'null', 'Director': 'null', 'Rotten Tomatoes Rating': 84, 'IMDB Rating': 7.5, 'IMDB Votes': 9111},
 {'id': 12, 'Title': 'To Kill A Mockingbird', 'US Gross': 13129846, 'Worldwide Gross': 13129846, 'US DVD Sales': 'null', 'Production Budget': 2000000, 'Release Date': 'Dec 25 1962', 'MPAA Rating': 'null', 'Running Time min': 'null', 'Distributor': 'Universal', 'Source': 'null', 'Major Genre': 'null', 'Creative Type': 'null', 'Director': 'null', 'Rotten Tomatoes Rating': 97, 'IMDB Rating': 8.4, 'IMDB Votes': 82786},
 {'id': 13, 'Title': 'Tora, Tora, Tora', 'US Gross': 29548291, 'Worldwide Gross': 29548291, 'US DVD Sales': 'null', 'Production Budget': 25000000, 'Release Date': 'Sep 23 1970', 'MPAA Rating': 'null', 'Running Time min': 'null', 'Distributor': 'null', 'Source': 'null', 'Major Genre': 'null', 'Creative Type': 'null', 'Director': 'Richard Fleischer', 'Rotten Tomatoes Rating': 'null', 'IMDB Rating': 'null', 'IMDB Votes': 'null'},
 {'id': 14, 'Title': 'Hollywood Shuffle', 'US Gross': 5228617, 'Worldwide Gross': 5228617, 'US DVD Sales': 'null', 'Production Budget': 100000, 'Release Date': 'Mar 01 1987', 'MPAA Rating': 'null', 'Running Time min': 'null', 'Distributor': 'null', 'Source': 'null', 'Major Genre': 'null', 'Creative Type': 'null', 'Director': 'null', 'Rotten Tomatoes Rating': 87, 'IMDB Rating': 6.8, 'IMDB Votes': 1532}]
 

Выше приведен список фильмов в формате словаря

Мне нужно преобразовать в круговую диаграмму, показывающую, сколько Major Genre с помощью matplotlib

Комментарии:

1. К вашему сведению, это list из dictionaries

2. @kpie я изменил

Ответ №1:

Вот пример, в котором используется коллекция.Счетчик. Предполагая, что ваш список словарей назначен переменным movies .

 import matplotlib.pyplot as plt
from collections import Counter
# create a new Counter
c = Counter()
# loop through movies and increment the genre count
for movie in movies:
    c[movie['Major Genre']]  =1
# create 2 vertical subplots
fig, axs = plt.subplots(2, 1)
# explicitly separate info from Counter.
labels = c.keys()
sizes = c.values()
axs[0].pie(sizes, labels=labels, autopct='%1.1f%%')
# Remove entries with an unspecified genre
del c['null']
labels = c.keys()
sizes = c.values()
axs[1].pie(sizes, labels=labels, autopct='%1.1f%%')
plt.show()
 

Это отобразит:

круговая диаграмма matplotlib

Вы могли бы более кратко написать что-то вроде axs[0].pie(c.values(), labels=c.keys(), autopct='%1.1f%%')

Ответ №2:

Я надеюсь, что этот встречный пример поможет.

 class counter:
    def __init__(self):
        self.counts = {}
    def count(self,thing):
        try:
            self.counts[thing]  = 1
        except:
            self.counts[thing] = 1


data = [1,2,3,5,4,3,56,6,1,23,151,51,1,1,1,1,2,3,4,2]
c = counter()

[c.count(k) for k in data]
print(c.counts)
 

Комментарии:

1. Ваши None сломают его … Обращайтесь так, как считаете нужным.

2. Или использовать collections.Counter

3. Да, это совсем неплохая идея.