Как подавить научную нотацию c в Pandas и добавить метку в конце линейного графика? - PullRequest
0 голосов
/ 13 апреля 2020

Набор данных:

Year        Country gdpMillion
1980-01-01  Canada  273854
1980-01-01  China   191149
1980-01-01  United Kingdom  564948
1980-01-01  India   186325
1980-01-01  Japan   1105390
1980-01-01  Singapore   11896.25678
1980-01-01  Thailand    32353.44073
1980-01-01  United States   2857310
1981-01-01  Canada  306215
1981-01-01  China   195866
1981-01-01  United Kingdom  540766
1981-01-01  India   193491
1981-01-01  Japan   1218990
1981-01-01  Singapore   14175.22884
1981-01-01  Thailand    34846.10786
1981-01-01  United States   3207040
1982-01-01  Canada  313507
1982-01-01  China   205090
1982-01-01  United Kingdom  515049
1982-01-01  India   200715
1982-01-01  Japan   1134520
1982-01-01  Singapore   16084.25238
1982-01-01  Thailand    36589.79786
1982-01-01  United States   3343790
1983-01-01  Canada  340548
1983-01-01  China   230687
1983-01-01  United Kingdom  489618
1983-01-01  India   218262
1983-01-01  Japan   1243320
1983-01-01  Singapore   17784.11215
1983-01-01  Thailand    40042.82624
1983-01-01  United States   3634040
1984-01-01  Canada  355373
1984-01-01  China   259947
1984-01-01  United Kingdom  461487
1984-01-01  India   212158
1984-01-01  Japan   1318380
1984-01-01  Singapore   19749.3611
1984-01-01  Thailand    41797.59296
1984-01-01  United States   4037610
1985-01-01  Canada  364756
1985-01-01  China   309488
1985-01-01  United Kingdom  489285
1985-01-01  India   232512
1985-01-01  Japan   1398890
1985-01-01  Singapore   19156.53275
1985-01-01  Thailand    38900.69271
1985-01-01  United States   4338980

Когда я импортирую данные в блокнот Jupyter, числа в столбце gdpMillion становятся научными c обозначениями. Как вернуть их обратно в нормальное состояние? И когда я рисую линейную диаграмму, я хотел бы иметь CountryName в конце каждой линии.

Вот код моего линейного участка

import seaborn as sns

sns.lineplot(x='Year', y='gdpMillion', hue='Country', data=dataset_C,
        marker="o", palette="Blues")
sns.despine(left=True, bottom=True)
plt.show()

1 Ответ

0 голосов
/ 20 апреля 2020

Во-первых, я буду считать, что ваши данные доступны в CSV-подобном файле. Мое решение включает использование встроенной функции pandas set_option для учета правильного форматирования номера, а затем использование pyplot.text для построения имен в конце каждой строки.

Я не думаю, что это лучшее решение с точки зрения визуализации, но, если я хорошо понимаю, что вы ' ищем, вот оно:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_style('darkgrid')

pd.set_option('display.float_format', lambda x: '%.3f' % x)
dataset_C = pd.read_csv('dataset_C.csv')
dataset_C['YYYY'] = dataset_C['Year'].apply(pd.to_datetime).apply(lambda x: x.year)

fig, ax = plt.subplots(1,1,figsize=(10,6))
sns.lineplot(x='YYYY',y='gdpMillion',hue='Country', data=dataset_C, marker='o',palette='Blues', ax=ax, legend=False)
for country in dataset_C['Country'].unique():
    xpos = dataset_C[dataset_C['Country'] == country].YYYY.max() - 0.2
    ypos = dataset_C[dataset_C['Country'] == country].gdpMillion.max() + 100000
    plt.text(xpos,ypos,country)
ax.set_xlabel('Year')

первое решение

Вместо этого я бы искал что-то вроде:

fig, ax = plt.subplots(1,1,figsize=(10,6))
sns.lineplot(x='YYYY',y='gdpMillion',hue='Country', data=dataset_C, marker='o',palette='deep', ax=ax, legend='full')
ax.set_xlabel('Year')
plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)

второе решение

Надеюсь, оно вам помогло! С уважением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...