以下是一些代码,用于在一个角落图中叠加多个样本集,并带有图例。
![enter image description here](https://istack.dev59.com/tRW6e.webp)
"""Demo to overlay multiple corners on top of each other"""
import corner
import matplotlib.lines as mlines
import matplotlib.pyplot as plt
import numpy as np
CORNER_KWARGS = dict(
smooth=0.9,
label_kwargs=dict(fontsize=16),
title_kwargs=dict(fontsize=16),
quantiles=[0.16, 0.84],
levels=(1 - np.exp(-0.5), 1 - np.exp(-2), 1 - np.exp(-9 / 2.)),
plot_density=False,
plot_datapoints=False,
fill_contours=True,
show_titles=True,
max_n_ticks=3,
)
def overlaid_corner(samples_list, sample_labels):
"""Plots multiple corners on top of each other"""
n = len(samples_list)
_, ndim = samples_list[0].shape
max_len = max([len(s) for s in samples_list])
cmap = plt.cm.get_cmap('gist_rainbow', n)
colors = [cmap(i) for i in range(n)]
plot_range = []
for dim in range(ndim):
plot_range.append(
[
min([min(samples_list[i].T[dim]) for i in range(n)]),
max([max(samples_list[i].T[dim]) for i in range(n)]),
]
)
CORNER_KWARGS.update(range=plot_range)
fig = corner.corner(
samples_list[0],
color=colors[0],
**CORNER_KWARGS
)
for idx in range(1, n):
fig = corner.corner(
samples_list[idx],
fig=fig,
weights=get_normalisation_weight(len(samples_list[idx]), max_len),
color=colors[idx],
**CORNER_KWARGS
)
plt.legend(
handles=[
mlines.Line2D([], [], color=colors[i], label=sample_labels[i])
for i in range(n)
],
fontsize=20, frameon=False,
bbox_to_anchor=(1, ndim), loc="upper right"
)
plt.savefig("corner.png")
plt.close()
def get_normalisation_weight(len_current_samples, len_of_longest_samples):
return np.ones(len_current_samples) * (len_of_longest_samples / len_current_samples)
def main():
ndim, nsamples = 3, 10000
samples = np.random.randn(ndim * nsamples).reshape([nsamples, ndim])
overlaid_corner(
[samples * 3, samples * 2, samples],
["samples x 3", "samples x 2", "samples"]
)
if __name__ == "__main__":
main()
corner.corner()
的绘图? - jtlz2