Chr*_*son 3 python matplotlib legend boxplot seaborn
我是Python新手。
我使用以下代码在 matplotlib/seaborn 中生成了一个箱线图(带有群图覆盖)。我现在想添加一个遵循每个框的配色方案的图例。我在网上找到的许多解决方案似乎不适用于这种特定类型的图表(例如,仅适用于分组箱线图)。
当我尝试实现此处建议的代码时,我收到错误消息。
非常感谢所有的输入!
# Import libraries and modules
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# Set seaborn style.
sns.set(style="whitegrid", palette="colorblind")
# Load summary tidy data.
tidy = pd.read_csv('tidy.csv')
# Define plots for tidy data
fig, ax = plt.subplots(figsize=(10,6))
ax = sns.boxplot(x='header1', y='header2', data=tidy, order=["header1", "header2"])
ax = sns.swarmplot(x="header1", y="header2", data=tidy, color=".25", order=["header1", "header2"])
labels = [item.get_text() for item in ax.get_xticklabels()]
labels[0] = 'header1'
labels[1] = 'header2'
ax.set_xticklabels(labels)
ax.legend(loc='best')
Run Code Online (Sandbox Code Playgroud)
我正在使用的数据示例。
Object,Metric,Length
MT1,B2A1,3.57675
MT1,B2A2,2.9474600000000004
MT1,B2A3,2.247772857142857
MT1,B2A4,3.754455
MT1,B2A5,2.716282
MT1,B2A6,2.91325
MT10,B2A1,3.34361
MT10,B2A2,2.889958333333333
MT10,B2A3,2.22087
MT10,B2A4,2.87669
MT10,B2A5,1.6745005555555557
MT12,B2A1,3.3938900000000003
MT12,B2A2,2.00601
MT12,B2A3,2.1720200000000003
MT12,B2A4,2.452923333333333
Run Code Online (Sandbox Code Playgroud)
该no handles with labels found to put in the legend错误是由于ax.legend()在您的两位艺术家(箱线图和群图)没有标签时进行调用造成的。
sns.boxplot基于 matplotlib 的boxplot和sns.swarmplotscatter ,因此您需要的只是分别给它们一个labels和label参数。
ax = sns.boxplot(..., labels=["Metric", "Length"])
ax = sns.swarmplot(..., label="something goes here")
Run Code Online (Sandbox Code Playgroud)
或者,根据这个,你可以保持seaborn部分不变并摆弄:
handles, _ = ax.get_legend_handles_labels() # Get the artists.
ax.legend(handles, ["label1", "label2"], loc="best") # Associate manually the artists to a label.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19782 次 |
| 最近记录: |