Скрипки для скрипки: изменить цвет скрипки, названия осей, легенду

Я использовал для создания всех моих графиков, используя matplotlib, пока не обнаружил недавно seaborn. Мне было особенно интересно, что он позволяет разбить скрипки, чтобы сравнить заданную переменную hue.

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

Вот пример, который я привел из seaborn:

    import seaborn as sns
    tips = sns.load_dataset("tips")
    sns.set(style="ticks", palette="colorblind")
    g = sns.FacetGrid(tips, col="time", size=4, aspect=.75)
    g = g.map(sns.violinplot, "sex", "total_bill", "smoker", inner=None, linewidth=1, scale="area", split=True, width=0.75).despine(left=True).add_legend(title="smoker")
    g.savefig(os.path.join(options.output_dir, "figures", "violinplots.png"))

И вот вывод violinplots.png:

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

В то время как мне хотелось бы что-то вроде этого:

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

Подводя итог:

  • используйте white и blue цвета
  • заменить оси names
  • пишите leftmost y axis только
  • сделайте мой собственный legend with the blue category only

Спасибо заранее. Любая помощь будет приветствоваться.


В случае, если кому-то было интересно, вот как я окончательно решил цифру благодаря MrPedru22:

import seaborn as sns
tips = sns.load_dataset("tips")
sns.set(context="paper", palette="colorblind", style="ticks")
g = sns.FacetGrid(tips, col="time", sharey=False, size=4, aspect=.5)
g = g.map(seaborn.violinplot, "sex", "total_bill", "smoker", cut=0, inner=None, split=True, palette={"No": "#4477AA", "Yes": "white"}, saturation=1).despine(left=True)
# Set axis labels & ticks #
g.fig.get_axes()[0].set_xlabel("Lunch")
g.fig.get_axes()[1].set_xlabel("Dinner")
g.fig.get_axes()[0].set_xticklabels(["Male", "Female"])
g.fig.get_axes()[1].set_xticklabels(["Male", "Female"])
g.fig.get_axes()[0].set_ylabel("Total bill")
g.fig.get_axes()[0].set_yticks(range(0, 80, 10))
g.fig.get_axes()[1].set_yticks([])
g.fig.get_axes()[0].spines["left"].set_visible(True)
# Set legend #
handles, labels = g.fig.get_axes()[0].get_legend_handles_labels()
g.fig.get_axes()[0].legend([handles[1]], ["Non-smoker"], loc='upper left')
# Fixing titles #
g.fig.get_axes()[0].set_title("")
g.fig.get_axes()[1].set_title("")
g.plt.show()

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

Ответ 1

Вот несколько ответов:

import seaborn as sns
tips = sns.load_dataset("tips")
sns.set(style="ticks", palette="colorblind")
g = sns.FacetGrid(tips, col="time", size=4, aspect=.75)
g = g.map(sns.violinplot, "sex", "total_bill", "smoker", palette={"No": "b", "Yes": "w"}, inner=None, linewidth=1, scale="area", split=True, width=0.75).despine(left=True)
g.fig.get_axes()[0].legend(title= 'smoker',loc='upper left')
g.set_axis_labels('lunch','total bill')
sns.plt.show()
  • Используйте белый и синий цвета: через палитру, как показано выше ( "w" означает белый)
  • Заменить имена осей: с помощью метода set_axis_labels
  • В остальном я не мог найти ответ, но, пожалуйста, проверьте документацию: http://stanford.edu/~mwaskom/software/seaborn/generated/seaborn.FacetGrid.html#seaborn.FacetGrid Надеюсь, это поможет!