【问题标题】:How to make multiple lines' color changing with values corresponding to gradient color? [duplicate]如何使多条线的颜色随渐变色对应的值变化? [复制]
【发布时间】:2019-04-09 07:52:56
【问题描述】:

我有数千行,每行的值都在 0 到 1 之间,与某个功能相关。我想做的是画出这些线条,同时用颜色显示它们的特征。也就是说,如果线条值为 0.5,那么我希望这条线条具有颜色条的中间颜色。如何构建此代码?下面是一个例子。

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure(figsize=(5, 5))
ax = fig.add_subplot(111)

x = np.linspace(0, 1, 100)
b_range=np.linspace(0, 1, 5)

for j in range(len(b_range)):
    b=b_range[j]
t=b+(1-b)*(1-x)/(1-0)   
ax.plot(x, t,color="red")


plt.show()

【问题讨论】:

  • 我觉得文档很清楚matplotlib.org/users/colors.html你可以指定一个RGB值的元组
  • @ChatterOne 我发现我很难理解。你能再解释一下吗。我希望我选择两种颜色,比如说“r”和“b”,我希望“r”对应于值 1,“b”对应于 0,如何将所有其他行的值分配给中间颜色?
  • 如果你想了解自己,而不是准备好解决方案,一步一步地尝试,从:ax.plot(x, t, color=(b_range[j], 0, 0))
  • @ChatterOne 太酷了。我想要'#377eb8','yellow','#e41a1c'之间的颜色怎么样?有什么方法可以改变 color=(b_range[j], 0, 0)) 以在中间制作相应的颜色?
  • 如果你有超过 10 行,LineCollection 就是much faster

标签: python matplotlib colors line


【解决方案1】:

使用cmap中的颜色图:

import numpy as np

from matplotlib import pyplot as plt
from matplotlib import colors

fig, ax = plt.subplots(figsize=(6, 6))

cdict = {'red':   ((0.0,  0.22, 0.0),
                   (0.5,  1.0, 1.0),
                   (1.0,  0.89, 1.0)),

         'green': ((0.0,  0.49, 0.0),
                   (0.5,  1.0, 1.0),
                   (1.0,  0.12, 1.0)),

         'blue':  ((0.0,  0.72, 0.0),
                   (0.5,  0.0, 0.0),
                   (1.0,  0.11, 1.0))}

cmap = colors.LinearSegmentedColormap('custom', cdict)

for i in np.linspace(0, 1):
    # Plot 50 lines, from y = 0 to y = 1, taking a corresponding value from the cmap
    ax.plot([-1, 1], [i, i], c=cmap(i))

完整的彩色地图列表可通过here获取。

【讨论】:

  • 谢谢,这正是我所需要的。另外,我可以亲自更改 cm.get_cmap 中的“等离子”颜色吗?我想在列表 ['#377eb8','yellow','#e41a1c'] 中选择类似于蓝色到黄色到红色的颜色渐变。但是我该如何改变呢?
  • @IvyGao 编辑了我的答案,请检查一下。
  • 另一个小问题。为什么我把值 0 和 1,颜色是一样的。我怎么能找到这个 ['#377eb8','yellow','#e41a1c'] 改变的颜色呢?谢谢。
  • 我找到了这个"cmap = colors.LinearSegmentedColormap.from_list('mycmap', ['#377eb8','yellow','#e41a1c'])".. 但是c的问题=cmap(0.0) 和 c=cmap(1.0) 仍然具有相同的颜色,应该是从蓝色到红色。这是什么原因?
  • 01 不同于 0.01.0。您可以使用02550.01.0
【解决方案2】:

你可以自己改变它,用一个颜色变量控制下一个颜色

这是一个例子

import numpy as np
import matplotlib.pyplot as plt


def format_axes(ax):
    ax.margins(0.2)
    ax.set_axis_off()

points = np.ones(5)  # Draw 5 points for each line
text_style = dict(horizontalalignment='right', verticalalignment='center',
                  fontsize=12, fontdict={'family': 'monospace'})
COLOR = (0, 0, 0.1)

def color_conv(color_range):
    return (COLOR[0] + color_range, COLOR[1], COLOR[2]) 

# Plot all line styles.
fig, ax = plt.subplots()

for color_ite in range(10):   
    ax.text(-0.1, color_ite, '-', **text_style)
    ax.plot(color_ite * points, color=color_conv(color_ite/10), linewidth=3)
    format_axes(ax)
    ax.set_title('line styles')

plt.show()

输出:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    • 1970-01-01
    • 2021-01-15
    • 2013-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多