Изменить цвет отображения на основе столбца

У меня есть график: Изменить цвет отображения на основе столбца Я хочу, чтобы данные для кукурузы были разного цвета (скажем, красный и зеленый), а данные для сои — (оранжевый и синий).

df_melted = {'Sink_ID': ['100012_HUC8_09020204', '100012_HUC8_09020204', '100017_HUC8_09020204', '100017_HUC8_09020204', '100029_HUC8_09020204', '100029_HUC8_09020204', '100136_HUC8_09020205', '100136_HUC8_09020205', '100147_HUC8_09020204', '100147_HUC8_09020204'], 'Year': [2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005], 'Date_Range': ['07-10', '07-10', '07-10', '07-10', '07-10', '07-10', '07-10', '07-10', '07-10', '07-10'], 'WUVR': [1.1149566576574306, 1.0045231416606328, 0.5370876305214706, 0.7059439317324633, 0.9847125932507388, 1.0293399058565504, 1.0809386044812537, 1.383177947482075, 0.6703937259463105, 0.7220824311880709], 'Temp': [24.088787078857425, 21.557071685791016, 24.08528709411621, 21.73164367675781, 24.037073135375977, 21.661357879638672, 23.882572174072266, 21.39950180053711, 24.08528709411621, 21.73164367675781], 'Precip': [0.0837142914533615, 2.6772143840789795, 0.9112856984138488, 4.665500164031982, 0.7224286198616028, 4.315714359283447, 0.1414999961853027, 2.28857159614563, 0.9112856984138488, 4.665500164031982], 'Crop': ['Corn', 'Corn', 'Corn', 'Corn', 'Corn', 'Corn', 'Corn', 'Corn', 'Corn', 'Corn'], 'NDVI_Type': ['NDVI_wet', 'NDVI_wet', 'NDVI_wet', 'NDVI_wet', 'NDVI_wet', 'NDVI_wet', 'NDVI_wet', 'NDVI_wet', 'NDVI_wet', 'NDVI_wet'], 'NDVI_Value': [0.847915947437286, 0.835569024085999, 0.328437134623528, 0.528863519430161, 0.636810958385468, 0.705004304647446, 0.644810974597931, 0.761542975902557, 0.372550383210182, 0.535710155963898], 'Intervals': ['07-10 to 08-06', '07-10 to 08-06', '07-10 to 08-06', '07-10 to 08-06', '07-10 to 08-06', '07-10 to 08-06', '07-10 to 08-06', '07-10 to 08-06', '07-10 to 08-06', '07-10 to 08-06']}

sns.set_theme(style = "white", palette=None)
# Create the displot
g = sns.displot(data=df_melted, x='NDVI_Value', hue='NDVI_Type', row='Intervals', col='Crop',
                 binwidth=0.01, height=3, aspect=2.5, facet_kws=dict(margin_titles=False), 
                 row_order=df_intervals['Intervals'].tolist())

# Set the xlim for each facet
for ax in g.axes.flatten():
    ax.set_xlim(0, 1)
    ax.title.set_fontsize(14)
plt.xticks([0, 0.25, 0.5, 0.75, 1], labels=['0', '0.25', '0.5', '0.75', '1'])
plt.show()

Я попытался изменить цветовую палитру, но это повлияло на оба столбца, и я хочу повлиять на каждый столбец отдельно.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не думаю, что вы сможете сделать это с помощью самого displot. Вместо этого вы можете создать FacetGrid , а затем вручную добавить все histplot с необходимыми цветовыми палитрами для каждого столбца. Это продемонстрировано ниже с некоторыми ложными данными:

import numpy as np
import seaborn as sns
import pandas as pd


nvalues = 1000
mus = [10, 11.5]
crops = ["Corn", "Soy"]
intervals = ["A", "B"]
types = ["Type 1", "Type 2"]

# some mock data
data = {"crop": [], "interval": [], "type": [], "value": []}
for crop in crops:
    for interval in intervals:
        for mu, type in zip(mus, types):
            data["crop"].extend(nvalues * [crop])
            data["type"].extend(nvalues * [type])
            data["interval"].extend(nvalues * [interval])
            data["value"].extend((mu + np.random.randn(nvalues)).tolist())

df = pd.DataFrame(data)

nbins = 50  # number of histogram bins

# create the grid
g = sns.FacetGrid(data=df, hue = "type", row = "interval", col = "crop")

# set the palettes
palettes = {
    "Corn": ["red", "green"],
    "Soy": ["orange", "blue"],
}

# iterate through the data
for j, crop in enumerate(crops):
    dfcrop = df.loc[df["crop"] == crop].reset_index(drop=True)

    for i, (inter, ax) in enumerate(zip(intervals, g.axes)):
        ivals = dfcrop.loc[dfcrop["interval"] == inter].reset_index(drop=True)
        hax = sns.histplot(
            data=ivals,
            x = "value",
            hue = "type",
            palette=palettes[crop],
            bins=nbins,
            ax=ax[j],
            legend=True if i == 0 else False,  # only put legend on the first plot
        )

        # add a title like the displot titles
        hax.set_title(f"interval = {inter} | crop = {crop}", fontsize=10)

Другие вопросы по теме

Как найти максимальную и минимальную метку времени, когда значение становится ниже минимального порога в pyspark?
Подсчет групп одинаковых значений в одном столбце
Как объединить несколько фреймов данных и суммировать общие значения в столбец
Как сопоставить прогнозы за несколько временных интервалов с фактическими значениями?
Суммирование перестановок в фрейме данных Pandas растет суперэкспоненциально
Найдите значение в столбце, который содержит список, возьмите другое значение из следующего столбца и поместите его в первую таблицу в новый столбец
Python pandas read_sas с параметром размера фрагмента завершается с ошибкой из-за несоответствия индекса
Как я могу заполнить значение на основе другого категориального столбца
Что означает: приведение данных Pandas к numpy dtype объекта. Проверьте входные данные с помощью np.asarray(data) и как это можно решить?
Как обобщить фрейм данных в пандах на основе значений