提问人:swygerts 提问时间:10/6/2022 最后编辑:swygerts 更新时间:10/15/2022 访问量:527
熊猫。DataFrame.plot 显示颜色图不一致
pandas.DataFrame.plot showing colormap inconsistently
问:
所以我试图制作一些情节,并试图使用 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")
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")
对这里发生了什么有什么想法吗?我可以说它与数据帧中字段的 dtype 有关(将 dypte=“float” 添加到第一组代码中,并得到与第二组代码相同的结果),但不明白为什么会这样。
当然,我真正想要的是如果我的代码没有问题,我真正想要的是一种解决方法。
答:
它实际上似乎与熊猫(分散)图有关,正如您指出的那样,dtype float - 最后还有更多细节。
解决方法是使用 matplotlib。
绘图最终看起来是一样的,但该设置也适用于 float dtype:cmap="jet"
法典:
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。
看起来这是 pandas 1.5.0 中的一个新错误。将 pandas 恢复到 1.4.4 可以修复它。因此,如果您本身不需要 1.5.0,我建议重新安装 1.4.4,直到错误修复。
评论
c takes str, int or array-like
t
df.plot
df.plot(kind="scatter", x=0, y=1, c=df.index.values.tolist(), cmap='jet')