如何为joypy脊线图的直方图子图设置不同颜色?
如何为joypy脊线直方图的各子图设置不同颜色?
我尝试创建脊线图(ridgeline plot),希望每个子图使用不同颜色。最初通过以下代码实现了颜色设置,但生成的不是直方图:
import joypy import numpy as np fig, axes = joypy.joyplot(log_df, color=["k","b","r","g"])
为生成直方图,我修改代码为:
fig, axes = joypy.joyplot(log_df, fill= True, hist= True, bins=128, overlap = 0, color=["k","b","r","g"])
此时出现报错:
The 'color' keyword argument must have one color per dataset, but 1 datasets and 4 colors were provided
该报错仅在绘制直方图时出现,我想知道如何为脊线直方图的各子图设置不同颜色?
解决方法
当启用hist=True时,joypy的参数处理逻辑会发生变化,直接通过color参数传递多色列表会出现数据集与颜色数量不匹配的问题。可以在绘制完成后,手动遍历每个子图,修改其直方图的颜色属性:
import joypy import numpy as np import pandas as pd # 示例数据:包含4列的DataFrame,对应4个脊线子图 log_df = pd.DataFrame(np.random.randn(1000, 4), columns=["Col1", "Col2", "Col3", "Col4"]) # 绘制脊线直方图(先不指定color参数) fig, axes = joypy.joyplot(log_df, fill=True, hist=True, bins=128, overlap=0) # 定义每个子图对应的颜色列表 colors = ["k", "b", "r", "g"] # 遍历子图和颜色,逐个设置直方图颜色 for ax, color in zip(axes, colors): # 获取子图中的所有直方图色块 for patch in ax.patches: patch.set_facecolor(color) # 设置填充颜色 patch.set_edgecolor(color) # 设置边缘颜色(可选,根据需求调整)
这段代码的核心是:每个脊线子图对应axes数组中的一个元素,子图内的直方图由多个patch对象组成,直接修改这些patch的颜色属性,就能实现每个子图的直方图使用不同颜色的效果。
内容的提问来源于stack exchange,提问作者Anthi - Maria Kouvatsou
相关产品推荐
相关产品推荐

