Я пытаюсь создать барплот, где цвета баров будут выбраны в соответствии с заданными значениями из предопределенного набора цветов. Значение «pahse» определяет цвет. Он разделен на 3 диапазона и диапазоны ранжируются. Ранг используется для вызова палитры colorfrom. Эта часть работает нормально. Но я застрял в цветовой гамме. Цветная панель должна содержать цвета на основе клавиш словаря «rank_classes» и tiks/labels на основе значений, которые использовались для ранжирования. Я попробовал mpl.colorbar.plorbarBase(), но не похоже на seaborns sns.cubehelix_palette(). Интересно, как можно объединить эти две вещи или предложить более простые решения?Colorbar for barplot, когда цвета бара выбираются по рангу
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style("white")
#%matplotlib inline
index = ['25', '26', '27']
count = [10, 50, 22]
phase = [0.9, 2.2, 1.2]
ranks = [0, 2, 1]
rank_classes = {0:"Ph<1", 1:"1<Ph<1.2", 2:"Ph>=1.2"}
d = {'count' : pd.Series(count, index=index),
'phase' : pd.Series(phase, index=index),
'rank' : pd.Series(ranks, index=index)
}
df = pd.DataFrame(d)
# barplot
fig, ax = plt.subplots()
pal = sns.cubehelix_palette(3)
x = df.index
y = list(df['count'])
z = list(df['rank'])
sns.barplot(x=x, y=y, palette=np.array(pal)[z])
sns.despine()
ли вы имеете в виду, как это http://stackoverflow.com/questions/31313606/pyplot-matplotlib-bar-chart-with-fill-color-depending-on-value? – lanery
@lanery Я вижу, трюк состоит в том, чтобы нарисовать две фигуры на вершине друг друга, а только от экрана разброса показать только цветную панель. В моем случае у меня есть две проблемы с адаптированием упомянутого кода для моих нужд. Во-первых, я хотел бы использовать морскую цветовую схему с предопределенным количеством цветов, например ** sns.cubehelix_palette (3) **. Но этот формат несовместим с cmap в plt.scatter(). Как сделать его совместимым? Во-вторых, как назначить предопределенные строковые метки («A», «B», «Z») для первого, второго и т. Д. Цветов в ** sns.cubehelix_palette (3) ** с использованием ** plt.colobar() **? – tonu