代码之家  ›  专栏  ›  技术社区  ›  Suwash

python中带有“连续双变量”调色板的散点图[重复]

  •  1
  • Suwash  · 技术社区  · 6 年前

    我已经能够使用以下脚本使用代表连续变量的调色板绘制散点图:

    import numpy as np
    import seaborn as sns
    import matplotlib.pyplot as plt
    
    x, y, z = np.random.rand(3, 50)
    cmap = sns.cubehelix_palette(start=5, light=1, as_cmap=True)
    
    fig, ax = plt.subplots()
    points = ax.scatter(x, y, c=z, s=20, cmap=cmap)
    fig.colorbar(points)
    

    Output univariate palette

    然而,我需要创建一个带有“双变量调色板”的地图。我最终将创建这样的地图,但目前我正在寻找以这种方式绘制散布图。(来源: https://www.linkedin.com/feed/update/urn:li:activity:6378928737907466240 ) Bivariate palette 我希望绘制散点图,以便颜色表示地图中的变量RMSE和R。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Robbie    6 年前

    您可以通过取两个不同颜色贴图的平均值来创建一个双变量颜色贴图。使用不同的配色方案很好,您可以在显示的范围内进行实验 here

    import numpy as np
    import matplotlib.pyplot as plt
    
    def colorFromBivariateData(Z1,Z2,cmap1 = plt.cm.YlOrRd, cmap2 = plt.cm.PuBuGn):
        # Rescale values to fit into colormap range (0->255)
        Z1_plot = np.array(255*(Z1-Z1.min())/(Z1.max()-Z1.min()), dtype=np.int)
        Z2_plot = np.array(255*(Z2-Z2.min())/(Z2.max()-Z2.min()), dtype=np.int)
    
        Z1_color = cmap1(Z1_plot)
        Z2_color = cmap2(Z2_plot)
    
        # Color for each point
        Z_color = np.sum([Z1_color, Z2_color], axis=0)/2.0
    
        return Z_color
    
    z1 = np.random.random((50,100))
    z2 = np.random.random((50,100))
    Z_color = colorFromBivariateData(z1,z2)
    
    xx, yy = np.mgrid[0:100,0:100]
    C_map = colorFromBivariateData(xx,yy)
    
    fig = plt.figure(figsize=(10,5))
    
    ax1 = fig.add_subplot(1,2,1)
    ax1.imshow(Z_color)
    ax1.set_title('Data')
    
    ax2 = fig.add_subplot(1,2,2)
    ax2.imshow(C_map)
    ax2.set_title('Bivariate Color Map')
    ax2.set_xlabel('Variable 1')
    ax2.set_ylabel('Variable 2')
    
    fig.tight_layout()
    fig.show()
    

    输出为:

    enter image description here

    关于在地图上绘图以及将较小的轴嵌入较大的轴,有很多信息,因此要扩展这个想法来创建您在问题中链接的图像应该不会太困难。

    如果这回答了你的问题,请告诉我!