【问题标题】:Python 3d scatterplot colormap issuePython 3d散点图颜色图问题
【发布时间】:2013-02-24 16:01:34
【问题描述】:

我有四维数据(x、y、z 位移;以及各自的电压),我希望在 python 中绘制 3d 散点图。我已经得到了要渲染的 3d 图,但是我想使用颜色图来改变点的颜色,这取决于点电压的大小。

我尝试了一些方法,但似乎无法正常工作我收到错误 ValueError: Cannot convert argument type <type 'numpy.ndarray'> to rgba array。我不确定如何转换我需要转换的内容,所以如果有人可以提供一些帮助,我将不胜感激。

我的代码在这里:

fig = plt.figure()
from mpl_toolkits.mplot3d import Axes3D
cmhot = plt.cm.get_cmap("hot")
ax = fig.add_subplot(111, projection='3d',)
ax.scatter(x, y, z, v, s=50, c = cmhot)
plt.show()

【问题讨论】:

标签: python matplotlib color-mapping


【解决方案1】:

ax.scatter 可以采用颜色参数c,它是一个标量序列(例如listarray),以及一个cmap 参数来指定颜色映射。因此,要使颜色根据电压的幅度而变化,您可以定义:

c = np.abs(v)

这使得正负电压具有相同的颜色。如果您希望每种颜色(正或负)都有自己的颜色,则可以使用 c = v


例如,

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
x, y, z, v = (np.random.random((4,100))-0.5)*15
c = np.abs(v)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
cmhot = plt.get_cmap("hot")
cax = ax.scatter(x, y, z, v, s=50, c=c, cmap=cmhot)

plt.show()

【讨论】:

  • 非常感谢你们俩。我明白我现在做错了什么。但是,我还有一个问题。以上述方式修复我的代码仍然会给我蓝色的散点(所有相同的阴影)。此外,复制和粘贴上面由 unutbu 给出的示例代码会得到与上面显示的相同的图,但同样只有蓝色。这会让我相信,也许我错过了使用彩色地图所需的任何包。有没有我丢失的包裹,或者什么?我已经使用 pythonxy 发行版有一段时间了,直到今天还不需要颜色图。
  • 嗯,这是一个奇怪的问题。抱歉,我不知道解决方案。我四处搜索,但找不到有关此行为的任何其他问题/报告。您可能想尝试在此处发布有关如何解决此问题的问题,或检查您的 .matplotlibrc 配置文件(搜索“蓝色”或“后端”,或者只是浏览以查看是否有任何东西看起来像罪魁祸首),或者 - 如果它不太难——重新安装pythonxy。
  • 附言。我不认为你是 missing 一个包,因为plt.get_cmap("hot") 不会引发异常。
  • matplotlib 中存在(曾经?)一个错误,请参阅 SO:stackoverflow.com/questions/8971309/… 上的此线程
猜你喜欢
  • 2013-08-16
  • 2023-03-08
  • 2019-05-14
  • 2018-07-30
  • 1970-01-01
  • 1970-01-01
  • 2011-07-26
  • 2016-12-30
  • 1970-01-01
相关资源
最近更新 更多