【发布时间】:2021-07-24 13:21:47
【问题描述】:
虽然有许多离散颜色图的示例(a、b、c),但我想做一些不同的事情。我想要一个 3D 曲面图,它在小值和零之间具有鲜明的对比,因此颜色“跳跃”或颜色图是部分离散的。我这样做的原因是我想更清楚地区分小值和情节中被认为是“零”的值。
我正在生成一个 3D 曲面图并希望使用颜色图(如 'terrain')来指示 Z 轴上的高度。但是,我希望颜色图中有一个“间隙”,以突出显示与z=0 足够远的值。具体来说,假设z<1e-6 是颜色图的底部阈值(例如,深蓝色表示地形),但任何高于该阈值的值都位于颜色图的中间(例如,绿色表示地形)。
下面是一个简单的例子和对应的输出
import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt
y = np.linspace(-3, 3, 100)
x = np.linspace(-3, 3, 100)
z = np.zeros(shape=(x.shape[0], y.shape[0]))
for i in range(x.shape[0]):
# creating some generic Z-axis data
z[:, i] = norm.pdf(y, loc=0, scale=0.2+(i/100))
z[:, i] = z[:, i] / np.sum(z[:, i]) # normalizing
z = np.where(z < 1e-6, 0, z) # setting 'small enough' threshold
x_mat, y_mat = np.meshgrid(x, y)
f1 = plt.axes(projection='3d')
f1.plot_surface(x_mat, y_mat, z, cmap='terrain', edgecolor='none', rstride=1)
plt.show()
我希望输出看起来像所有“浅蓝色”区域都会变成绿色。一旦低于定义的阈值(此处为1e-6),颜色就会跳到深蓝色(因此没有区域会是浅蓝色)。
【问题讨论】:
-
您还可以查看文档以创建自己的颜色图:matplotlib.org/stable/tutorials/colors/…
标签: python matplotlib