嗨,我有一个简单的3D散点图-一个数据帧bm,列和索引分别为xy轴.当我绘制它时,我想添加一张彩色 map --也很简单,我已经在下面完成了.

然而,在我的数据bm中,我有一些我不想绘制的零-这也很容易-我将它们设置为NaN.However, this causes a problem with the colour matrix. scatter不喜欢这样.我已经try 了带NAN和不带NAN的传递 colored颜色 矩阵,但都失败了,并出现错误.

如果您删除将绘制的行bm = bm.replace({0: np.nan}),则下面的代码是完全有效的.

N = 100

bm = pd.DataFrame(
    index=pd.bdate_range(start='2012-01-01', periods=N, freq='B'), 
    data={x: np.random.randn(N) for x in range(1, 11)}
)

# Simulate some zeros
bm = pd.DataFrame(index=bm.index, columns=bm.columns, data=np.where(np.abs(bm.values) < 0.02, 0, bm.values))

# Set zeros to Nan so that I don't plot them
bm = bm.replace({0: np.nan})

z = bm.values
x = bm.columns.tolist()
y = bm.reset_index().index.tolist()
x, y = np.meshgrid(x, y)

# Set up plot
fig = plt.figure(figsize = (15,10))
ax = plt.axes(projection ='3d')

# plotting
ax.scatter(x, y, z, '.', c=bm.values, cmap='Reds')  # THIS FAILS

ax.xaxis.set_ticklabels(bm.columns);
ax.yaxis.set_ticklabels(bm.index.strftime('%Y-%m-%d'));

我们欢迎任何帮助.

推荐答案

不是c%确定为什么这是失败的,但我猜这可能与事实有关,c是错误的识别为RGB/RGBA数组,由于它的二维性质?

从文档中:

C: colored颜色 、 colored颜色 顺序或 colored颜色 顺序,可选 标记 colored颜色 .可能的值:

  • 单一 colored颜色 格式字符串.
  • 长度为n的一系列 colored颜色 .
  • 要使用Cmap和Norm映射到 colored颜色 的n个数字的序列.
  • 其中行为RGB或RGBA的二维array.

如果您在绘制之前将数据和坐标转换为1D,Scatter似乎可以很好地处理NaN……

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np


N = 100

bm = pd.DataFrame(
    index=pd.bdate_range(start='2012-01-01', periods=N, freq='B'), 
    data={x: np.random.randn(N) for x in range(1, 11)}
)

# Simulate some zeros
bm = pd.DataFrame(index=bm.index, columns=bm.columns, data=np.where(np.abs(bm.values) < 0.02, 0, bm.values))

# Set zeros to Nan so that I don't plot them
bm = bm.replace({0: np.nan})

# unstack dataframe
flat_bm = bm.reset_index(drop=True).unstack()
x = flat_bm.index.get_level_values(0)
y = flat_bm.index.get_level_values(1)
z = flat_bm.values


# Set up plot
fig = plt.figure(figsize = (15,10))
ax = plt.axes(projection ='3d')

# plotting
ax.scatter(x, y, z, '.', c=flat_bm.values, cmap='Reds')

ax.xaxis.set_ticklabels(bm.columns);
ax.yaxis.set_ticklabels(bm.index.strftime('%Y-%m-%d'));

Python相关问答推荐

使用plotnine和Python构建地块

我在使用fill_between()将最大和最小带应用到我的图表中时遇到问题

用Python解密Java加密文件

通过pandas向每个非空单元格添加子字符串

Pandas DataFrame中行之间的差异

cv2.matchTemplate函数匹配失败

在两极中过滤

通过ManyToMany字段与Through在Django Admin中过滤

在Python中调用变量(特别是Tkinter)

根据客户端是否正在传输响应来更改基于Flask的API的行为

判断Python操作:如何从字面上得到所有decorator ?

使用类型提示进行类型转换

GPT python SDK引入了大量开销/错误超时

如何使用加速广播主进程张量?

为什么Visual Studio Code说我的代码在使用Pandas concat函数后无法访问?

在pandas中,如何在由两列加上一个值列组成的枢轴期间或之后可靠地设置多级列的索引顺序,

修改.pdb文件中的值并另存为新的

使用元组扩展字典的产品挑战

Django-修改后的管理表单返回对象而不是文本

Python键盘模块不会立即检测到按键