matplotlib panda.DataFrame.plot显示色彩Map表不一致

rjee0c15  于 2022-11-15  发布在  其他
关注(0)|答案(2)|浏览(123)

所以我试图制作一些情节,并试图使用cmap“jet”。它一直以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")

对于这里发生的事情有什么想法吗?我可以告诉它与dataframe中字段的dtype有关(在第一组代码中添加了dypte=“float”并得到了与第二组代码相同的结果),但不明白为什么会是这种情况。
当然,如果我的代码没有问题,我真正想要的是一个解决方案。

toiithl6

toiithl61#

它实际上似乎与Pandas(散点)图有关,正如你所指出的dtype浮动-一些更多的细节在最后。

解决方法是使用matplotlib。

最后,图看起来是一样的,但是cmap="jet"设置也适用于float dtype:

代码:

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 instead of the Object Oriented Interface的较短版本(稍微接近简短的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()

关于Pandasdf.plot不遵循cmap设置的根本原因:
我能找到的最接近的是pandas scatter plotc
字符串、整型或类似数组
(虽然我不确定为什么t没有引用索引,而索引又是int)。
甚至df.plot(kind="scatter", x=0, y=1, c=df.index.values.tolist(), cmap='jet')福尔斯了viridis,而df.index.values.tolist()显然只是int。
更奇怪的是,pandas df.plot在默认情况下也使用matplotlib:
使用plotting. backend选项指定的后端。默认情况下,使用matplotlib。

wi3ka0sx

wi3ka0sx2#

看起来这是panda 1.5.0中的一个新bug。将panda恢复到1.4.4可以修复它。所以如果你不需要1.5.0本身,我建议重新安装1.4.4直到bug修复。

相关问题