#python #data-visualization #linegraph
#python #визуализация данных #linegraph
Вопрос:
моя групповая задача Я пытаюсь визуализировать с помощью линейного графика производство продуктов питания в африканских странах (45 из моих данных) за 10 лет. После использования функции groupby и unstack график получается хорошим, но не читаемым, а цвет, позволяющий различать каждую строку, оставляет желать лучшего. Из визуализации моего лектора он использовал Wolfram.
Как я могу достичь этого с помощью Python или есть лучшие альтернативы моему подходу?
Вот мой код
#To make the legend readable we reduce the font size
from matplotlib.font_manager import FontProperties
fontP = FontProperties()
fontP.set_size('small')
fig, ax = plt.subplots(figsize = (20,16))
df1.groupby(['Year','Country',]).sum().unstack().plot(ax = ax)
ax.set_yscale("log")
ax.set_ylim(1,300000)
plt.ylabel('Year')
plt.xlabel('Total Value')
plt.title('Food Production in Africa over the Years')
plt.legend(title='Countries', bbox_to_anchor=(1.05, 1), loc='upper left',
prop=fontP)
Визуализация моего лектора с использованием Wolfram
Моя попытка
Комментарии:
1. Добро пожаловать в Stackoverflow. Ваша попытка хороша. Вы должны опубликовать свой код python также выше, чтобы пользователи здесь могли давать предложения. Или вы спрашиваете о других графических альтернативах, которые можно использовать с этими данными?
Ответ №1:
Поскольку данные были недоступны, я псевдосоздал тенденции численности населения для каждой страны в Африке на основе самых последних данных, а затем использовал ax.text(x,y,country)
для создания данных. В ваших данных не так много места, поэтому я думаю, что это применимо. Этот пример взят из официальной ссылки.
import pandas as pd
import numpy as np
df = pd.read_csv('./africa_t.csv', sep=',')
import matplotlib.pyplot as plt
fig, ax = plt.subplots(1, 1, figsize=(12, 14))
# These are the colors that will be used in the plot
ax.set_prop_cycle(color=[
'#1f77b4', '#aec7e8', '#ff7f0e', '#ffbb78', '#2ca02c', '#98df8a',
'#d62728', '#ff9896', '#9467bd', '#c5b0d5', '#8c564b', '#c49c94',
'#e377c2', '#f7b6d2', '#7f7f7f', '#c7c7c7', '#bcbd22', '#dbdb8d',
'#17becf', '#9edae5'])
ax.spines['top'].set_visible(False)
ax.spines['bottom'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['left'].set_visible(False)
ax.get_xaxis().tick_bottom()
ax.get_yaxis().tick_left()
fig.subplots_adjust(left=.06, right=.75, bottom=.02, top=.94)
ax.set_xticks(range(2011, 2020, 10))
ax.set_yticks(range(5000, 210000000, 5000000))
ax.xaxis.set_major_formatter('{x:.0f}')
ax.grid(True, 'major', 'y', ls='--', lw=.5, c='k', alpha=.3)
ax.tick_params(axis='both', which='both', labelsize=14,
bottom=False, top=False, labelbottom=True,
left=False, right=False, labelleft=True)
country = df.columns
for column in country:
line, = ax.plot(df['Year'].to_list(), df[column].to_list(), lw=2.5)
y_pos = df[column].to_list()[-1] - 0.5
ax.text(2020.5, y_pos, column, fontsize=14, color=line.get_color())
plt.show()
Комментарии:
1. Большое вам спасибо, я так благодарен.
2. Да, пожалуйста, не могли бы вы помочь мне с одной последней вещью.
3. Я использовал функцию groupby в своем коде, как мне интегрировать цикл, пожалуйста, помогите
4. Результирующие сгруппированные фреймы данных будут отображены в циклическом процессе. Форма результирующих сгруппированных данных должна соответствовать форме изображения данных, которые я вставил. Строки — это годы, а столбцы — данные по странам.