- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是一名气候学家,经常绘制异常现象,例如使用“蓝到白到红”颜色图的温度场。为了使图表更具可读性,我使用我在互联网上“找到”的函数(但我不太了解)将颜色图离散化为一定数量的级别(箱):
像这样:
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import cm
import matplotlib.colors as cols
from numpy.random import randn
def cmap_discretize(cmap, N):
colors_i = np.concatenate((np.linspace(0, 1., N), (0.,0.,0.,0.)))
colors_rgba = cmap(colors_i)
indices = np.linspace(0, 1., N+1)
cdict = {}
for ki,key in enumerate(('red','green','blue')):
cdict[key] = [ (indices[i], colors_rgba[i-1,ki], colors_rgba[i,ki]) for i in xrange(N+1) ]
# Return colormap object.
return cols.LinearSegmentedColormap(cmap.name + "_%d"%N, cdict, 1024)
cmap_disc= cmap_discretize(cm.RdBu_r,12)
fig, ax = plt.subplots()
data = np.clip(randn(250, 250), -1, 1)
cax = ax.pcolor(data, cmap=cmap_disc)
plt.colorbar(cax)
plt.show()
这导致
现在我想将最中间的两个部分(即接近 0 的两个部分)设置为白色,因为我不想显示非常小的偏差。
我的目标是最终得到类似这样的东西:
我真的很难弄清楚如何相应地修改这些 LinearSegmentedColormap。有人可以帮我吗?
最佳答案
您找到的函数构建了一个数据结构(在 cdict
中)用于定义 LinearSegmentedColormap使用不执行任何插值的段(即 y1
行中的 i
始终与 y0
行中的 i+1
相同,这给出了常量或离散颜色“带”)。
cdict
是一个奇怪的数据结构,一个包含键 'red'
的字典, 'green'
和 'blue'
.这些键中的每一个的值都是一个列表结构,其中包含 (x, y0, y1)
形式的元组. x
是颜色图坐标,它是介于 0 和 1 之间的一些 float 。y0
是 x
的“左”边的颜色值, 和 y1
是 x
右边的颜色值.颜色在 x
的连续值之间的波段中线性插值。 ;如果第一个元组由 (0, A, B)
给出第二个元组 (X, C, D)
, 那么一个点的颜色t
在 0
之间和 X
将由 (t - 0) / (X - 0) * (C - B) + B
给出.
就您的目的而言,您的函数运行良好,但需要将颜色图中间附近的“ strip ”替换为白色。您可以尝试以下操作:
def cmap_discretize(cmap, N):
colors_i = np.concatenate((np.linspace(0, 1., N), (0.,0.,0.,0.)))
colors_rgba = cmap(colors_i)
indices = np.linspace(0, 1., N+1)
cdict = {}
for ki,key in enumerate(('red','green','blue')):
cdict[key] = [ (indices[i], colors_rgba[i-1,ki], colors_rgba[i,ki]) for i in xrange(N+1) ]
# "white out" the bands closest to the middle
num_middle_bands = 2 - (N % 2)
middle_band_start_idx = (N - num_middle_bands) // 2
for middle_band_idx in range(middle_band_start_idx,
middle_band_start_idx + num_middle_bands):
for key in cdict.keys():
old = cdict[key][middle_band_idx]
cdict[key][middle_band_idx] = old[:2] + (1.,)
old = cdict[key][middle_band_idx + 1]
cdict[key][middle_band_idx + 1] = old[:1] + (1.,) + old[2:]
# Return colormap object.
return cols.LinearSegmentedColormap(cmap.name + "_%d"%N, cdict, 1024)
关于python - 修改离散 LinearSegmentedColormap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19199359/
如何在 Flutter 中使 slider 离散看起来像上图? slider discrete 最佳答案 使用 divisions Slider 的属性(property)小部件将其分成相等的部分,然
我正在创建一个带有颜色条的散点图 plt.scatter(X, Y, c=Z) plt.colorbar() plt.show() plt.close() 其中 X 和 Y 是 float 组,Z 是
我刚刚在 android studio 中发现了 seekbar 离散小部件,我发现它非常有用,但我不知道如何删除步骤指示器,或者用更合适的可绘制对象更改它们。 有人设法做到了吗? 这是我当前搜索栏的
问题 请注意以下问题:巫师可以创建和销毁 rune 。创建一个新的 rune 需要消耗与先前创建的 rune 数量成比例的法力。摧毁 rune 会恢复创建 rune 所用的法力。下面,我提出一个可能的
我正在尝试使用 ggplot2 中的 sf 和 geom_sf 制作 map ,其中一组点数据使用连续颜色比例(-1 到 1),一组线数据使用离散比例(a、b、c、d)着色。但是,当我在同一张 map
我正在尝试在具有连续状态(dim.= 20)和离散操作(3 个可能的操作)的环境中找到最佳策略。并且有一个特定的时刻:对于最佳策略,一个操作(称为“操作 0”)的选择频率应比其他两个操作高得多(频率约
仅使用 x-y 位置移动绘制圆弧的最佳方法是什么?例如,假设我想在点 (4,4) 处绘制一个半径为 4 的圆。让我们看看我的“抽屉”从 (4,0) 开始,每个方向的分辨率为 0.1 步。我将如何创建一
我正在使用一个使用广义加法模型的随机站点级效应来拟合一个模型,该模型在 mgcv 中实现。 R 包。我一直在使用函数 gam() 执行此操作但是,为了加快速度,我需要转到 bam()框架,与gam()
这个问题在这里已经有了答案: Make a line separated by group in bar chart (3 个答案) 关闭上个月。 我正在尝试使用 ggplot2 在条形图的每个条上
这个问题在这里已经有了答案: Make a line separated by group in bar chart (3 个答案) 关闭上个月。 我正在尝试使用 ggplot2 在条形图的每个条上
是否可以同时使用 Intel HD 4000 集成显卡和独立 GPU,OpenCL(或 CUDA)作为设备,CPU 作为主机?我想要一些代码在集成显卡上运行,而其他代码同时在我的 GPU 上运行。 最
我是一名优秀的程序员,十分优秀!