【问题标题】:Fill a matplotlib contour plot填充 matplotlib 等高线图
【发布时间】:2020-12-28 05:46:09
【问题描述】:

通过以下代码,我获得了以下等高线图:

fig, ax = plt.subplots()
x = np.arange(431)
y = np.arange(225)
Y, X = np.meshgrid(y, x)
values = df["Appearance_percentage"].values
values2d = np.reshape(values, (431, 225))
ax.set_ylim(225, 0)

plt.style.use('seaborn-white')
ax.set_title('Mapa contour de probabilitat de trobar núvols')
plt.contour(X, Y, values2d, 30, cmap='RdGy')
plt.colorbar()
plt.savefig("contourmap.png")

我想知道我是否可以填充线条之间的区域,以便颜色条中没有空白并且地图更有吸引力。

我尝试过df["Appearance_percentage_contourmap"] = round(df["Appearance_percentage"]),然后是values = df["Appearance_percentage_contourmap"].values,但我仍然获得了包含许多白色区域的同一张地图。

【问题讨论】:

    标签: python numpy matplotlib contour


    【解决方案1】:

    只需将plt.contour 替换为plt.contourf,其中末尾的“f”表示“填充”。

    这是一个例子:

    import numpy as np
    import matplotlib.pyplot as plt
    
    x = np.arange(100)
    y = np.arange(100)
    Y, X = np.meshgrid(y, x)
    values = np.outer(x, y)
    
    fig, ax = plt.subplots()
    plt.contourf(X, Y, values, 30, cmap='RdGy')
    plt.colorbar()
    

    您可能还想强调轮廓线:

    x = np.arange(100)
    y = np.arange(100)
    Y, X = np.meshgrid(y, x)
    values = np.outer(x, y)
    
    fig, ax = plt.subplots()
    c1 = plt.contourf(X, Y, values, 30, cmap='RdGy')
    c2 = plt.contour(X, Y, values, 30, cmap='Greys')
    plt.colorbar(c1)
    

    【讨论】:

    • 感谢您的帮助。例如,如何将轮廓线的颜色定义为黑色?
    • cmap 参数替换为 colors 并传递您需要的颜色,例如黑色字母“k”:plt.contour( ..., colors='k').
    • 抱歉,Max,我的最后一个问题是是否可以控制轮廓线的粗细...谢谢,给您带来的不便,我们深表歉意
    • 使用linewidths 参数。欲了解更多信息,请查看plt.contour documentation
    【解决方案2】:

    plt.contour() 创建一个 isoline 以相等的插值连接所有位置。因此,它会搜索外观所在的位置,例如6% 并用一条线连接这些。如果您设置levels=30,将绘制30 条这样的线。 plt.contour() 做了很多努力来创建一个显示每行值的颜色条。如果您不想要这样的颜色条,您可以使用相同的值创建自定义颜色条。

    您可以按如下方式创建自定义颜色条:

    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib.cm import ScalarMappable
    
    fig, ax = plt.subplots()
    x = np.arange(431)
    y = np.arange(225)
    Y, X = np.meshgrid(y, x)
    values = np.random.randn(431, 225).cumsum(axis=0).cumsum(axis=1).ravel()
    values -= values.min()
    values2d = np.reshape(values, (431, 225))
    ax.set_ylim(225, 0)
    
    plt.style.use('seaborn-white')
    ax.set_title('Mapa contour de probabilitat de trobar núvols')
    plt.contour(X, Y, values2d, 30, cmap='RdGy')
    sm = ScalarMappable(norm=plt.Normalize(values.min(), values.max()), cmap='RdGy')
    plt.colorbar(sm)
    plt.show()
    

    PS:请不要对值进行四舍五入(如df["Appearance_percentage_contourmap"] = round(df["Appearance_percentage"])),因为这会引入人为的不准确性。

    【讨论】:

      猜你喜欢
      • 2013-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-09
      • 2013-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多