Сложность построить легенду для цветной панели в Python 3.6 - PullRequest
1 голос
/ 07 июня 2019

У меня есть 3 цвета (ccc) для 3 различных типов камней (d2), и я хотел бы нарисовать легенду с прямоугольниками для моей цветовой шкалы.Я уже искал об этом, но не смог найти правильный код.Не могли бы вы помочь мне?

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

d = {'Porosity': [20, 5, 15, 7, 30], 'Permeability': [2500, 100, 110, 40, 
2200], 'Lithology': ['Sandstone', 'Shale', 'Shale', 'Halite', 'Sandstone'], 
'Depth': [1000, 1500, 2000, 2500, 3000]}
df = pd.DataFrame(d)

d2 = {'Sandstone': 1, 'Shale': 2, 'Halite': 3}

lito = df['Lithology']
df['Label'] = lito.map(d2)

ccc = ['darkgreen','skyblue', 'yellow']
cmap_facies = colors.ListedColormap(ccc[0:len(ccc)], 'indexed')

cluster = np.repeat(np.expand_dims(df['Label'].values, 1), 1, 1)

f, ax = plt.subplots(nrows=1, ncols=1, figsize=(2,12))

depth = df['Depth']

ax.imshow(cluster, interpolation='none', aspect='auto', cmap=cmap_facies, 
vmin=1, vmax=3, extent=[0,1 ,np.max(depth),np.min(depth)])

plt.tick_params(bottom=False, labelbottom=False)

1 Ответ

0 голосов
/ 07 июня 2019

Если я правильно понял, вам нужны три ручки легенды, по одной на каждый цветной камень.Это можно сделать, добавив пользовательские маркеры легенды, используя mpatches

import numpy as np
import pandas as pd
import matplotlib.colors as colors
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches # <-- Add this import

# Your code here

hands = []
for k, col in zip(d2.keys(), ccc):
    hands.append(mpatches.Patch(color=col, label=k))
plt.legend(handles=hands, loc=(1.05, 0.5), fontsize=18)

enter image description here

...