matplotlib рисует круговые, столбчатые и линейные диаграммы

Python
matplotlib рисует круговые, столбчатые и линейные диаграммы

Это 8-й день моего участия в ноябрьском испытании обновлений.Подробности о событии:Вызов последнего обновления 2021 г.

получить данные

Данные: название заголовка, автор-автор, оценка рейтинга, сколько людей видели статистику

Получить 10 лучших авторов

gradeDict, чтобы получить среднюю оценку для каждого автора, используйтеsorted()Функция получает первые 10 данных с самыми высокими значениями вgradeDict.

屏幕截图 2021-11-19 192206.png

df = pd.read_csv("clean_data.csv")
gradeDict = {}
countDict = {}
for author, grade in zip(df.author, df.grade):
    if author not in countDict.keys():
        countDict[author] = 1
        gradeDict[author] = grade
    else:
        countDict[author] = countDict[author] + 1
        gradeDict[author] = gradeDict[author] + grade
for key in gradeDict.keys():
    gradeDict[key] = gradeDict[key] / countDict[key]
gradeList = sorted(gradeDict.items(), key=lambda x: x[1], reverse=True)[0:10]
countList = sorted(countDict.items(), key=lambda x: x[1], reverse=True)[0:10]


labels = []
values = []
for i in countList:
    labels.append(i[0])
    values.append(i[1])

Вывод меток и значений

屏幕截图 2021-11-19 192609.png

Круговая диаграмма

взорвать указывает интервал между каждым сектором, значение по умолчанию равно 0

explode = [0.05]
for i in range(1, 10):
    explode.append(0.02)

Измените стиль китайского шрифта, который здесь установлен на шрифт SimHei, или его можно заменить другими шрифтами, иначе он будет искажен.

plt.rcParams['font.sans-serif'] = 'SimHei'

нарисовать круговую диаграмму,autopctУстановите процентный формат отображения каждого сектора на круговой диаграмме,%0.2f%%Два десятичных процента.pctdistanceУкажите шкалу положения autopct, значение по умолчанию 0,6, процентное расстояние от центра круга, чем меньше значение, тем ближе к центру круга,labeldistanceПоложение отрисовки метки метки относительно отношения радиуса, значение по умолчанию равно 1,1, если

plt.savefigСохраните картинку как картинку, но она должна быть размещена перед plt.show(), иначе сохранение будет пустым

plt.pie(values, labels=labels, explode=explode, autopct="%.2f%%", pctdistance=0.7)
plt.title("评分前十名发布的文章个数")
plt.savefig("饼图.png")
plt.show()

饼图.png

столбчатая диаграмма

plt.barнарисовать горизонтальную столбчатую диаграмму,plt.barhЧтобы нарисовать вертикальную столбчатую диаграмму, вы можете передатьcolorизменить цвет гистограммы или цвет каждого столбца; установить ширину гистограммы,bar()метод использованияwidth настраивать,barh()метод использованияheight настраивать

# plt.barh(range(len(labels)), values, tick_label=labels)
# plt.bar(range(len(labels)), values, tick_label=labels, color="#4CAF50")
plt.bar(range(len(labels)), values, tick_label=labels)

plt.xticksУстановите метку по оси x, по умолчанию там стоит, здесь измените угол метки на 45 градусов,plt.yticksВы можете изменить масштаб метки оси Y, чтобы сделать ее более красивой;plt.textОтображение конкретных чисел на столбчатой ​​диаграмме

plt.xticks(range(len(labels)), labels, rotation=45)
plt.yticks([0, 2, 4, 6, 8, 10])
for x, y in zip(range(len(labels)), values):
    plt.text(x, y+0.1, "%d" % y, ha="center")
plt.title("评分前十名发布的文章个数")
plt.xlabel("作者")
plt.ylabel("文章数")
plt.show()

柱形图.png

линейный график

label=u'111'Данные легенды, чтобы добавитьplt.legend()для отображения; например'go-'это зеленая пунктирная сплошная линия

# 模拟数据
labels = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
values222 = [5, 7, 9, 7, 5, 3, 4, 8, 6, 3]
plt.plot(labels, values, 'go-', label=u'111')
plt.plot(labels, values222, 'b*-', label=u'222')
plt.xticks(labels)
for x, y in zip(range(len(labels)), values):
    plt.text(x, y+0.1, "%.2f" % y, ha="center")
plt.legend()  # 让图例生效
plt.show()

折线图.png

Резко остановись??? ускользнуть