熊猫。DataFrame.plot 显示颜色图不一致

pandas.DataFrame.plot showing colormap inconsistently

提问人:swygerts 提问时间:10/6/2022 最后编辑:swygerts 更新时间:10/15/2022 访问量:527

问:

所以我试图制作一些情节,并试图使用 cmap“喷气式飞机”。它一直以 viridis 的形式出现,所以我在 SE 周围挖掘并尝试了一些非常简单的情节:

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 100)
y = x
t = x
df = pd.DataFrame([x,y]).T

df.plot(kind="scatter", x=0, y=1, c=t, cmap="jet")

enter image description here

x = np.arange(0, 100.1)
y = x
t = x
df = pd.DataFrame([x,y]).T

df.plot(kind="scatter", x=0, y=1, c=t, cmap="jet")

enter image description here

对这里发生了什么有什么想法吗?我可以说它与数据帧中字段的 dtype 有关(将 dypte=“float” 添加到第一组代码中,并得到与第二组代码相同的结果),但不明白为什么会这样。

当然,我真正想要的是如果我的代码没有问题,我真正想要的是一种解决方法。

python pandas 数据帧 matplotlib 颜色图

评论

1赞 MagnusO_O 10/7/2022
是的,这很奇怪,最接近的是熊猫散点图(虽然我不确定为什么不指你再次成为 int 的索引)。无论如何,解决方法是使用 matplotlib 而不是 ,如果有帮助,我可以发布答案(现在没有这样做,因为问题是关于根本原因而不是关于修复)。c takes str, int or array-liketdf.plot
0赞 MagnusO_O 10/7/2022
甚至回退到 viridis,而 df.index.values.tolist() 显然只是 int。df.plot(kind="scatter", x=0, y=1, c=df.index.values.tolist(), cmap='jet')
0赞 swygerts 10/8/2022
@MagnusO_O将其作为答案发布就可以了。我将编辑我的问题,以便它表明解决方法也是可以接受^_^的

答:

2赞 MagnusO_O 10/8/2022 #1

它实际上似乎与熊猫(分散)图有关,正如您指出的那样,dtype float - 最后还有更多细节。

解决方法是使用 matplotlib。
绘图最终看起来是一样的,但该设置也适用于 float dtype:
cmap="jet"

enter image description here

法典:

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

x = np.arange(0, 100.1)
y = x
t = x
df = pd.DataFrame([x,y]).T

fig, ax = plt.subplots(1,1)

sc_plot = ax.scatter(df[0], df[1], c=t, cmap="jet")
fig.colorbar(sc_plot)

ax.set_ylabel('1')
ax.set_xlabel('0')

plt.show()

或者使用 pyplot 而不是面向对象接口的较短版本(更接近简短的 df.plot 调用):

df = pd.DataFrame([x,y]).T

sc_plot = plt.scatter(df[0], df[1], c=t, cmap="jet")
plt.colorbar(sc_plot)
plt.ylabel('1')
plt.xlabel('0')
plt.show()

关于 pandas 不遵循 cmap 设置的根本原因:df.plot

我能找到的最接近的是熊猫散点图需要c

str、int 或类数组

(虽然我不确定为什么 t 不是指再次为 int 的索引)。

甚至回退到 viridis,而显然只是 int。df.plot(kind="scatter", x=0, y=1, c=df.index.values.tolist(), cmap='jet')df.index.values.tolist()

这更奇怪,因为 pandas df.plot 也默认使用 matplotlib:

使用选项 plotting.backend 指定的后端。默认情况下, 使用 matplotlib。

1赞 Oleg Sergeev 10/15/2022 #2

看起来这是 pandas 1.5.0 中的一个新错误。将 pandas 恢复到 1.4.4 可以修复它。因此,如果您本身不需要 1.5.0,我建议重新安装 1.4.4,直到错误修复。