多次调用 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() 后颜色一致的主要内容,如果未能解决你的问题,请参考以下文章
为啥 LocationManager 会多次调用 startUpdatingLocation?
Android JobScheduler onStartJob 多次调用