【问题标题】:Varying alpha or colors for pyplot markers based on data根据数据改变 pyplot 标记的 alpha 或颜色
【发布时间】:2016-04-25 17:11:18
【问题描述】:

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

【问题讨论】:

标签: python matplotlib colors


【解决方案1】:

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

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

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

【讨论】:

  • @cphlewis 谢谢!对我的答案进行了更改
  • 非常感谢。一个后续问题:当我这样做并使用 plt.colorbar().set_label('text',rotation=90) 时,我收到一条错误消息“TypeError: You must first set_array for mappable”,以及一个看起来好像它有两个维度。我该如何解决?需要明确的是,我将 RGB 值和 alpha 值都映射到(不同的)变量,但我真的只关心颜色条上显示的 RGB 值。谢谢。
猜你喜欢
  • 2019-07-07
  • 1970-01-01
  • 2018-07-08
  • 2021-02-27
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多