前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >利用散点图探索宇航员特征与太空任务之间的关系

利用散点图探索宇航员特征与太空任务之间的关系

作者头像
HsuHeinrich
发布于 2025-05-13 02:48:43
发布于 2025-05-13 02:48:43
6300
代码可运行
举报
文章被收录于专栏:HsuHeinrichHsuHeinrich
运行总次数:0
代码可运行

利用散点图探索宇航员特征与太空任务之间的关系

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

from flexitext import flexitext
from matplotlib.patches import FancyArrowPatch

plt.rcParams.update({"font.family": "Corbel", "font.weight": "light"})
plt.rcParams["text.color"] = "white"
plt.rcParams["axes.labelcolor"] = "white"
plt.rcParams["xtick.labelcolor"] = "white"
plt.rcParams["ytick.labelcolor"] = "white"

数据探索

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data = pd.read_csv("https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2020/2020-07-14/astronauts.csv")

# 数据展示
data.head()
image-20240129171641876
image-20240129171641876

image-20240129171641876

宇航员数据集主要特征: sex:性别 year_of_birth:出生年份 year_of_mission:执行任务年份 hours_mission :执行任务时长(小时) total_number_of_missions:累计执行任务次数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 计算宇航员执行任务时的年龄
data["age_at_mission"] = data["year_of_mission"] - data["year_of_birth"]

绘制基础散点图

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 设置基本信息

# 基本变量
year_of_mission = data["year_of_mission"].values # 执行任务年份
age_at_mission = data["age_at_mission"].values # 执行任务时年龄
sex = data["sex"].values # 性别
hours_mission = data["hours_mission"].values # 执行任务时长(小时)
total_number_of_missions = data["total_number_of_missions"].values # 执行任务次数

# 颜色
DARKBLUE = "#1d1330"
ORANGE = "#ffa72b"
LIGHTBLUE = "#e1f7fa"

# 自定义函数 数字缩放
def scale(x, lower=0, upper=1):
    return ((x - np.min(x)) / (np.max(x) - np.min(x))) * (upper - lower)  + lower

alpha = scale(total_number_of_missions, 0.1, 1) # 透明度,与执行任务次数关联
sizes = scale(hours_mission, 10, 200) # 点大小,与执行任务时长关联
colors = np.where(sex == "male", LIGHTBLUE, ORANGE) # 颜色,与性别关联
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 绘制基本散点图
fig, ax = plt.subplots(figsize=(10, 10))

ax.scatter(age_at_mission, year_of_mission);
output_11_0
output_11_0

output_11_0

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 利用点的大小、透明度、颜色以及背景信息美化
fig, ax = plt.subplots(figsize=(10, 10))

fig.set_facecolor(DARKBLUE)
ax.set_facecolor(DARKBLUE)

ax.scatter(age_at_mission, year_of_mission, c=colors, s=sizes, alpha=alpha);
output_12_0
output_12_0

output_12_0

自定义布局

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 移除边框
ax.set_frame_on(False)

# x轴自定义
ax.set_xlim(10, 85)
ax.set_xticks([20, 40, 60, 80])
ax.set_xticklabels([20, 40, 60, 80], fontsize=10)
ax.set_xlabel("Age at start of mission", size=10, weight="light")

# y轴自定义
ax.set_yticks([1960, 1980, 2000, 2020])
ax.set_yticklabels([1960, 1980, 2000, 2020], fontsize=10)

# 删除刻度线
ax.tick_params(length=0)

fig
output_14_0
output_14_0

output_14_0

为图表增加更丰富的信息

  1. 标题
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 调整四周边距
fig.subplots_adjust(top=0.7, bottom=0.08, left=0.06, right=0.94)

# 标题
fig.text(
    0.06, 0.94, "Ages through Time and Space", 
   fontsize=20, fontname="AR DESTINE", va="baseline"
)

