matplotlib 在多个图形上缩放颜色

s1ag04yj  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(101)

我有一个函数,它沿着沿着两个轴绘制数据,并根据它们到对角线的距离给它们上色:

def scatter_diagdistance(x, y) :
    z = abs(y-x)
    fig, ax = plt.subplots(dpi=200)
    ax2 = ax.twinx() ##Create secondary axis
    ax2.set_yticks([]) ##No ticks for the secondary axis
    sc = ax.scatter(x, y, c=z, s=50, edgecolor='none')
    ax2.set_ylabel('Distance from diagonal') ##Label for secondary axis
    ax.plot([0, 1], [0, 1], '-', c="red", transform=ax.transAxes) #Line from 0 to 1
    cbar = fig.colorbar(sc)
    ax.set_xlabel('Ref mutation frequencies')
    ax.set_ylabel('Decoded mutation frequencies')
    return fig, z

字符串
它创建的图形看起来像这样:


的数据
在我的项目的下一部分,我想在几种不同的设置之间比较这些图形。我想对整个多面板图形使用相同的色标,以便显示一种方法比其他方法更接近对角线。我还想使用相关的颜色条,它不需要包含在图形输出中,因为之后我将一起编辑面板。
我如何将所有的z值合并组合在一起,在此基础上建立一个色标,然后为每个图再次将它们分离回来?

mklgxw1f

mklgxw1f1#

根据所有数据计算到对角线的最大距离。
将此maxDist作为参数传递给scatter_diagdistance
在散点图调用的参数vminvmax中使用它。它将在normalize函数中使用,而不是z数组中的局部最大值。

def scatter_diagdistance(x, y, maxDist):
    # ...
    sc = ax.scatter(x, y, c=z, s=50, edgecolor='none', vmin=0, vmax=maxDist)
    # ...

字符串
你的距离计算错了。
(1.0,0)到对角线的距离为0.5*sqrt(2),而不是1.0
你画的对角线不对,画网格看问题。
它不通过(1,1)
它是从一个角到另一个角画的。在你的图中是(1.1,1.3)
很可能也没有通过(0,0)

相关问题