python - 我可以将轴范围传递给 seaborn 中的 PairGrid 吗?
问题描述
我想在绘制时定义 PairGrids 上的轴范围。我知道我可以在绘图后调整这些,但我想将 hexbins 映射到绘图,如果我在事后进行调整,它将被扭曲。matplotlib.pyplot.hexbin接受一个范围参数,允许我在绘图期间定义范围。我可以在使用带有两个变量的 FacetGrid 时传递这个参数。
我想为 pandas 数据框中的每个变量提供一个范围列表,以便我可以比较可能具有不同值范围(例如iris
和iris_2
)的数据集之间的图。
import seaborn as sns
import matplotlib.pyplot as plt
from matplotlib.colors import LogNorm
iris = sns.load_dataset("iris")
# Create second dataset I'd like to compare, but has different range of values
iris_2 = iris.copy()
iris_2[iris_2.columns[0:4]] = iris_2[iris_2.columns[0:4]] + 2
def hexbin(x, y, **kws):
cmap = sns.light_palette(kws.pop("color"), as_cmap=True)
plt.hexbin(x, y, cmap=cmap, mincnt=1, **kws)
g = sns.FacetGrid(iris, col="species")
g = g.map(hexbin, 'sepal_width', 'sepal_length', norm=LogNorm(),
gridsize=10, extent=[1, 5, 4, 10])
g = sns.PairGrid(iris, diag_sharey=False)
g.map_diag(sns.kdeplot, lw=3, legend=False, shade=True)
g.map_lower(hexbin, gridsize=10, norm=LogNorm())
g.map_upper(plt.scatter, s=3)
绘制第二个数据集时,不清楚数据集有何不同,因为轴已针对各个数据集进行了调整。
g = sns.PairGrid(iris_2, diag_sharey=False)
g.map_diag(sns.kdeplot, lw=3, legend=False, shade=True)
g.map_lower(hexbin, gridsize=10, norm=LogNorm())
g.map_upper(plt.scatter, s=3)
在我的具体情况下,理想的解决方案可能看起来像一个字典,每个数据框列都有所需的范围:
extent_dict = {'sepal_length': [4, 10], 'sepal_width': [2, 7],
'petal_length': [0, 10], 'petal_width': [0, 4.5]}
解决方案
推荐阅读
- c++ - 如何在 C++ 中将单个字节写入文件,同时保持文件的其余部分不变
- .net - Oracle Scaffold-DbContext for Net Core 没有 [Key] 属性?(.net 核心 v.2.1)
- sql - ORA-00001: 违反了唯一约束 pk
- reactjs - 环境变量在 react firebase 配置文件中不起作用
- node.js - 如何将静态 React“应用程序”部署到 Heroku?
- go - 将多个 goroutine 与携带 amqp 消息的通道同步
- javascript - Redux thunk 异步操作无法访问第一个参数
- javascript - 为什么 findOneAndRemove 有时会在回调中将 null 传递给 doc?
- c# - 账本逾期计算罚款总额并加罚款
- python - Pandas group_by 保留顺序