簡體   English   中英

matplotlib 具有極值的輪廓

[英]matplotlib contourf with extreme values

我有我想要的數據 plot 具有極端邊緣值,下面給出的是一個通用示例:

import matplotlib.pyplot as plt
plt.style.use('seaborn-white')
import numpy as np

Z = np.random.rand(100,100)

plt.contourf(Z, 100, cmap='RdGy', vmin=0, vmax=1)
plt.colorbar()
plt.show()

使用上面的代碼,我得到了這個 plot:
在此處輸入圖像描述

但是,如果我只更改 Z 的一行以包含極值,它會“支配”整個 plot:

import matplotlib.pyplot as plt
plt.style.use('seaborn-white')
import numpy as np

Z = np.random.rand(100,100)
Z[:1] *= 100

plt.contourf(Z, 100, cmap='RdGy', vmin=0, vmax=1)
plt.colorbar()
plt.show()

在此處輸入圖像描述

我的問題是這樣的:在第二個例子中,雖然我有極值,但所有有趣的事情顯然都發生在 0 和 1 的范圍內,這完全由我在第一行輸入的乘法支配,即使我設置了 vmin 和vmax 相應地。 如何在“關注”0-1 范圍的同時保持數據原樣? 我真的不在乎第一行發生了什么,因為我只關心值 1-100 可以有一種顏色。

非常感謝。

這似乎是一種已知行為,如本期GH 問題中所述。

一種解決方法(在問題評論中給出)是使用可迭代的levels arguments 而不是依賴vminvmax

這是一個代碼片段,展示了如何將vminvmaxpcolormesh一起使用(正如您在評論中所說),但如何使用contourf獲得類似的結果。

import matplotlib.pyplot as plt
plt.style.use('seaborn-white')
import numpy as np


def main():
    fig, axs = plt.subplots(2)
    Z = np.random.rand(100,100)
    Z[:1] *= 100

    cmap = plt.get_cmap("viridis")

    p1 = axs[0].pcolormesh(Z, vmin=0., vmax=1, cmap=cmap)
    fig.colorbar(p1, ax=axs[0])
    p2 = axs[1].contourf(Z, levels=np.linspace(0, 1, 100), cmap=cmap)
    fig.colorbar(p2, ax=axs[1], ticks=np.linspace(0, 1, 5))
    plt.show()

if __name__ == '__main__':
    main()

pcolormesh 與 contourf

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM