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

4

我有一个相当大的数据集,包含了我用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 的新手


1
请参考以下链接的答案:https://dev59.com/-WIk5IYBdhLWcg3wl_Ap?rq=1您需要将颜色以RGBA格式传递,其中A定义了alpha值。 - cphlewis
通常情况下,Matplotlib图库非常有帮助(加载了许多小图片):http://matplotlib.org/gallery.html - cphlewis
1个回答

4
使用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()

enter image description here

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

编辑:感谢@cphlewis的评论,这应该比我的原始答案更有效。


@cphlewis 谢谢!我已经对我的回答进行了更改。 - Nate
非常感谢。还有一个跟进的问题:当我这样做并使用plt.colorbar().set_label('text',rotation=90)时,我会收到一个错误,说“TypeError: You must first set_array for mappable”,以及一个看起来有两个维度的空白色条。我该如何解决这个问题? 明确一下,我正在将RGB值和alpha值映射到(不同的)变量上,但我只关心在色条上显示RGB值。谢谢。 - Taha D.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接