Нужна помощь в построении графика данных в dataframe

#python #pandas #dataframe #matplotlib

#python #pandas #dataframe #matplotlib

Вопрос:

У меня есть следующий фрейм данных;

     Region Name Year    Internet usage %
0   Northern Africa 2000    0.6
1   Northern Africa 2005    9.6
2   Northern Africa 2010    24.6
3   Northern Africa 2014    35.3
4   Northern Africa 2015    38.9
5   Northern Africa 2016    41.7
6   Northern Africa 2017    45.5
7   Sub-Saharan Africa  2000    0.5
8   Sub-Saharan Africa  2005    2.1
9   Sub-Saharan Africa  2010    6.5
10  Sub-Saharan Africa  2014    14.3
11  Sub-Saharan Africa  2015    17.7
12  Sub-Saharan Africa  2016    19.5
13  Sub-Saharan Africa  2017    21.8
14  Eastern Africa  2000    0.2
15  Eastern Africa  2005    1.3
16  Eastern Africa  2010    4.5
17  Eastern Africa  2014    9.8
18  Eastern Africa  2015    13.3
19  Eastern Africa  2016    15.0
20  Eastern Africa  2017    17.6
21  Middle Africa   2000    0.1
22  Middle Africa   2005    0.7
23  Middle Africa   2010    2.1
24  Middle Africa   2014    7.0
25  Middle Africa   2015    8.7
26  Middle Africa   2016    10.5
27  Middle Africa   2017    12.2
28  Southern Africa 2000    4.9
29  Southern Africa 2005    7.0
30  Southern Africa 2010    22.0
31  Southern Africa 2014    45.9
32  Southern Africa 2015    48.9
33  Southern Africa 2016    51.2
34  Southern Africa 2017    53.4
35  Western Africa  2000    0.1
36  Western Africa  2005    2.5
37  Western Africa  2010    7.7
38  Western Africa  2014    16.7
39  Western Africa  2015    21.1
40  Western Africa  2016    22.9
41  Western Africa  2017    25.2 

Я хочу построить график этих данных, где по оси X указан «Год», по оси Y — «% использования Интернета», а разные регионы отображаются разными цветами, и это будет линейный график.

Когда я попытался построить его, я неправильно понял график. Может кто-нибудь помочь мне с этим.

Заранее спасибо

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

1. Не могли бы вы поделиться, как выглядит ваша попытка построения графика? Одним из способов сделать это является функция pivot, например, но есть также несколько разных способов, например, с помощью pivot df_plot = df.pivot(index='Year', columns='Region', values='Internet usage %')

Ответ №1:

Итак, вот три решения, которые могут вам подойти.

  1. Использование pandas pivot
 df_plot = df.pivot(index='Year', columns='Region', values='Internet usage %')
df_plot.plot()
  
  1. Использование pandas groupby
 fig, ax = plt.subplots()

for region, grp in df.groupby(['Region']):
    ax = grp.plot(ax=ax, kind='line', x='Year', y='Internet usage %', c=region, label=region)

plt.show()
  
  1. Использование seaborn

Пожалуйста, смотрите ответ @Diziet Asahi.

Лично я предпочитаю первое решение, но это, конечно, зависит от вас.

Ответ №2:

Использование seaborn :

 sns.lineplot(data=df, x='Year',y='Internet usage %', hue='Region Name')
  

введите описание изображения здесь

Ответ №3:

Это код, который я разработал до сих пор;

 import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.read_csv('Internet Usage over the years.csv', engine='python')

# Remove the first row as it is not required
df = df.iloc[1:]

# Rename the columns
df.columns = ['Region Code', 'Region Name', 'Year', 'Misc 1', 'Internet usage %', 'Misc 2', 'Misc 3']

df = df[(df['Region Name'] == 'Northern Africa') | (df['Region Name'] == 'Sub-Saharan Africa') | (df['Region Name'] == 'Eastern Africa') | (df['Region Name'] == 'Middle Africa') | (df['Region Name'] == 'Southern Africa') | (df['Region Name'] == 'Western Africa')]
df = df.reset_index()

# Remove unwanted columns from the dataframe
cols = [0, 1, 4, 6, 7]
df.drop(df.columns[cols], inplace=True, axis=1)

convert_dict = {'Year': int, 
                'Internet usage %': float
               } 

df = df.astype(convert_dict)

df.plot(x ='Year', y='Internet usage %', kind = 'line') 

plt.xlabel('Year')
plt.ylabel('% of individuals using the internet')

plt.legend(loc='upper left', fontsize=9, frameon=True, framealpha=1)

plt.title('Internet usage % in different regions of Afria over the years')
plt.show()
  

Я прикрепил результирующий график введите описание изображения здесь