Как настроить автоматические метки строк в Seaborn FacetGrid? Как получить один xlabel и ylable для всей фигуры? - PullRequest
0 голосов
/ 05 января 2019

Я хотел бы знать, как настроить метки строк FacetGrid. Существует автоматическое значение 0,0, 0,1 и т. Д., Которое необходимо изменить на «коэффициент <5%», «коэффициент <10%», .... </p>

Также хотелось бы знать, как иметь один xlabel и ylabel (не повторяется для каждого аспекта сетки).

См. Изображение Python и изображение R.

g = sns.FacetGrid(df, 
                  col="chlorides_rounded", 
                  height=3.3, 
                  row='ratio_sulfur.dioxide_rounded',
                  margin_titles=True,
                  hue='quality_bucket', 
                  hue_order=['High', 'Medium', 'Low'],palette = 'RdYlGn_r')

g = (g.map(plt.scatter, "density", "alcohol", **kws).add_legend(markerscale=2))

Python image

R image

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Наконец-то я нашел решение, которое довольно уродливо, но других я не получил!

ratio_labels =  ["","","",
             "ratio <5%",
             "","","",
             "ratio < 15%",
             "","","",
             "ratio <25%",
             "","","",
             "ratio < 35%",
             "","","",
             "ratio <45%",
             "","","",
             "ratio < 55%",
             "","","",
             "ratio <65%",
             "","","",
             "ratio < 75%"]

for i, ax in enumerate(g.axes.flat):
    plt.setp(ax.texts, text=ratio_labels[i])
0 голосов
/ 05 января 2019

Может быть, кто-то другой может предложить более простое решение, мое решение не самое красивое, но может дать вам то, о чем вы просили. И так как вы не передали свои данные, я использовал набор игрушек, поставляемый с seaborn:

import seaborn as sns

att = sns.load_dataset("attention")
g = sns.FacetGrid(att, col="subject", col_wrap=5, height=1.5)
g = g.map(plt.plot, "solutions", "score", marker=".")

#this surpresses the x- and y-labels on each axes of the bottom/leftmost column
g.set_axis_labels('', '') 

# overall ylabel
g.fig.text(x=0, y=0.5, 
           verticalalignment='center', #make sure it's aligned at center vertically
           s='Alcohol % per volume', #this is the text in the ylabel
           size=16, #customize the fontsize if you will
           rotation=90) #vertical text

#overall xlabel
g.fig.text(x=0.5, y=0, 
           horizontalalignment='center', #make sure it's aligned at center horizontally
           s='Density $g/cm^3$', #this is the text in the xlabel
           size=16)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...