admin管理员组文章数量:1027815
利用散点图探索帕尔默企鹅数据
利用散点图探索帕尔默企鹅数据
代码语言:javascript代码运行次数:0运行复制import matplotlib.pyplot as plt
import numpy as np
from adjustText import adjust_text
from faker import Faker
from palmerpenguins import load_penguins
数据探索
代码语言:javascript代码运行次数:0运行复制以下数据如果有需要的同学可关注公众号HsuHeinrich,回复【数据可视化】自动获取~
# 数据展示
penguins = load_penguins()
penguins.head()
image-20240129170656049
代码语言:javascript代码运行次数:0运行复制species:企鹅的种类,包括 Adelie、Chinstrap 和 Gentoo 三种。 island:企鹅所在岛屿的名字,包括 Biscoe、Dream 和 Torgersen 三个岛屿。 bill_length_mm:企鹅的喙长,单位毫米。 bill_depth_mm:企鹅的喙深,单位毫米。 flipper_length_mm:企鹅的鳍长,单位毫米。 body_mass_g:企鹅的体重,单位克。 sex:企鹅的性别,包括 Male 和 Female。
# 数据清洗
penguins = penguins.dropna() # 删除na
绘制基础散点图
代码语言:javascript代码运行次数:0运行复制# 设置基础信息:包括颜色、物种列表等信息
# 颜色
BG_WHITE = "#fbf9f4"
GREY_LIGHT = "#b4aea9"
GREY50 = "#7F7F7F"
GREY30 = "#4d4d4d"
BLUE_DARK = "#1B2838"
BLUE = "#2a475e"
COLORS = ["#386cb0", "#fdb462", "#7fc97f" ] # 为物种分配颜色
# 物种列表
SPECIES = sorted(penguins["species"].unique())
# 水平线
HLINES = [40, 50, 60]
# 刻度值列表
YTICKS = [40, 50, 60]
XTICKS = [160, 170, 180, 190, 200, 210, 220, 230, 240]
# 随机生成企鹅名字
faker = Faker()
faker.seed_instance(11)
NAMES = [faker.first_name() for i in range(len(penguins))]
# 标记形状列表
MARKERS = ["o", "^", "s"]
代码语言:javascript代码运行次数:0运行复制# 初始化画布
fig, ax = plt.subplots(figsize= (14, 10))
# 背景颜色
fig.patch.set_facecolor(BG_WHITE)
ax.set_facecolor(BG_WHITE)
# 水平线
for h in HLINES:
ax.axhline(h, color=GREY50, ls=(0, (5, 5)), alpha=0.8, zorder=0)
# 分组散点图
for species, color, marker in zip(SPECIES, COLORS, MARKERS):
data = penguins[penguins["species"] == species]
ax.scatter(
"flipper_length_mm", "bill_length_mm", s=50, color=color,
marker=marker, alpha=0.8, data=data
)
output_12_0
添加不重叠的标签
代码语言:javascript代码运行次数:0运行复制# adjustText可以自动放置标签
# 这里仅添加以c开头的名字
TEXTS = []
for i in range(len(penguins)):
if NAMES[i].startswith("C"):
x = penguins["flipper_length_mm"].iloc[i]
y = penguins["bill_length_mm"].iloc[i]
text = NAMES[i]
TEXTS.append(ax.text(x, y, text, color=GREY30, fontsize=14, fontname="Poppins"))
# 添加标签
adjust_text(
TEXTS,
expand_points=(2, 2),
arrowprops=dict(
arrowstyle="->",
color=GREY50,
lw=2
),
ax=fig.axes[0]
)
fig
output_14_0
为图表增加更丰富的信息
代码语言:javascript代码运行次数:0运行复制# 添加标题与子标题
# 标题
fig.suptitle(
"Palmer Penguins Data Visualization",
x = 0.122,
y = 0.975,
ha="left",
fontsize=32,
fontname="Lobster Two",
color=BLUE,
weight="bold",
)
# 子标题
ax.set_title(
"Scatter plot of flipper length vs bill length",
loc="left",
ha="left",
fontsize=24,
fontname="Lobster Two",
color=BLUE_DARK,
weight="bold",
pad=10
)
# 添加图例
legend = ax.legend(
loc=(0.85, 0.025), # bottom-right
labelspacing=1.5, # add space between labels
markerscale=1.5, # increase marker size
frameon=False # don't put a frame
)
# 图例信息
for text, species in zip(legend.get_texts(), SPECIES):
text.set_text(species)
text.set_fontname("Roboto")
text.set_fontsize(16)
# 图例标题信息
legend.set_title("Species")
legend_title = legend.get_title()
legend_title.set_fontname("Roboto")
legend_title.set_fontweight("bold")
legend_title.set_fontsize(18)
legend_title.set_ha("left")
# 自定义边框布局
# 隐藏边框
ax.spines["right"].set_color("none")
ax.spines["top"].set_color("none")
# 边框颜色
ax.spines["left"].set_color(GREY_LIGHT)
ax.spines["left"].set_linewidth(2)
ax.spines["bottom"].set_color(GREY_LIGHT)
ax.spines["bottom"].set_linewidth(2)
# 刻度
ax.tick_params(length=0)
ax.set_yticks(YTICKS)
ax.set_yticklabels(YTICKS, fontname="Lobster Two", size=15)
ax.set_ylabel("bill Length (mm)", fontname="Lobster Two", size=18, weight="bold")
ax.set_xticks(XTICKS)
ax.set_xticklabels(XTICKS, fontname="Lobster Two", size=15)
ax.set_xlabel("flip length (mm)", fontname="Lobster Two", size=18, weight="bold")
fig
output_16_0
参考:Scatterplot with labels and text repel in Matplotlib[1]
共勉~
参考资料
[1]
Scatterplot with labels and text repel in Matplotlib: /
利用散点图探索帕尔默企鹅数据
利用散点图探索帕尔默企鹅数据
代码语言:javascript代码运行次数:0运行复制import matplotlib.pyplot as plt
import numpy as np
from adjustText import adjust_text
from faker import Faker
from palmerpenguins import load_penguins
数据探索
代码语言:javascript代码运行次数:0运行复制以下数据如果有需要的同学可关注公众号HsuHeinrich,回复【数据可视化】自动获取~
# 数据展示
penguins = load_penguins()
penguins.head()
image-20240129170656049
代码语言:javascript代码运行次数:0运行复制species:企鹅的种类,包括 Adelie、Chinstrap 和 Gentoo 三种。 island:企鹅所在岛屿的名字,包括 Biscoe、Dream 和 Torgersen 三个岛屿。 bill_length_mm:企鹅的喙长,单位毫米。 bill_depth_mm:企鹅的喙深,单位毫米。 flipper_length_mm:企鹅的鳍长,单位毫米。 body_mass_g:企鹅的体重,单位克。 sex:企鹅的性别,包括 Male 和 Female。
# 数据清洗
penguins = penguins.dropna() # 删除na
绘制基础散点图
代码语言:javascript代码运行次数:0运行复制# 设置基础信息:包括颜色、物种列表等信息
# 颜色
BG_WHITE = "#fbf9f4"
GREY_LIGHT = "#b4aea9"
GREY50 = "#7F7F7F"
GREY30 = "#4d4d4d"
BLUE_DARK = "#1B2838"
BLUE = "#2a475e"
COLORS = ["#386cb0", "#fdb462", "#7fc97f" ] # 为物种分配颜色
# 物种列表
SPECIES = sorted(penguins["species"].unique())
# 水平线
HLINES = [40, 50, 60]
# 刻度值列表
YTICKS = [40, 50, 60]
XTICKS = [160, 170, 180, 190, 200, 210, 220, 230, 240]
# 随机生成企鹅名字
faker = Faker()
faker.seed_instance(11)
NAMES = [faker.first_name() for i in range(len(penguins))]
# 标记形状列表
MARKERS = ["o", "^", "s"]
代码语言:javascript代码运行次数:0运行复制# 初始化画布
fig, ax = plt.subplots(figsize= (14, 10))
# 背景颜色
fig.patch.set_facecolor(BG_WHITE)
ax.set_facecolor(BG_WHITE)
# 水平线
for h in HLINES:
ax.axhline(h, color=GREY50, ls=(0, (5, 5)), alpha=0.8, zorder=0)
# 分组散点图
for species, color, marker in zip(SPECIES, COLORS, MARKERS):
data = penguins[penguins["species"] == species]
ax.scatter(
"flipper_length_mm", "bill_length_mm", s=50, color=color,
marker=marker, alpha=0.8, data=data
)
output_12_0
添加不重叠的标签
代码语言:javascript代码运行次数:0运行复制# adjustText可以自动放置标签
# 这里仅添加以c开头的名字
TEXTS = []
for i in range(len(penguins)):
if NAMES[i].startswith("C"):
x = penguins["flipper_length_mm"].iloc[i]
y = penguins["bill_length_mm"].iloc[i]
text = NAMES[i]
TEXTS.append(ax.text(x, y, text, color=GREY30, fontsize=14, fontname="Poppins"))
# 添加标签
adjust_text(
TEXTS,
expand_points=(2, 2),
arrowprops=dict(
arrowstyle="->",
color=GREY50,
lw=2
),
ax=fig.axes[0]
)
fig
output_14_0
为图表增加更丰富的信息
代码语言:javascript代码运行次数:0运行复制# 添加标题与子标题
# 标题
fig.suptitle(
"Palmer Penguins Data Visualization",
x = 0.122,
y = 0.975,
ha="left",
fontsize=32,
fontname="Lobster Two",
color=BLUE,
weight="bold",
)
# 子标题
ax.set_title(
"Scatter plot of flipper length vs bill length",
loc="left",
ha="left",
fontsize=24,
fontname="Lobster Two",
color=BLUE_DARK,
weight="bold",
pad=10
)
# 添加图例
legend = ax.legend(
loc=(0.85, 0.025), # bottom-right
labelspacing=1.5, # add space between labels
markerscale=1.5, # increase marker size
frameon=False # don't put a frame
)
# 图例信息
for text, species in zip(legend.get_texts(), SPECIES):
text.set_text(species)
text.set_fontname("Roboto")
text.set_fontsize(16)
# 图例标题信息
legend.set_title("Species")
legend_title = legend.get_title()
legend_title.set_fontname("Roboto")
legend_title.set_fontweight("bold")
legend_title.set_fontsize(18)
legend_title.set_ha("left")
# 自定义边框布局
# 隐藏边框
ax.spines["right"].set_color("none")
ax.spines["top"].set_color("none")
# 边框颜色
ax.spines["left"].set_color(GREY_LIGHT)
ax.spines["left"].set_linewidth(2)
ax.spines["bottom"].set_color(GREY_LIGHT)
ax.spines["bottom"].set_linewidth(2)
# 刻度
ax.tick_params(length=0)
ax.set_yticks(YTICKS)
ax.set_yticklabels(YTICKS, fontname="Lobster Two", size=15)
ax.set_ylabel("bill Length (mm)", fontname="Lobster Two", size=18, weight="bold")
ax.set_xticks(XTICKS)
ax.set_xticklabels(XTICKS, fontname="Lobster Two", size=15)
ax.set_xlabel("flip length (mm)", fontname="Lobster Two", size=18, weight="bold")
fig
output_16_0
参考:Scatterplot with labels and text repel in Matplotlib[1]
共勉~
参考资料
[1]
Scatterplot with labels and text repel in Matplotlib: /
本文标签: 利用散点图探索帕尔默企鹅数据
版权声明:本文标题:利用散点图探索帕尔默企鹅数据 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://it.en369.cn/jiaocheng/1747460437a2167417.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论