2024-05-13 07:20:48 发布
网友
我有一个二维数组,有5列和一些行。不同的列有以下条目x1 y1 x2 y2 z 我想绘制一个从(x1,y1)到(x2,y2)的箭头,箭头的颜色应该取自与一些内置颜色映射相对应的z列。 我该怎么做matplotlib/python?
x1 y1 x2 y2 z
你可以这样做:
import numpy as np import matplotlib.pyplot as plt import matplotlib.colors as colors import matplotlib.cm as cmx DATA = np.random.rand(5,5) cmap = plt.cm.jet cNorm = colors.Normalize(vmin=np.min(DATA[:,4]), vmax=np.max(DATA[:,4])) scalarMap = cmx.ScalarMappable(norm=cNorm,cmap=cmap) for idx in range(0,len(DATA[:,1])): colorVal = scalarMap.to_rgba(DATA[idx,4]) plt.arrow(DATA[idx,0], #x1 DATA[idx,1], # y1 DATA[idx,2]-DATA[idx,0], # x2 - x1 DATA[idx,3]-DATA[idx,1], # y2 - y1 color=colorVal) plt.show()
您希望使用scalarMap.to_rgba将z值转换为参数,以传递给arrow命令的color选项。 你的结果应该是这样的:
scalarMap.to_rgba
z
arrow
color
编辑 如果你也想看彩色条,事情就有点棘手了。下面是一个最新的最小示例:
import numpy as np import matplotlib.pyplot as plt import matplotlib.colors as colors import matplotlib.cm as cmx import matplotlib as mpl DATA = np.random.rand(5,5) cmap = plt.cm.jet cNorm = colors.Normalize(vmin=np.min(DATA[:,4]), vmax=np.max(DATA[:,4])) scalarMap = cmx.ScalarMappable(norm=cNorm,cmap=cmap) fig = plt.figure() ax = fig.add_axes([0.1, 0.1, 0.7, 0.85]) # [left, bottom, width, height] axc = fig.add_axes([0.85, 0.10, 0.05, 0.85]) for idx in range(0,len(DATA[:,1])): colorVal = scalarMap.to_rgba(DATA[idx,4]) ax.arrow(DATA[idx,0], # x1 DATA[idx,1], # y1 DATA[idx,2]-DATA[idx,0], # x2 - x1 DATA[idx,3]-DATA[idx,1], # y2 - y1 color=colorVal) cb1 = mpl.colorbar.ColorbarBase(axc, cmap=cmap, norm=cNorm,orientation='vertical') plt.show()
注意事项:
import matplotlib as mpl
ColorbarBase
add_axes
[left, botton, width, height]
left + width
ax
axc
cmap
cNorm
你的身材应该是这样的:
编辑2
如果希望箭头上有不同颜色的边,请将color更改为facecolor(或fc),并指定edgecolor(ec)。此外,您现在可能需要控制箭头的宽度(default = ^{})和头部的宽度(default = ^{})。
facecolor
fc
edgecolor
ec
plt.arrow(DATA[idx,0], #x1 DATA[idx,1], # y1 DATA[idx,2]-DATA[idx,0], # x2 - x1 DATA[idx,3]-DATA[idx,1], # y2 - y1 facecolor=colorVal, edgecolor='k', width=0.005, head_width=0.01)
你可以这样做:
您希望使用
scalarMap.to_rgba
将z
值转换为参数,以传递给arrow
命令的color
选项。你的结果应该是这样的:
编辑
如果你也想看彩色条,事情就有点棘手了。下面是一个最新的最小示例:
注意事项:
import matplotlib as mpl
的附加ColorbarBase
add_axes
命令以相对单位的[left, botton, width, height]
作为输入。所以右边由left + width
给出。ax
,即初始图形。axc
上绘制冒号。将cmap
、规范化、cNorm
和方向作为参数传递。你的身材应该是这样的:
编辑2
如果希望箭头上有不同颜色的边,请将} )和头部的宽度(default = ^{} )。
color
更改为facecolor
(或fc
),并指定edgecolor
(ec
)。此外,您现在可能需要控制箭头的宽度(default = ^{相关问题 更多 >
编程相关推荐