【问题标题】:matplotlib, pyplot : custom color for a specific data valuematplotlib, pyplot : 特定数据值的自定义颜色
【发布时间】:2014-10-13 13:39:17
【问题描述】:

我正在为我的数据生成热图。

一切正常,但我有一个小问题。我的数据(数字)是从 0 到 10.000。

0 表示什么都没有(没有数据),目前 0 的字段只是采用我的色阶的最低颜色。我的问题是如何使 0 的数据具有完全不同的颜色(例如黑色或白色)

请看图片以更好地理解我的意思:

我的代码 (sn-p) 如下所示:

     matplotlib.pyplot.imshow(results, interpolation='none')
     matplotlib.pyplot.colorbar();
     matplotlib.pyplot.xticks([0, 1, 2, 3, 4, 5, 6, 7, 8], [10, 15, 20, 25, 30, 35, 40, 45, 50]);
     matplotlib.pyplot.xlabel('Population')
     matplotlib.pyplot.yticks([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 10, 15, 20, 25, 30, 'serial']);
     matplotlib.pyplot.ylabel('Communication Step');
     axis.xaxis.tick_top();
     matplotlib.pyplot.savefig('./results_' + optimisationProblem + '_dim' + str(numberOfDimensions) + '_' + statisticType + '.png');
     matplotlib.pyplot.close();

【问题讨论】:

  • 如果您只对等于0 的数据点有不同的颜色感兴趣,您可以使用for 循环将0 更改为nan。在imshow 中,nan 值将始终显示为white。但是,在这种情况下,不会有平滑的过渡,即值 0.0001 仍将是 deep blue-ish。如果您确实想要这种转换,您可能需要创建您的own colorbar
  • 非常感谢。只需将0 更改为nan 即可解决我的问题。如果您将此评论作为答案,我会将其标记为正确答案。

标签: python matplotlib colors plot


【解决方案1】:

如果您对值00.0001 之间的平滑过渡不感兴趣,您可以将每个等于0 的值设置为NaN。这将导致白色,而0.0001 仍将是deep blue-ish

在下面的代码中,我包含了一个示例。我随机生成数据。因此,我从数组中选择一个元素并将其设置为NaN。这导致颜色为白色。我还包括了一行,您可以在其中将每个等于 0 的数据点设置为 NaN

import numpy
import matplotlib.pyplot as plt

#Random data
data = numpy.random.random((10, 10))

#Set all data points equal to zero to NaN
#data[data == 0.] = float("NaN")

#Set single data value to nan
data[2][2] = float("NaN")

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)

ax.imshow(data, interpolation = "nearest")

plt.show()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 2020-09-28
    • 1970-01-01
    • 2016-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多