轻松玩转Python,五个步骤打造惊艳的折线图

1、简介

轻松玩转Python,五个步骤打造惊艳的折线图

文章插图
图片
最富有的5个国家的GDP随时间的演变
Matplotlib可以快速轻松地使用现成的函数绘制图表,但是微调步骤需要花费更多精力 。今天就来介绍如何使用Matplotlib绘制吸引人的图表 。
本文详细介绍如何从下面这张图↓
轻松玩转Python,五个步骤打造惊艳的折线图

文章插图
图片
优化为下面这张图↓
轻松玩转Python,五个步骤打造惊艳的折线图

文章插图
图片
2、数据为了说明方法,本文使用了包含过去50年各国GDP信息的公开数据集:
来源:世界银行国民账户数据和OECD(经济合作与发展组织)国民账户数据文件 。
许可证URL:https://datacatalog.worldbank.org/public-licenses#cc-by
导入必要的软件包、读取数据、绘制图表,对2022年的GDP前20个国家进行筛?。?
import pandas as pdimport matplotlib.pyplot as pltfrom datetime import timedelta# 读取数据df = pd.read_csv('88a1e584-0a94-4e73-b650-749332831ef4_Data.csv', sep=',')df.drop(['Series Name', 'Series Code', 'Country Code'], axis=1, inplace=True)df = df.dropna(subset=['Country Name'])# 对 2022 年最富有的 20 个国家进行筛选top_20_countries = df[df['Year'] == '2022-01-01'].sort_values('GDP', ascending = False).head(20)['Country Name'].tolist()df = df[df['Country Name'].isin(top_20_countries)].reset_index(drop = True)df.head()3、基本图首先,只需四行代码就足以创建图形,并循环遍历各国以绘制它们各自的折线:
# 创建图形和坐标轴对象,指定尺寸和DPIfig, ax = plt.subplots(figsize=(13.33,7.5), dpi = 96)# 绘制折线for country in top_20_countries:data = https://www.isolves.com/it/cxkf/yy/Python/2023-11-13/df[df['Country Name'] == country]line = ax.plot(data['Year'], data['GDP'], label=country)
轻松玩转Python,五个步骤打造惊艳的折线图

文章插图
最基本的Matplotlib折线图
4、基本要素接下来向图表中添加一些关键内容,使其更易于观众阅读 。
  • 网格
为了提高图表的可读性,网格是必不可少的 。将网格的透明度设置为0.5,这样它们就不会对数据点造成太大干扰 。
  • X轴和Y轴重新格式化
为了更全面地了解微调的可能性,本文故意添加了更多的参数 。例如,X轴不需要major_formatter 和major_locator对象,因为本文只显示年份,但如果读者的X轴包含其他数字,这就会派上用场 。
  • 图例
由于要显示很多条线 , 因此添加标签和图例非常重要 , 这样读者就能知道哪条线是哪条线 。
# 添加图例ax.legend(loc="best", fnotallow=8)# 创建网格ax.grid(which="major", axis='x', color='#DAD8D7', alpha=0.5, zorder=1)ax.grid(which="major", axis='y', color='#DAD8D7', alpha=0.5, zorder=1)# 重新格式化x轴标签和刻度线标签ax.set_xlabel('', fnotallow=12, labelpad=10) # 不需要轴标签ax.xaxis.set_label_position("bottom")#ax.xaxis.set_major_formatter(lambda s, i : f'{s:,.0f}') #以防万一我们需要额外的格式设置#ax.xaxis.set_major_locator(MaxNLocator(integer=True)) #以防我们需要额外的格式化ax.xaxis.set_tick_params(pad=2, labelbottom=True, bottom=True, labelsize=12, labelrotatinotallow=0)# 重新格式化y轴ax.set_ylabel('GDP (Billions USD)', fnotallow=12, labelpad=10)ax.yaxis.set_label_position("left")ax.yaxis.set_major_formatter(lambda s, i : f'{s*10**-9:,.0f}')#ax.yaxis.set_major_locator(MaxNLocator(integer=True)) #以防我们需要额外的格式化ax.yaxis.set_tick_params(pad=2, labeltop=False, labelbottom=True, bottom=False, labelsize=12)
轻松玩转Python,五个步骤打造惊艳的折线图

文章插图
图片
为本文的图表添加一些必要的功能
5、突出重点接下来,突出显示最富有的五个国家 , 并跟踪其GDP随时间的变化 。在字典中定义了特定的颜色和线条样式,并对代码稍作修改,以单独绘制它们 。
# 颜色和线条样式colors_dict = {'United States': '#014f86', 'China': '#DC0000', 'Japan': '#ff4d6d', 'Germany': '#403d39', 'India': '#6a994e'}line_styles_dict = {'United States': '-', 'China': '-', 'Japan': '-', 'Germany': '-', 'India': '-'}# 绘制前5条线for country in top_20_countries[:5]:color = colors_dict.get(country, 'grey')# 从字典中获取颜色 , 如果找不到,默认为灰色line_style = line_styles_dict.get(country, '-')# 从字典中获取线条样式,如果未找到,默认为实线data = https://www.isolves.com/it/cxkf/yy/Python/2023-11-13/df[df['Country Name'] == country]line = ax.plot(data['Year'], data['GDP'], color=color, linestyle=line_style, zorder=2, label=country)# 添加图例ax.legend(loc="best", fnotallow=8)# 绘制剩余部分for country in top_20_countries[5:]:data = df[df['Country Name'] == country]line = ax.plot(data['Year'], data['GDP'], color='grey', linestyle=':', linewidth=0.5, zorder=2)


推荐阅读