Luk*_*uke 7 python matplotlib seaborn
我正在使用seaborn创建以下图表:
我想自定义由 生成的颜色hue,最好将颜色的顺序设置为蓝色,绿色,黄色,红色。我尝试将颜色或颜色列表传递给参数,color但是sns.barplot它会产生颜色渐变或错误。
请指教。
您可以使用以下代码来重现该图表:
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
df = pd.DataFrame({'Early': {'A': 686, 'B': 533, 'C': 833, 'D': 625, 'E': 820},
'Long Overdue': {'A': 203, 'B': 237, 'C': 436, 'D': 458, 'E': 408},
'On Time': {'A': 881, 'B': 903, 'C': 100, 'D': 53, 'E': 50},
'Overdue': {'A': 412, 'B': 509, 'C': 813, 'D': 1046, 'E': 904}})
df_long = df.unstack().to_frame(name='value')
df_long = df_long.swaplevel()
df_long.reset_index(inplace=True)
df_long.columns = ['group', 'status', 'value']
df_long['status'] = pd.Categorical(df_long['status'], ["Early", "On Time", "Overdue", "Long Overdue"])
df_long = df_long.sort_values("status")
fig, ax = plt.subplots(figsize=(18.5, 10.5))
g = sns.barplot(data=df_long, x='group', y='value', hue='status', ax=ax)
for bar in g.patches:
height = bar.get_height()
ax.text(bar.get_x() + bar.get_width() / 2., 0.5 * height, int(height),
ha='center', va='center', color='white')
plt.xticks(fontsize=12)
plt.legend(loc='upper left', prop={'size': 14})
ax.xaxis.label.set_visible(False)
ax.axes.get_yaxis().set_visible(False)
plt.show()
Run Code Online (Sandbox Code Playgroud)
tdy*_*tdy 12
hue的变量通过seaborn.barplot()
以下方式映射palette:
调色板: 调色板名称、列表或字典
用于不同级别变量的颜色
hue。应该是可以由seaborn.color_palette()或将色调级别映射到 matplotlib 颜色的字典解释的东西。
所以要定制你的hue颜色,
定义一个颜色列表:
palette = ['tab:blue', 'tab:green', 'tab:orange', 'tab:red']
Run Code Online (Sandbox Code Playgroud)
或hue-color 字典:
palette = {
'Early': 'tab:blue',
'On Time': 'tab:green',
'Overdue': 'tab:orange',
'Long Overdue': 'tab:red',
}
Run Code Online (Sandbox Code Playgroud)
并将其传递给palette:
sns.barplot(data=df_long, x='group', y='value', hue='status',
palette=palette, ax=ax)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28003 次 |
| 最近记录: |