python - 使用多个子图在 seaborn 散点图上叠加一条垂直线
问题描述
我有一个散点图,由多个使用 seaborn 的“col”和“row”功能的子图组成,例如
sns.relplot(data=data,x="YEL-HLog",y="FSC-HLog",hue="Treatment",row="Fraction",col="Biounit",s=1)
我想在每个子图的参数 x 上覆盖一条线。踢球者是不同列的行不同。在这种情况下,我使用了以下代码:
sns.relplot(data=new,x="Threshold",y="FSC-HLog",hue="Treatment",row="Fraction",col="Biounit",s=1)
“新”是相同的数据框,但插入了“阈值”列。所以一切都是一样的,除了 x 值。
但是,这只是给了我两个不同的图表。如何将两者结合起来显示在同一个情节上?
解决方案
每次sns.relplot
调用图形级函数时,都会创建一个新图形。 relplot
返回一个FacetGrid
包含如何创建子图的信息。您可以循环g.axes
并在每个上面画一条线。
这是一个例子:
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
N = 2000
data = pd.DataFrame({"YEL-HLog": np.random.rand(N),
"FSC-HLog": np.random.rand(N),
"Treatment": np.random.choice(['A', 'B', 'C'], N),
"Fraction": np.random.choice(['Fr1', 'Fr2'], N),
"Biounit": np.random.choice(['Unit1', 'Unit2', 'Unit3'], N)})
threshold_dict = {('Fr1', 'Unit1'): 0.1, ('Fr1', 'Unit2'): 0.2, ('Fr1', 'Unit3'): 0.3,
('Fr2', 'Unit1'): 0.6, ('Fr2', 'Unit2'): 0.7, ('Fr2', 'Unit3'): 0.8}
g = sns.relplot(data=data, x="YEL-HLog", y="FSC-HLog", hue="Treatment", row="Fraction", col="Biounit", height=3)
for row, row_name in enumerate(g.row_names):
for col, col_name in enumerate(g.col_names):
ax = g.axes[row, col]
threshold = threshold_dict[(row_name, col_name)]
ax.axvline(threshold, color='red', ls='--', lw=3)
g.fig.subplots_adjust(left=0.07, bottom=0.09)
plt.show()
尚不清楚数据框如何new
获取其值。它可以从 中创建threshold_dict
,但这似乎是不必要的间接。为了完整起见,在这种情况下,代码可能如下所示:
new_df = data
new_df["Threshold"] = data.apply(lambda d: threshold_dict[(d['Fraction'], d['Biounit'])], axis=1)
for ...
for ...
threshold = new_df[(new_df["Fraction"] == row_name) & (new_df["Biounit"] == col_name)]["Threshold"].iloc[0]
推荐阅读
- python - 将 crontab 与 dzdo su 一起使用
- amazon-web-services - AWS ECS nginx:在上游找不到 [emerg] 主机
- r - 如何使用 igraph R 包比较两个图以识别两个图之间相同/不同边的数量
- java - 如何立即杀死Java中的线程
- c# - Thread_UseAllCPUGroups 是否只影响默认任务计划程序?
- javascript - discord.js 上的 ping 命令
- javascript - 量角器 - 通过 npm run 运行测试时出现“指定了多个配置”错误,但前提是使用了 --capabilities.chromeOptions.binary 参数
- sql - 从数组转换的json字符串中提取字段
- kivy - Kivy VKeyboard,光标闪烁,无双开
- c++ - 文件更新后 CfSetInSyncState 失败并显示 ERROR_NOT_A_CLOUD_FILE