【问题标题】:pandas.DataFrame.plot showing colormap inconsistentlypandas.DataFrame.plot 不一致地显示颜色图
【发布时间】:2022-10-15 21:36:14
【问题描述】:

所以我试图制作一些情节并试图使用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")

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

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

【问题讨论】:

  • 是的,这很奇怪,最接近的是 pandas scatter plot c takes str, int or array-like (虽然我不确定为什么 t 不是指您再次 int 的索引)。无论如何,解决方法是使用 matplotlib 而不是 df.plot,如果有帮助,我可以发布答案(现在没有这样做,因为问题是关于根本原因而不是关于修复)。
  • 即使df.plot(kind="scatter", x=0, y=1, c=df.index.values.tolist(), cmap='jet') 回落到 viridis,而 df.index.values.tolist() 显然只是 int。
  • @MagnusO_O 将其作为答案发布就可以了。我将编辑我的问题,因此它建议解决方法也是可以接受的^_^

标签: python pandas dataframe matplotlib colormap


【解决方案1】:

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

一个解决方法是使用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()

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

我能找到的最接近的是 pandas scatter plot c 需要

str、int 或类似数组

(虽然我不确定为什么 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。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2020-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-31
      • 2020-05-29
      相关资源
      最近更新 更多