【问题标题】:Different colours for arrows in quiver plot箭袋图中箭头的不同颜色
【发布时间】:2017-02-22 21:57:50
【问题描述】:

我正在绘制一个箭头图,我的代码使用如下外部文件:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
from pylab import rcParams

data=np.loadtxt(r'data.dat')

x = data[:,0] 
y = data[:,1] 
u = data[:,2] 
v = data[:,3] 


plt.quiver(x, y, u, v, angles='xy', scale_units='xy', scale=1, pivot='mid',color='g')

数据文件基本上是这样的:

1 1 0 0
0 1 1 0
0 1 1 0
1 1 0 1

有没有办法为不同的箭头方向绘制不同的颜色?

Ps.:我的数据文件中有很多箭头,用一个不太合乎逻辑的句子,就像我用作示例的句子一样。

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    这可能会奏效:

    plt.quiver(x, y, u, v, np.arctan2(v, u), angles='xy', scale_units='xy', scale=1, pivot='mid',color='g')
    

    注意plt.quiver 的第五个参数是颜色。


    UPD。如果你想控制颜色,你必须使用colormaps。以下是几个例子:

    使用带有colors参数的颜色图:

    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib.cm as cm
    from matplotlib.colors import Normalize
    
    %matplotlib inline
    
    ph = np.linspace(0, 2*np.pi, 13)
    x = np.cos(ph)
    y = np.sin(ph)
    u = np.cos(ph)
    v = np.sin(ph)
    colors = arctan2(u, v)
    
    norm = Normalize()
    norm.autoscale(colors)
    # we need to normalize our colors array to match it colormap domain
    # which is [0, 1]
    
    colormap = cm.inferno
    # pick your colormap here, refer to 
    # http://matplotlib.org/examples/color/colormaps_reference.html
    # and
    # http://matplotlib.org/users/colormaps.html
    # for details
    plt.figure(figsize=(6, 6))
    plt.xlim(-2, 2)
    plt.ylim(-2, 2)
    plt.quiver(x, y, u, v, color=colormap(norm(colors)),  angles='xy', 
               scale_units='xy', scale=1, pivot='mid')
    

    您也可以像我的第一个示例中那样坚持使用第五个参数(与 colors 相比,它的工作方式略有不同)并更改默认颜色图以控制颜色。

    plt.rcParams['image.cmap'] = 'Paired'
    
    plt.figure(figsize=(6, 6))
    plt.xlim(-2, 2)
    plt.ylim(-2, 2)
    
    plt.quiver(x, y, u, v, np.arctan2(v, u), angles='xy', scale_units='xy', scale=1, pivot='mid')
    

    您还可以创建自己的颜色图,参见例如here.

    【讨论】:

    • 是的,这就是我想要的,但是 np.(arctan2(u,v) 是如何工作的?我不确定它在那里做什么
    • 通常 y 坐标(在这种情况下为v)作为第一个参数传递给arctan2,但这并不重要。 @Mac,反正切计算箭头向量与 -pi 和 pi 之间的正 x 轴之间的角度(以弧度为单位)。
    • 由于您需要颜色取决于箭头的角度,因此您必须以某种方式计算角度。为此,我使用了函数 atan2 (numpy.arctan2),它使用向量的坐标来计算角度(以弧度为单位)。详情请见en.wikipedia.org/wiki/Atan2
    • 谢谢大家!这很有帮助。如果不是太强调,有没有办法选择箭头的颜色,而不是自动获取它们?
    • 如果我理解正确,您对控制 matplotlib 使用的实际颜色的方法感兴趣。为此,您需要使用颜色图(将数字映射到颜色)。我扩展了答案以提供详细信息。 (请注意,如果答案回答了您的问题,您可以点击绿色复选标记“接受”它。)
    猜你喜欢
    • 2022-01-18
    • 2016-06-26
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-04
    • 2017-03-17
    • 1970-01-01
    相关资源
    最近更新 更多