Хобрук: Ваш путь к мастерству в программировании

Интенсивность цвета графика SNS Bar неверна

Я строю следующий тип гистограммы, используя SNS, используя следующий код. Я использовал cubehelix_palette, так как мне нужна интенсивность цвета полосы в соответствии со значениями. Я ожидаю, что более высокие значения станут темно-фиолетовыми, а более низкие значения станут светлее. Но это кажется совсем другим, что я получаю здесь. введите здесь описание изображения . Кажется, что менее отрицательные значения становятся темнее, а более положительными значениями пренебрегают. Я делаю что-то не так здесь?

x = ["A","B","C","D"]
y = [-0.086552691,0.498737914,-0.090153413,-0.075941404]

sns.axes_style('white')
sns.set_style('white')
pal=sns.cubehelix_palette(5)
ax = sns.barplot(x, y,palette=pal)

for n, (label, _y) in enumerate(zip(x, y)):
    ax.annotate(
        s='{:.3f}'.format(_y),
        xy=(n, _y),
        ha='center',va='center',
        xytext=(0,10*(1 if _y > 0 else -1)),
        textcoords='offset points',
        size = 8,
        weight='bold'
    )
    ax.annotate(
        s=label,
        xy=(n, 0),
        ha='left',va='center',
        xytext=(0,50*(-1 if _y > 0 else 1)),
        textcoords='offset points',
        rotation=90,
        size = 10,
        weight='bold'
    )  
# axes formatting
#ax.set_yticks([])
ax.set_xticks([])
sns.despine(ax=ax, bottom=True, left=True)

ОТРЕДАКТИРОВАНО В соответствии с предложением @ImportanceOfBeingErnest я также попробовал следующий код. Однако отрицательные направленные интенсивности неверны. Также видна тревожная Легенда. введите здесь описание изображения

import numpy as np, matplotlib.pyplot as plt, seaborn as sns
sns.set(style="whitegrid", color_codes=True)
pal = sns.color_palette("Greens_d", 5)
ax = sns.barplot(x=x, y=y, palette=pal,hue=y,dodge=False)
x = ["A","B","C","D","E","F","G","H","I","J","K"]
y = [-0.086552691,
0.498737914,
-0.090153413,
-0.075941404,
-0.089105985,
-0.05301275,
-0.095927691,
-0.083528335,
0.250680624,
-0.092506638,
-0.082689631,
]
for n, (label, _y) in enumerate(zip(x, y)):
    ax.annotate(
        s='{:.3f}'.format(_y),
        xy=(n, _y),
        ha='center',va='center',
        xytext=(0,10*(1 if _y > 0 else -1)),
        textcoords='offset points',
        size = 8,
        weight='bold'
    )
    ax.annotate(
        s=label,
        xy=(n, 0),
        ha='left',va='center',
        xytext=(0,50*(-1 if _y > 0 else 1)),
        textcoords='offset points',
        rotation=90,
        size = 10,
        weight='bold'
    )
ax.set_xticks([])
sns.despine(ax=ax, bottom=True, left=True)
plt.show()
17.03.2018

  • @ImportanceOfBeingErnest Я не согласен, что это 100% дубликат, поскольку интенсивность полос с отрицательным направлением на этом графике, похоже, имеет проблему. Поскольку для этого конкретного типа вопросов не задано, я надеюсь, что это будет полезно для кого-то еще. 17.03.2018
  • Вы говорите, что решение из связанного вопроса не решает вашу проблему? 17.03.2018
  • Кажется, нет. Я не пробовал, потому что в моем случае используются разнонаправленные полосы, и мне нужна другая маркировка полос. На самом деле, мне нужно больше настроек сюжета, чем связанный вопрос. 17.03.2018
  • Какая? Либо так, либо нет. Я только что протестировал его, и он прекрасно работает. 17.03.2018
  • Да, это работало, но с небольшими проблемами. Можете ли вы проверить отредактированный вопрос? В любом случае, спасибо за предложение. 17.03.2018
  • В вашем отредактированном коде не используется предлагаемое решение из связанного вопроса, поэтому ясно, что он выглядит не так, как предполагалось. Вопрос о легенде не имеет отношения к делу, и его также уже задавали задавали. 17.03.2018

Ответы:


1

В документации говорится, что ваш аргумент palette сопоставляет ваши цвета с различными уровнями вашего hue аргумент, который вы не предоставили.

Поэтому я думаю, что вам нужно установить аргумент hue в вашем barplot, чтобы ваши цвета сопоставлялись конкретно с вашими значениями y.

Все остальное осталось нетронутым, кроме замены ax = sns.barplot(x, y,palette=pal) на это:

ax = sns.barplot(x, y, hue=y, palette=pal, dodge=False)

# Remove the legend
ax.legend_.remove()

вы получаете этот график, на котором чем выше y, тем темнее цвет:

введите здесь описание изображения

17.03.2018
  • Спасибо за быстрый ответ. И еще, можно ли как-то скрыть легенду? Мне это ненужно. Кажется, я не могу найти его в документации. 17.03.2018
  • @IsuraNirmal Нет проблем, добавьте ax.legend_.remove(), он должен об этом позаботиться (см. отредактированный пост) 17.03.2018
  • Новые материалы

    Управление DOM для чайников вроде меня
    Одной из первых вещей, которую мы рассмотрели, когда начали изучать Javascript во Flatiron, была модель DOM. Кто он? Чем он занимается? Он больше машина, чем человек? Ну да довольно много. ДОМ..

    Что такое структура данных?
    Структура данных хранит и извлекает данные. Все, что обеспечивает эти две функции, является структурой данных . Период. Вы можете пропустить оставшуюся часть статьи, если ответ..

    мои январские чтения по программированию
    Эрик Эллиот Программирование приложения JavaScript Эл Свейгарт «Автоматизируйте скучные вещи с помощью Python» Прогрессивное веб-приложение Google..

    Создание ассоциаций секвелизации с помощью инструмента командной строки Sequelize
    Sequelize - популярный, простой в использовании инструмент объектно-реляционного сопоставления (ORM) JavaScript, который работает с базами данных SQL. Довольно просто начать новый проект с..

    Искусственный интеллект в юридической отрасли - пример прогнозирования судебных решений с помощью глубокого обучения
    На протяжении всей истории люди полагались на суды, присяжных, королей и королев в отправлении правосудия. Сегодня способность судов обеспечивать справедливое и быстрое правосудие для своих..

    Введение в машинное обучение для обнаружения аномалий (часть 1)
    Тщательно созданный, тщательно спроектированный ресурс для специалистов по данным. Часть 1 Главы 03 из Руководства по машинному обучению для обнаружения аномалий Внимание! Прежде чем вы..

    Начало работы с Pulumi в Digital Ocean
    Цифровой океан (ДО) — отличная альтернатива многим другим поставщикам облачных услуг. DO предоставляет простой и понятный пользовательский интерфейс, упрощающий управление инфраструктурой и..