Я пытаюсь построить полярный график, используя FacetGrid Seaborn, аналогично тому, что подробно описано в галерее seaborn Я использую следующий код:
sns.set(context='notebook', style='darkgrid', palette='deep', font='sans-serif', font_scale=1.25)
# Set up a grid of axes with a polar projection
g = sns.FacetGrid(df_total, col="Construct", hue="Run", col_wrap=5, subplot_kws=dict(projection='polar'), size=5, sharex=False, sharey=False, despine=False)
# Draw a scatterplot onto each axes in the grid
g.map(plt.plot, 'Rad', ''y axis label', marker=".", ms=3, ls='None').set_titles("{col_name}")
plt.savefig('./image.pdf')
Что с моими данными дает следующее:
Хочу сохранить в этой организации по 5 участков на линию.
Проблема в том, что заголовок каждого подзаголовка перекрывается со значениями отметок, как и для метки оси y.
Есть ли способ предотвратить такое поведение? Могу ли я как-то сместить заголовки немного выше их текущего положения и могу ли я немного сместить метки оси Y слева от их текущего положения?
Спасибо заранее!
РЕДАКТИРОВАТЬ: Это не дубликат этого SO, поскольку проблема заключалась в том, что заголовок одного подзаголовка перекрывался с меткой оси другого подзаголовка.
Здесь моя проблема в том, что заголовок одного подзаголовка перекрывается с меткой меток того же подзаголовка, и аналогично метка оси перекрывается с меткой меток тот же подсюжет.
Я также хотел бы добавить, что меня не волнует, что они перекрываются в моем блокноте jupyter (поскольку он был создан с его помощью), однако я хочу, чтобы final сохраненное изображение без перекрытия, поэтому, возможно, есть что-то, что мне нужно сделать, чтобы сохранить изображение в немного другом формате, чтобы этого избежать, но я не знаю, что именно (я использую plt.savefig
только для его сохранения).
РЕДАКТИРОВАТЬ 2: Если кто-то хочет воспроизвести проблему, вот минимальный пример:
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns
sns.set()
sns.set(context='notebook', style='darkgrid', palette='deep', font='sans-serif', font_scale=1.5)
# Generate an example radial datast
r = np.linspace(0, 10000, num=100)
df = pd.DataFrame({'label': r, 'slow': r, 'medium-slow': 1 * r, 'medium': 2 * r, 'medium-fast': 3 * r, 'fast': 4 * r})
# Convert the dataframe to long-form or "tidy" format
df = pd.melt(df, id_vars=['label'], var_name='speed', value_name='theta')
# Set up a grid of axes with a polar projection
g = sns.FacetGrid(df, col="speed", hue="speed",
subplot_kws=dict(projection='polar'), size=4.5, col_wrap=5,
sharex=False, sharey=False, despine=False)
# Draw a scatterplot onto each axes in the grid
g.map(plt.scatter, "theta", "label")
plt.savefig('./image.png')
plt.show()
Это дает следующее изображение, на котором заголовки не так плохи, как в моей исходной задаче (но все же частично перекрываются), а метка с левой стороны полностью перекрывается.