Python 根据数据改变pyplot标记的alpha或颜色

Python 根据数据改变pyplot标记的alpha或颜色,python,matplotlib,colors,Python,Matplotlib,Colors,我有一个相当大的数据集,包含我用matplotlib绘制的“恒星粒子”的位置。数据被组织成列,其中三列对应于x、y和z坐标。我绘制了x和y坐标,但我希望能够使用z坐标作为粒子的颜色贴图。例如,z坐标较大的粒子具有较低的alpha或颜色不同。当前我的代码如下所示: f = open(input_file) line = f.readline() line = f.readline() px=[] py=[] pz=[] for line in f: ldata = line.split()

我有一个相当大的数据集,包含我用matplotlib绘制的“恒星粒子”的位置。数据被组织成列,其中三列对应于x、y和z坐标。我绘制了x和y坐标,但我希望能够使用z坐标作为粒子的颜色贴图。例如,z坐标较大的粒子具有较低的alpha或颜色不同。当前我的代码如下所示:

f = open(input_file)
line = f.readline()
line = f.readline()
px=[]
py=[]
pz=[]
for line in f:
    ldata = line.split()
    x = np.float(ldata[2])
    y = np.float(ldata[3])
    z = np.float(ldata[4])
px.append(x)
py.append(y)
pz.append(z)
plt.plot(px,py,'ro',alpha=0.1)
plt.savefig(output_file)

我是python新手

使用
plt.cm.
创建颜色列表,并更改alpha值(RGBA数组的最后一列)以匹配
pz
数据

import numpy as np
import matplotlib.pyplot as plt

px = np.arange(0,10,0.5)
py = np.random.randn(20)
pz = np.arange(0,1,0.05) 
colors = plt.cm.Reds(np.arange(0,1,0.05))
colors[:,-1] = pz 

plt.figure()
plt.scatter(px,py,color=colors)
plt.show()

请记住,的alpha关键字只接受0到1之间的值。如果您的
pz
数据不在该范围内,则需要对其进行缩放或修改,以使其正常工作


编辑:由于@cphlewis的评论而编辑,这应该比我的原始答案有效得多

请查看答案:您希望将颜色传递为RGBA,其中A定义alpha值。matplotlib库通常很有用(加载大量小图片):@cphlewis谢谢!对我的回答做了修改,非常感谢。一个后续问题:当我这样做并使用plt.colorbar().set_label('text',rotation=90)时,我得到一个错误,上面写着“TypeError:您必须首先为可映射设置_数组”,还有一个空白的colorbar,看起来好像它有两个维度。我该如何解决这个问题?要明确的是,我将RGB值和alpha值映射到(不同的)变量,但我真正关心的是颜色栏上显示的RGB值。谢谢