python - matplotlib contourf 具有极值
问题描述
我有我想用极端边缘值绘制的数据,下面给出的是一个通用示例:
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()
但是,如果我只更改 Z 的一行以包含极值,它会“主导”整个情节:
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
参数而不是依赖vmin
and vmax
。
这是一个代码片段,展示了如何vmin
以及vmax
可以使用pcolormesh
(正如您在评论中所说),但如何使用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()
推荐阅读
- c# - Blazor Web 应用 SetString 引发异常错误消息“对象引用未设置为对象的实例。”
- java - 当我从翻转的 textureRegion 创建它时,LibGDX 无法使用 NinePatchDrawable 作为表格的背景
- java - Android SmsManager.sendTextMessage 失败且没有错误
- css - 显示时如何使img居中:块不起作用?
- ruby-on-rails - ActiveRecord 忽略验证
- c# - 在这种情况下,EF Core 生成的 SQL 效率很低,有什么解决方法吗?
- arrays - Dart 上的 Google Kick Start Time Limited
- android - 有没有办法通过识别用户而不是设备来发送通知?
- docker - Windows 8 上的 Docker 安装问题
- reactjs - 我在使用反应路由器dom的反应应用程序中遇到问题,并且有像authaPage这样的页面路由,