Создайте собственную легенду для нескольких подзаголовков - PullRequest
0 голосов
/ 29 мая 2020

Я хочу создать подзаголовки разброса, но мне нужно дифференцировать каждый маркер в соответствии с столбцом «Wall_construction». Мои данные включают: содержимое данных

Вот что у меня есть на данный момент:

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

df = pd.read_csv("forpythonultimo.csv")
grouped = df.groupby(["panel_coverage", "wwr"])
ncols= 5
nrows = int(np.ceil(grouped.ngroups/ncols))
cols = ['WWR {}'.format(col) for col in ['10%', '20%', '30%', '40%', '50%']]
rows = ['Panel {}'.format(row) for row in ['42%', '47%', '52%', '57%', '63%', '68%', '75%', '78%']]

fig, axes = plt.subplots(nrows=nrows, ncols=ncols, figsize=(12, 4), sharex=True, sharey=True)
pad = 5

for (key, ax) in zip(grouped.groups.keys(), axes.flatten()):
    grouped.get_group(key).plot(x='disc_hours', y='Total_heat_gain', kind='scatter', subplots=True, ax=ax)
    ax.set_xlabel('')
    ax.set_ylabel('')
    ax.set_title('')

for ax, col in zip(axes[0], cols):
    ax.annotate(col, xy=(0.5, 1), xytext=(0, pad),
            xycoords='axes fraction', textcoords='offset points',
            size='large', ha='center', va='baseline')

for ax, row in zip(axes[:,0], rows):
    ax.annotate(row, xy=(0, 0.5), xytext=(-ax.yaxis.labelpad - pad, 0),
            xycoords=ax.yaxis.label, textcoords='offset points',
            size='large', ha='right', va='center')
plt.show()

Подзаголовки

Спасибо заранее за вашу помощь.

1 Ответ

0 голосов
/ 30 мая 2020

Я на самом деле не пробовал это в коде, но я думаю, что обычная легенда отображается в виде списка df['Wall_constraction'] и присваивается метке. Остальное на ваше усмотрение.

lbls = list(df['Wall_constraction'])
for (key, ax, l) in zip(grouped.groups.keys(), axes.flatten(), lbls):
    grouped.get_group(key).plot(x='disc_hours', y='Total_heat_gain', kind='scatter', subplots=True, ax=ax, lable=l)
    ax.set_xlabel('')
    ax.set_ylabel('')
    ax.set_title('')
    ax.legend(loc="upper right", bbox_to_anchor=(0.5, 0, 0.5, 1), borderaxespad=0)
...