添加数据维度,使用Python绘制5D散点图
用Python绘制5D散点图的步骤教程。
微信搜索关注《Python学研大本营》,加入读者群,分享更多精彩

散点图通常用于比较2个不同特征以确定它们之间的关系。散点图也可以添加更多的维度来反映数据,例如使用颜色、气泡大小等。在本文中,将介绍如何绘制一个五维的散点图。
数据集:https://github.com/checkming00/Medium_datasets/blob/main/WH%20Report_preprocessed.csv


让我们从二维开始,简单地看一下Healthy_life_expectancy_at_birth和Log_GDP_per_capita的图:
df.plot.scatter('Healthy_life_expectancy_at_birth', 'Log_GDP_per_capita') 
我们可以看到这2个特征具有很强的正相关关系。然后我们可以将year作为我们的三维视觉效果添加到绘图中:
import matplotlib.pyplot as plt import numpy as np plt.figure(figsize=(15, 8)) years = np.sort(df.year.unique()) for i, year in enumerate(years): BM = df.year == year X = df[BM]['Healthy_life_expectancy_at_birth'] Y = df[BM]['Log_GDP_per_capita'] plt.subplot(2, 5, i+1) # 2X5 structure of subplots, at i+1 position plt.scatter(X, Y) plt.title(year) plt.xlim([30, 80]) # x axis range plt.ylim([6, 12]) # y axis range plt.show() plt.tight_layout() 
它显示了多年来Healthy_life_expectancy_at_birth和Log_GDP_per_capita之间的关系。
另一方面,我们可以让它具有交互性:
def plotyear(year): BM = df.year == year X = df[BM]['Healthy_life_expectancy_at_birth'] Y = df[BM]['Log_GDP_per_capita'] plt.scatter(X, Y) plt.xlabel('Healthy_life_expectancy_at_birth') plt.ylabel('Log_GDP_per_capita') plt.xlim([30, 80]) plt.ylim([6, 12]) plt.show() from ipywidgets import interact, widgets min_year=df.year.min() max_year=df.year.max() interact(plotyear, year=widgets.IntSlider(min=min_year, max=max_year, step=1, value=min_year)) 
然后我们可以拖动顶部的控制条来更改年份。
现在让我们把第四个维度Continent作为图例放入:
continents = df.Continent.unique() con_colors = dict(zip(continents, ['b', 'g', 'r', 'c', 'm', 'y' ,'k'])) import seaborn as sns def plotyear_continent(year): BM = df.year == year sns.scatterplot(data=df[BM], x='Healthy_life_expectancy_at_birth', y='Log_GDP_per_capita', hue='Continent', palette=con_colors) plt.xlabel('Healthy_life_expectancy_at_birth') plt.ylabel('Log_GDP_per_capita') plt.xlim([30, 80]) plt.ylim([6, 12]) plt.legend() plt.show() interact(plotyear_continent, year=widgets.IntSlider(min=min_year, max=max_year, step=1, value=round(df.year.mean(),0))) 
它显示了不同大洲之间的关系。此时,将默认年份设置为2014年(value=round(df.year.mean(),0))。
我们可以在视觉上做得更多的是气泡的大小。所以我们可以把population作为第五维:
continents = df.Continent.unique() con_colors = dict(zip(continents, ['b', 'g', 'r', 'c', 'm', 'y' ,'k'])) min_size=df['population'].min()/1000000 # Scale bubble minimum size max_size=df['population'].max()/1000000 # Scale bubble maximum size def plotyear_continent_pop(year): BM = df.year == year sns.scatterplot(data=df[BM], x='Healthy_life_expectancy_at_birth', y='Log_GDP_per_capita', hue='Continent', palette=con_colors, size='population', sizes=(min_size, max_size)) plt.xlabel('Healthy_life_expectancy_at_birth') plt.ylabel('Log_GDP_per_capita') plt.xlim([30, 80]) plt.ylim([6, 12]) plt.legend() plt.show() interact(plotyear_continent_pop, year=widgets.IntSlider(min=min_year, max=max_year, step=1, value=round(df.year.mean(),0))) 
它显示了各大洲与气泡大小作为人口的关系。
这就是我们制作5D散点图的方式。它可以尽可能在同一图像中告诉人们所需要的信息。
推荐书单
《Python从入门到精通(第2版)》
《Python从入门到精通(第2版)》从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了使用Python进行程序开发应该掌握的各方面技术。全书共分23章,包括初识Python、Python语言基础、运算符与表达式、流程控制语句、列表和元组、字典和集合、字符串、Python中使用正则表达式、函数、面向对象程序设计、模块、异常处理及程序调试、文件及目录操作、操作数据库、GUI界面编程、Pygame游戏编程、网络爬虫开发、使用进程和线程、网络编程、Web编程、Flask框架、e起去旅行网站、AI图像识别工具等内容。所有知识都结合具体实例进行介绍,涉及的程序代码都给出了详细的注释,读者可轻松领会Python程序开发的精髓,快速提升开发技能。除此之外,该书还附配了243集高清教学微视频及PPT电子教案。

精彩回顾
微信搜索关注《Python学研大本营》,加入读者群
访问【IT今日热榜】,发现每日技术热点