#python #matplotlib #seaborn
#питон #matplotlib #сиборн
Вопрос:
У меня есть следующий df
кадр данных , который иллюстрирует динамику численности населения за последние годы:
Year Germany France Italy 2010 81802257 64658856 59190143 2011 80222065 64978721 59364690 2012 80327900 65276983 59394207 2013 80523746 65600350 59685227 2014 80767463 66165980 60782668 2015 81197537 66458153 60795612 2016 82175684 66638391 60665551 2017 82521653 66809816 60589445 2018 82792351 67026224 60483973 2019 83019213 67177636 59816673 2020 83166711 67320216 59641488 2021 83155031 67439599 59257566
Я составил график динамики численности населения в различных странах за последние годы. Код, который я использовал, это:
import seaborn as sns import pandas as pd import matplotlib.pyplot as plt sns.lineplot(x='Year', y='value', hue='variable', marker='o', data=pd.melt(df, ['Year'])) plt.xlabel('Year') plt.ylabel('Population') plt.ticklabel_format(style='plain', axis='y') plt.title('Population from 2010 to 2021')
Теперь я хочу улучшить график. Особенно:
- Удалите заголовок легенды и переместите легенду справа от диаграммы.
- По оси y я хотел бы, чтобы население выражалось в тысячах (без 1e3, появляющегося над осью). Должен ли я разделить население на 1000 и изменить название оси?
- На оси x я хотел бы видеть все годы, а не только 2010, 2012, 2014 и т.д.
Как я могу действовать дальше?
Ответ №1:
Вы можете указать свойства условных обозначений и галочек:
import seaborn as sns import matplotlib.pyplot as plt your_plot = sns.lineplot(x='Year', y='value', hue='variable', marker='o', data=pd.melt(df, ['Year'])) plt.xlabel('Year') plt.ylabel('Population (in thousands)') plt.ticklabel_format(style='plain', axis='y') plt.title('Population from 2010 to 2021') #1 plt.legend(loc=0, bbox_to_anchor=[1,1]) #2 plt.yticks(your_plot.get_yticks(), your_plot.get_yticks() / 1000) #3 (Edit: adding rotation parameter to avoid overlap plt.xticks(df['Year'], rotation=45) # ensuring eveything fits on the figure: plt.tight_layout() plt.show()
Выход:
Комментарии:
1. Есть ли возможность добавить некоторое расстояние между годами по оси x? Лучше ли увеличить фигуру?
2. вы можете вращать галочки с помощью параметра вращение:
plt.xticks(df['Year'], rotation=45)