# 子标题
subtitle = """<size:14><weight:normal>Astronauts have got older, missions have got longer, and starting younger is no guarantee  
of going more often.</> 
  
Each dot is an astronaut on a mission. The larger the dot, the more hours the mission took,  
ranging from 0 to over 10,000 (14 months!). The more transparent the dot, the fewer times  
that astronaut went to space.  

The slope of age by year of mission is similar for <color:#e1f7fa>male</> and <color:#ffa72b>female</> astronauts, with a 20-year  
time lag.  

All this with a few notable exceptions...</>
"""  
flexitext(0.06, 0.91, subtitle, va="top", xycoords="figure fraction", ax=ax)

# 添加著作信息
caption = "#TidyTuesday | Graphic: @cararthompson | Data: Mariya Stavnichuk and Tatsuya Corlett"
fig.text(0.99, 0.01, caption, ha="right", va="bottom", size=9)

fig
output_17_0
output_17_0

output_17_0

2. 添加注释

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
text = """<weight:light, size:11>This is not a typo! Meet
<weight:normal>John Herschel Glenn\nJr.</>, who travelled to
space aged 77 in 1999. \nWhat a legend!</>
"""
flexitext(0.9, 0.8, text, ha="center", va="center", ax=ax)


text = """<weight:light, size:11>1985 was the year that,
saw the <weight:normal>most
astronauts in space</>,
with a total of 62 on 28
missions</>.
"""
flexitext(0.825, 0.41, text, ha="center", va="center", ax=ax)

text = """<weight:light, size:11>
The <weight:normal>two youngest
astronauts</> were 
Gherman Titov and
Valentina Tereshkova, 
both aged 26. They
each flew only one
mission. It would be
1982 before the next
female astronaut took
to space.
</>
"""
flexitext(0.02, 0.14, text, va="center", ax=ax)


text = """<weight:light, size:11><weight:normal>Sergei Krikalev</> went on
his first of six missions
aged 30. Only two
astronauts have been
on more missions: 
Franklin R. Chang-Diaz
and Jerry L. Ross, who
both started their
careers in the 1980
NASA-9 selection.</>
""" 
flexitext(0.06, 0.7, text, ax=ax)

fig
output_19_0
output_19_0

output_19_0

3. 添加箭头

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 箭头样式
style = "Simple, tail_width=0.5, head_width=4, head_length=4"

# 直箭头1
arrow = FancyArrowPatch(
    (77, 2005), (77, 1999.5),
    color = "#938ca1",
    arrowstyle = style
)
ax.add_patch(arrow)

# 直箭头2
arrow = FancyArrowPatch(
    (65, 1985), (60, 1985),
    color = "#938ca1",
    arrowstyle = style
)
ax.add_patch(arrow)

# 弯曲箭头1
arrow = FancyArrowPatch(
    (23, 1965), (34, 1981),
    color = "#ffa72b",
    arrowstyle = style,
    connectionstyle="arc3, rad=0.4", # rad弯曲程度
)
ax.add_patch(arrow)

# 弯曲箭头1
arrow = FancyArrowPatch(
    (23, 1970), (26, 1964),
    color = "#938ca1",
    arrowstyle = style,
    connectionstyle="arc3, rad=-0.3",
)
ax.add_patch(arrow)

# 弯曲箭头3
arrow = FancyArrowPatch(
    (25, 1999), (30, 1989),
    color = "#938ca1",
    arrowstyle = style,
    connectionstyle="arc3, rad=-0.3",
)
ax.add_patch(arrow)

fig
output_21_0
output_21_0

output_21_0

参考:Custom scatterplot with annotations in Matplotlib[1]

参考资料

[1]

