Python 在同一角点绘图中绘制多个数据集

Python 在同一角点绘图中绘制多个数据集,python,matplotlib,Python,Matplotlib,我想知道是否有可能使用图形将多个数据集绘制在一起。 请不要建议使用seaborn pairplot 这里是文档中的脚本,它是一个简单的角点图: import corner import numpy as np ndim, nsamples = 2, 10000 np.random.seed(42) samples = np.random.randn(ndim * nsamples).reshape([nsamples, ndim]) figure = corner.corner(samples

我想知道是否有可能使用图形将多个数据集绘制在一起。 请不要建议使用seaborn pairplot

这里是文档中的脚本,它是一个简单的角点图:

import corner
import numpy as np

ndim, nsamples = 2, 10000
np.random.seed(42)
samples = np.random.randn(ndim * nsamples).reshape([nsamples, ndim])
figure = corner.corner(samples)
结果是:

现在,我想在上面的三幅图像上绘制第二个数据集,可能使用不同的颜色。有办法吗?

是的,就是这样:

figure = corner.corner(samples)
corner.corner(samples2,fig=figure)

下面是一些代码,用图例将多个样本集叠加在一个角点图中

#-*-编码:utf-8-*-
“”“演示将多个角重叠在一起”“”
进口角
将matplotlib.lines导入为mlines
将matplotlib.pyplot作为plt导入
将numpy作为np导入
拐角处\u KWARGS=dict(
平滑=0.9,
标签=dict(fontsize=16),
title_kwargs=dict(fontsize=16),
分位数=[0.16,0.84],
级别=(1-np.exp(-0.5),1-np.exp(-2),1-np.exp(-9/2.),
绘图密度=假,
plot_datapoints=False,
填充等高线=真,
show_titles=True,
最大刻度=3,
)
def覆盖角(样本列表、样本标签):
“”“将多个角点相互重叠打印”“”
#得到一些常数
n=长度(样本列表)
_,ndim=samples\u list[0]。形状
max_len=max([样本列表中的s的len])
cmap=plt.cm.get\u cmap('gist\u rainbow',n)
颜色=[范围(n)内i的cmap(i)]
绘图范围=[]
对于范围内变暗(ndim):
plot_range.append(
[
最小值([min(样本列表[i].T[dim]),对于范围(n)]内的i,
最大值([max(样本列表[i].T[dim]),对于范围(n)]内的i,
]
)
角点更新(范围=绘图范围)
图=角(
样本列表[0],
颜色=颜色[0],
**角楼
)
对于范围(1,n)内的idx:
图=角(
样本列表[idx],
无花果,
权重=获取归一化权重(len(样本列表[idx]),最大len),
颜色=颜色[idx],
**角楼
)
传奇故事(
处理=[
mlines.Line2D([],[],color=colors[i],label=sample\u labels[i])
对于范围内的i(n)
],
fontsize=20,frameon=False,
bbox_to_anchor=(1,ndim),loc=“右上角”
)
plt.savefig(“corner.png”)
plt.close()
def获取归一化权重(len_当前样本、len_最长样本):
返回np.ones(len_当前样本)*(len_最长样本/len_当前样本)
def main():
ndim,nsamples=31000
samples=np.random.randn(ndim*nsamples)。重塑([nsamples,ndim])
重叠角(
[样本*3,样本*2,样本],
[“样本x 3”、“样本x 2”、“样本”]
)
如果名称=“\uuuuu main\uuuuuuuu”:
main()

如何从第一次调用
corner.corner()
开始抑制打印?但它无法正确缩放第一个样本的1D直方图@德尔塔萨塔,不知道你是什么意思?你有例子吗?对不起,我的评论不清楚。这里我关心的是一维直方图的正确性(和外观)。在本例中,为什么第一个样本不相对于
max_len
加权?无论如何,这里的加权相当于在
corner.corner()中使用
hist\u kwargs=dict(density=True)
。然而,我发现在这两种情况下都有一个bug。绘制每个样本的直方图后,重置1D直方图的y范围。因此,如果您不绘制最后一个直方图最高的样本,您将看到它超出了范围!试着通过样品,而不是在最后!这一定是个bug。