【问题标题】:How to assign colors according to median value in box plot?如何根据箱线图中的中值分配颜色?
【发布时间】:2017-12-11 16:03:35
【问题描述】:

我的箱形图的调色板有问题。我希望根据中值分配颜色。中值越高,颜色越深。我选择了调色板YlGnBu。但是,颜色被分配为渐变 - 较深的颜色位于右侧,而较浅的颜色位于左侧:

df = sns.load_dataset("tips")

norm = plt.Normalize(df["total_bill"].values.min(), df["total_bill"].values.max())
colors = plt.cm.YlGnBu(norm(df["total_bill"]))
flierprops = dict(markerfacecolor='0.75', markersize=5,linestyle='none')

plt.figure(figsize=(12,8))
ax = sns.boxplot(x="day", y="total_bill", data=df, 
                 palette=colors, 
                 flierprops=flierprops) # hue="smoker", 
plt.xticks(rotation='vertical')
ax.get_xaxis().set_major_formatter(
    matplotlib.ticker.FuncFormatter(lambda x,p: str(x)+":00"))
ax.get_yaxis().set_major_formatter(
    matplotlib.ticker.FuncFormatter(lambda x,p: locale.format('%d', x, 1)))
ax.grid(b=True, which='major', color='#d3d3d3', linewidth=1.0)
ax.grid(b=True, which='minor', color='#d3d3d3', linewidth=0.5)
plt.show()

【问题讨论】:

    标签: python pandas matplotlib seaborn


    【解决方案1】:

    您的问题是您根据数据框中的整个total_bill 值范围设置颜色图。如果您希望颜色图反映一周中每一天的中值,则必须使用这些中值进行设置。

    df = sns.load_dataset("tips")
    
    median_vals = df.groupby('day')['total_bill'].median()
    norm = plt.Normalize(median_vals.min(), median_vals.max())
    colors = plt.cm.YlGnBu(norm(median_vals))
    
    plt.figure(figsize=(12,8))
    ax = sns.boxplot(x="day", y="total_bill", data=df, palette=colors)
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-18
      • 2021-07-01
      • 1970-01-01
      • 2014-07-11
      • 1970-01-01
      • 2021-01-18
      • 2020-08-28
      • 2015-09-21
      相关资源
      最近更新 更多