Custom scatterplot with annotations in Matplotlib: https://python-graph-gallery.com/web-scatterplot-astronaut/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-05-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 HsuHeinrich 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
FiveThirtyEight商业可视化作品绝了!复现它!!教程超详细~~(直播资料分享)
经常看我直播的小伙伴应该知道,小编最近在复现一些商业网站上的优秀可视化作品,也有很多同学让我直播进行讲解,这边和小伙伴们说一下:我们安排都是先在公众号发文,然后再进行情况选择是否进行直播讲解。好了,话不多说,今天小编给大家带来的是复现FiveThirtyEight网站的一幅可视化作品,详细介绍如下:
DataCharm
2021/12/27
1K0
FiveThirtyEight商业可视化作品绝了!复现它!!教程超详细~~(直播资料分享)
Matplotlib 可视化之箭头与标注的高级应用
时间线是按时间顺序显示的事件列表。它通常是一个图形设计,显示一个长条,标有与之平行的日期,通常是同时期的事件。
数据STUDIO
2022/04/11
1.9K0
Matplotlib 可视化之箭头与标注的高级应用
Matplotlib 可视化之注释与文本高级应用
可以使用scipy.special.jn()函数,其中需要计算整数阶贝塞尔函数 Jn 的零点,可以使用函数 scipy.special.jn_zeros(n, nt)
数据STUDIO
2022/05/24
1.4K0
Matplotlib 可视化之注释与文本高级应用
Matplotlib 可视化之图例与标签高级应用
图例非常容易使用,只要求用户命名图。Matplotlib将自动创建一个包含每个图形元素的图例。即使在大多数情况下,一个简单的legend() 调用就足够了,但图例还是提供了几个选项,允许我们自定义图例的各个配置。如使用
数据STUDIO
2022/05/24
2K0
Matplotlib 可视化之图例与标签高级应用
数据科学 IPython 笔记本 8.12 文本和注解
创建良好的可视化涉及引导读者并使图形讲述故事。在某些情况下,可以以完全可视的方式讲述这个故事,而不需要添加文本,但在其他情况下,需要小的文本提示和标签。也许你将使用的最基本的注释类型是轴标签和标题,但选项超出了这个范围。让我们看看一些数据,以及我们如何可视化和注释它,来有助于传达有趣的信息。 我们首先设置笔记本来绘图并导入我们将使用的函数:
ApacheCN_飞龙
2022/05/07
1.1K0
数据科学 IPython 笔记本 8.12 文本和注解
Matplotlib 1.4W+字基础教程来了(收藏吃灰去吧~~)
参考:Rougier N P, Droettboom M, Bourne P E, et al. Ten Simple Rules for Better Figures[J]. PLOS Computational Biology【IF 4.7】, 2014, 10(9).感兴趣戳:https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4161295/pdf/pcbi.1003833.pdf
DataCharm
2021/02/22
1.5K0
Matplotlib 1.4W+字基础教程来了(收藏吃灰去吧~~)
这种显著标明怎么绘制?一个技巧解决,超简单~~
我们在绘制可视化图表时经常需要对特定区域、位置等使用文本或箭头等标识性字符进行注释显示,这种注释在可视化制作中尤为重要,它可以突出重要信息,引起人们对图形某个特征的关注。接下来,小编就汇总一下在R和Python可视化绘制中是如何进行注释的。具体内容如下:
DataCharm
2022/10/25
6340
这种显著标明怎么绘制?一个技巧解决,超简单~~
maplotlib 标准颜色、风格样式和水印
一、标准颜色列表 """ ======================== Visualizing named colors ======================== Simple plot
用户6021899
2019/08/14
9060
数据可视化之matplotlib绘制正余弦曲线图
在python里面,数据可视化是python的一个亮点。在python里面,数据可视可以达到什么样的效果,这当然与我们使用的库有关。python常常需要导入库,并不断调用方法,就很像一条流数据可视化的库,有很多,很多都可以后续开发,然后我们调用。了解过pyecharts美观的可视化界面 ,将pyecharts和matplotlib相对比一下。
兰舟千帆
2022/07/16
1.8K0
数据可视化之matplotlib绘制正余弦曲线图
显示组成一个图的多个元素的名称的分布。
import numpy as np import matplotlib.pyplot as plt from matplotlib.ticker import AutoMinorLocator, MultipleLocator, FuncFormatter np.random.seed(19680801) X = np.linspace(0.5, 3.5, 100) Y1 = 3+np.cos(X) Y2 = 1+np.cos(1+X/0.75)/2 Y3 = np.random.uniform(Y
裴来凡
2022/05/28
8740
显示组成一个图的多个元素的名称的分布。
利用Python绘制酷炫OD流量图的新方法
2. 由于OD线是直线,双向的OD会重叠在一起,比如上海到北京和北京到上海的OD线是重合的,在图面上无法区分。
DataCharm
2021/02/22
4K1
利用Python绘制酷炫OD流量图的新方法
Python-matplotlib 散点图绘制
本期推文的主要内容是散点图的绘制教程,所使用的数据关于全球教育水平划分的师生比例,涉及到的包主要为matplotlib和seaborn,当然用于数据处理分析的pandas和 numpy也必不可少。
DataCharm
2021/02/22
1.5K0
Python-matplotlib 散点图绘制
数据可视化 | 手撕 Matplotlib 绘图原理(二)
关于箭头和注释风格的更多介绍与示例,可以在 Matplotlib 的画廊gallery[1]中看到,尤其推荐
数据STUDIO
2021/06/24
1.6K1
Python中概率累计分布函数(CDF)分析
PDF:连续型随机变量的概率密度函数是一个描述这个随机变量的输出值,在某个确定的取值点附近的可能性的函数。
用户8949263
2022/05/25
13K0
Python中概率累计分布函数(CDF)分析
BeautifulMakie绝对是一个Julia的宝藏级可视化库
地震3D的代码: #by Lazaro Alonso using CSV, DataFrames using GLMakie using FileIO, Downloads let earth_img = load(Downloads.download("https://upload.wikimedia.org/wikipedia/commons/9/96/NASA_bathymetric_world_map.jpg")) function sphere(; r = 1.0, n =
气象学家
2022/01/18
6720
BeautifulMakie绝对是一个Julia的宝藏级可视化库
如何用python画图——带你入门matplotlib
matplotlib是python中常用的一个可视化库,大多数的操作与MATLAB非常类似,所以对于从MATLAB迁移到python的朋友是非常友好的。matplotlib使用numpy进行数组运算,也支持pandas的Series直接用于matplotlib画图。
MeteoAI
2019/07/22
3K0
Figure解析
“PDFMV框架是问题-数据-特征-模型-价值五个英文字母的首字母组合而成,它是以问题为导向,数据为驱动,利用特征和模型从数据中学习到知识,以创造价值的系统化过程。”
陆勤_数据人网
2020/04/07
9290
Figure解析
Matplotlib 中文用户指南 4.5 标注
使用text()会将文本放置在轴域的任意位置。 文本的一个常见用例是标注绘图的某些特征,而annotate()方法提供辅助函数,使标注变得容易。 在标注中,有两个要考虑的点:由参数xy表示的标注位置和xytext的文本位置。 这两个参数都是(x, y)元组。
ApacheCN_飞龙
2022/12/01
1.2K0
Matplotlib 中文用户指南 4.5 标注
Python-matplotlib 商业图表绘制02
Python-matplotlib商业图表绘制的第二篇教程也已经推出,本期的推文主要涉及到文本、annotate()、散点以及颜色搭配等内容的讲解,话不多说,直接上教程
DataCharm
2021/02/22
3940
Python-matplotlib 商业图表绘制02
手把手教你用Python进行帕累托分析(二八定律)
导读:本文带你用Python进行贡献度分析。贡献度分析又称帕累托分析,它的原理是帕累托法则,又称20/80定律。
IT阅读排行榜
2020/11/16
1.7K0
手把手教你用Python进行帕累托分析(二八定律)
相关推荐
FiveThirtyEight商业可视化作品绝了!复现它!!教程超详细~~(直播资料分享)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档