you*_*t13 5 python matplotlib overlap confidence-interval overlapping
我有下图,我想应用相同的逻辑推理来绘制不同椭圆的所有轮廓和内容(由颜色标识)。
在这个例子中,在我下面的例子中绘制了 4 个矩阵,我有 5 个矩阵(见 5 个图例),但这并不重要。
这里的情节:
您将看到,对于每种颜色,我们都有一个浅色和深色着色器:这对应于 1 个置信度(1 CL = 深色着色器)和 2 CL(浅色着色器)。
对于我的问题,我正在谈论非对角线框。黄色是最小的区域,这意味着我们有最好的约束(图例中的每种颜色对应一个协方差矩阵)。
现在,我想重现重叠的方式。这是我的脚本的第一次尝试(有 5 个矩阵,但我们不在乎,它只是一种额外的颜色和另外 2 个轮廓,深色和浅色)。
正如您所看到的,这不是很漂亮和明确(我们甚至可以说将轮廓区分为增加的函数Figure of Merit(FoM图例中的值)是一团糟。
我已经设置了以下片段代码来处理不同颜色椭圆之间的这些优先级(FoM 与椭圆的面积成反比):
下面要修改的部分有一个正确和智能的重叠:
for tick in g.fig.axes[0].xaxis.get_major_ticks():
tick.tick1line.zorder = 5
# Ordering applied here : try to be coherent in the overlapping
# by putting over all the smallest (yellow, 1 C.L) and ends by lowest
# FoM, here, blue light (2 C.L)
for ax in g.fig.axes:
geo = ax.get_geometry()
if (geo[2]-1) // geo[0] > (geo[2]-1) % geo[0]:
for c,z in zip(ax.collections, [0.1, 0.3, 0.5, 0.7, 2, 0.2, 0.4, 0.6, 0.8, 2]):
c.zorder = z
Run Code Online (Sandbox Code Playgroud)
单独的脚本可直接在 : script to modify
对于非对角线框,我不想重现与开始时完全相同的图形(因为数据不相同),但我希望重现相同的重叠逻辑和透明度对第一个图形的影响)。
您可以在此处找到带有脚本的整个存档:修复重叠的脚本
特别是在上面的分配中给出了在轮廓之间设置此顺序或优先级的代码片段c.zorder = z。
我已经发布了同样的问题,但只针对 2 个矩阵:只有 2 个矩阵要绘制的旧帖子,即 2x2 = 4 轮廓椭圆。在这里,如果我考虑了每种颜色的 1 CL 和 2 CL 椭圆,我总共有 5x2 = 10 个轮廓。
PS:产生这个“triplot”(“tri”如“triangular”)的python库是getdist。
主要例程是:
# Call triplot
g.triangle_plot([matrix1, matrix2, matrix3, matrix4, matrix5],
names,
filled = True,
legend_labels = [],
contour_colors = ['darkblue','purple','red','orange','yellow'],
line_args = [{'lw':2, 'color':'darkblue'},{'lw':2, 'color':'purple'},
{'lw':2, 'color':'red'},{'lw':2, 'color':'orange'}, {'lw':2, 'color':'yellow'}]
)
Run Code Online (Sandbox Code Playgroud)
编辑 1:我认为我可以在所有不同的轮廓(1 CL 和 2 CL 置信度)之间添加透明度,但我担心它会使事情变得更加复杂。
最后一点:最小的黄色轮廓必须像示例的第一个图一样完全填充。但是 c.order = z 被设置为错误的值,这意味着像这样的不连贯的结果。
从你的角度来看,什么是理想的 c.order 应用顺序以及哪个标准:我认为例如将盒子的最大 xlim/ylim 设置为最大的椭圆 2 CL(浅“深蓝色”轮廓)和在将所有其他轮廓作为其面积的函数推到最小的轮廓(黄色)之后。
顺便说一下,这是我在网上看到的一个透明度示例:
也就是说,黄色超过蓝色本身超过红色:这就是我想要在我的三点图上重现的内容(考虑一种类似的重叠排序)。
编辑 2:我没有考虑手动确定重叠优先级的代码片段进行了尝试。
通过删除此代码片段并再次绘图,我得到了这个数字:
它比我的第一个图好一点(例如,黄色轮廓像橙色轮廓一样完全填充)。但我不知道重叠的优先级是如何完成的。我必须在来源中查看更多getdist库但这将是一项艰巨的任务。
我希望了解默认情况下在 getdist 中重叠的策略。
编辑 3:我意识到一些有趣的事情可以解决我关于重叠和透明度排序的问题,如编辑 1的情节中所示图中所示:对于我想要得到的图,目标是设置超过黄色 1.CL 和 2。 CL,之后,橙色 1 CL 和 2 CL 等...按优先级排序。
诀窍应该是为给定的颜色保留 1 CL 和 2 CL 的轮廓,并且只让这些轮廓的 darline 线可见,而不考虑下面轮廓的颜色。
这样,我可以区分其他颜色的所有下部轮廓。
如果一些较低的轮廓在所有其他轮廓之上,则将出现纯色并且不会应用透明度,因为它没有重叠。
实际上,在下面的 2 个图中(说明了我想要的渲染),我想要相同的但有一个变化,1 CL 纯黄色区域带有线条轮廓,2 CL 浅黄色区域也带有轮廓线,它们已经结束所有其他轮廓。
例如,您可以在这两个图中看到黄色 1 CL 不是真正的纯黄色。2 CL 黄色也有同样的问题,它不是真正的浅黄色。
现在,我必须:
寻找如何为 1 CL 和 2 CL(而不仅仅是 2 CL 置信度)设置轮廓
应用透明度作为所有其他低于轮廓的轮廓线,并保持纯黄色 1 CL 和浅黄色 2 CL 的完整性 注意,我想要的是轮廓线上的透明度,而不是颜色本身的透明度。
这有点棘手,我承认,但我认为这是可能的(使用getdist,我必须搜索必要的选项或能够找到一种方法来实现这种重叠排序,而无需混合每种颜色的所有透明度。