【问题标题】:Adjusting matplotlib colormap to show simulation调整 matplotlib 颜色图以显示模拟
【发布时间】:2016-09-21 18:22:34
【问题描述】:

我正在根据这个实验构建一个小模拟: https://www.youtube.com/watch?v=plVk4NVIUh8,显示了细菌随时间的进化。

我在培养皿边缘初始化了一些具有随机抗性的细菌:

随着细菌的扩散,与非占用空间的反差越来越小,100代后变成这样:

我使用 plt.matshow(Map) 制作图片,其中 Map 是一个 2D numpy 数组,具有细菌抗性值(总是大于 0),未占用空间表示为 0。我尝试了不同的颜色图,但是它没有帮助。我的目标是让非占用空间成为一些恒定的深色, 被感染的空间有些浅色,对比可以看出不同的阻力值。

你能帮帮我吗?

【问题讨论】:

  • 尝试使用colorbar,它会显示您的体重秤是否正常。您可能需要手动设置vmin/vmaxmatshow 在后台使用 imshow,有时会随着缩放而起作用。考虑改用pcolormesh

标签: python numpy matplotlib simulation


【解决方案1】:

您可以获得带有深色的colormap 用于低值,例如“岩浆”并定义,正如 Andreas 建议的“vmin”值。例如

import matplotlib.pyplot as plt
from scipy import rand

a = rand(10, 20) + 0.5
a[0, 0] = 0
cmap = plt.get_cmap('magma')
img = plt.pcolormesh(a, cmap=cmap, vmin=0,)
img.figure.show()

干杯! S

【讨论】:

  • 谢谢,使用 vmin、vmax 值对我有很大帮助,但真正的问题是对数归一化
【解决方案2】:

我能够使可视化更好,使用对数归一化:假设我的细菌图具有非常不同的电阻值:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

size=10
a = rand(size, size) * 0.2
b = rand(size, size) * 2
c = rand(size, size) * 20
sumMap = np.concatenate((a,b,c), axis=1)

sumMap 是要绘制的 numpy 数组,有小号、中号和大号。 构建颜色图和规范化器:

maxval=np.max(sumh)
minval=np.min(sumh)
colormap = plt.get_cmap('magma')
norm = mpl.colors.LogNorm(vmax=maxval, vmin=minval)

如果我使用标准化,地图看起来像这样:

img = plt.pcolormesh(sumh, cmap=colormap,  norm=norm)
img.figure.show()

如果我不这样做:

img = plt.pcolormesh(sumh, cmap=cmap,  )
img.figure.show()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-22
    • 1970-01-01
    • 2021-09-11
    • 2022-07-05
    • 2016-05-19
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    相关资源
    最近更新 更多