多次调用 pd.DataFrame.plot() 后颜色一致

Posted

技术标签:

【中文标题】多次调用 pd.DataFrame.plot() 后颜色一致【英文标题】:consistent colors after multiple calls of pd.DataFrame.plot() 【发布时间】:2018-08-05 22:06:03 【问题描述】:

我有一个数据框 v,其中包含一些数字数据。

v=pd.DataFrame(data=np.random.rand(300,3))

我想在同一个matplotlib 图上绘图:

散点图 相同点的移动平均线

我这样做是使用pd.DataFrame.plot()

plt.figure()
v.plot(style='o',legend=False,ax=plt.gca(),alpha=0.2,ls='')
v.rolling(7).mean().plot(legend=False,ax=plt.gca())

这很好用。

但是,用第一个图绘制的点根据它们的行号着色。第二个图中的线条也是如此。

我希望两种颜色在两个绘图命令之间保持一致,所以 通过移动平均获得的线与散点图中的颜色相同。如何获得?

这是我运行代码的内容。 显然,我无法弄清楚红线是对应于绿色橙色还是蓝色点......

【问题讨论】:

【参考方案1】:

原创

我相信你需要 -

%matplotlib inline # only for jupyter notebooks
import pandas as pd
from matplotlib import pyplot as plt
import numpy as np

colors = 0: 'red', 1:'green', 2:'blue'
v=pd.DataFrame(data=np.random.rand(300,3))
plt.figure()
v.plot(marker='o',legend=False,ax=plt.gca(),ls='', alpha=0.2, color=colors.values())
v.rolling(7).mean().plot(legend=False,ax=plt.gca(), color=colors.values())

更新

随你去 -

选项 1(没有额外的 cm 依赖项)

colors_rand = np.random.rand(len(v.columns),3)
v.plot(marker='o',legend=False,ax=plt.gca(),ls='', alpha=0.5, color=colors_rand )
    v.rolling(7).mean().plot(legend=False,ax=plt.gca(), color=colors_rand )

选项 2(根据 OP 的建议)

v.plot(marker='o',legend=False,ax=plt.gca(),ls='', alpha=0.5, colors=cm.rainbow(np.linspace(0,1,v.shape[1]) ))
v.rolling(7).mean().plot(legend=False,ax=plt.gca(), colors=cm.rainbow(np.linspace(0,1,v.shape[1]) ))

【讨论】:

您能否通过添加颜色可以生成为 colors=cm.rainbow(np.linspace(0,1,v.shape[1])) 来使其更通用 只有一句话。在选项 1 中,您可能需要“冻结”第一次调用 random 产生的颜色,以便再次使用它们

以上是关于多次调用 pd.DataFrame.plot() 后颜色一致的主要内容,如果未能解决你的问题,请参考以下文章

为啥 ContentObserver 会被多次调用?

多次调用getView方法

为啥 LocationManager 会多次调用 startUpdatingLocation?

Android JobScheduler onStartJob 多次调用

numberOfRowsInSection 多次调用但 cellForRowAtIndexPath 从未调用

我多次调用相同的服务(AFNetworking)