如何修改Pandas DataFrame堆叠面积图的填充颜色?
修改Pandas堆叠面积图的填充颜色
嘿,这问题其实不难搞定,不用太纠结Axes类的复杂细节,给你两种实用的方法:
方法1:直接在绘图时指定颜色(最推荐)
df.plot.area()本身就支持colors参数,你只需要传入一个和列数对应的颜色列表就行,顺序和DataFrame的列顺序一一对应。比如:
import pandas as pd import numpy as np df = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd']) # 自定义颜色,每个颜色对应一列的填充色 custom_colors = ['#ff9999', '#66b3ff', '#99ff99', '#ffcc99'] ax = df.plot.area(linewidth=0, colors=custom_colors);
你可以用十六进制颜色码、matplotlib内置的颜色名称(比如'red'、'blue'),甚至RGB元组(比如(0.8, 0.2, 0.2))来定义颜色。
方法2:生成图后修改已有的填充区域
如果已经生成了Axes实例ax,想要调整颜色,可以通过遍历ax.patches来修改每个堆叠区域的填充色。这里要注意:堆叠面积图的patches顺序是从上层到下层的,也就是和DataFrame的列顺序相反,所以颜色列表要反过来写:
import pandas as pd import numpy as np df = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd']) ax = df.plot.area(linewidth=0); # 颜色顺序对应上层到下层的堆叠区域(和df列顺序相反) custom_colors = ['#ffcc99', '#99ff99', '#66b3ff', '#ff9999'] for patch, color in zip(ax.patches, custom_colors): patch.set_facecolor(color)
额外技巧:用colormap批量生成颜色
如果不想手动写颜色列表,可以用matplotlib的colormap来生成一组协调的颜色,比如:
import pandas as pd import numpy as np from matplotlib import cm df = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd']) # 从viridis色卡生成对应列数的颜色 custom_colors = cm.get_cmap('viridis', len(df.columns))(range(len(df.columns))) ax = df.plot.area(linewidth=0, colors=custom_colors);
这样就能快速得到一组渐变的配色啦~
内容的提问来源于stack exchange,提问作者L. Li
相关产品推荐
相关产品推荐

