Отрегулируйте интервал по оси X в боксплотах Python - PullRequest
0 голосов
/ 20 марта 2019

Я строю графики с использованием sns.boxplot и pandas.DataFrame.boxplot в Python 3.x.

И я хочу спросить, можно ли настроить интервал между полями в блок-диаграмме, чтобы блок Group_b находился дальше вправо от блока Group_a, чем на выходных фигурах. Спасибо

Коды:

import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns

dict_a = {'value':[1,2,3,7,8,9],'name':['Group_a']*3+['Group_b']*3}
dataframe = pd.DataFrame(dict_a)
sns.boxplot( y="value" , x="name" , data=dataframe )   

Выходная цифра:

enter image description here

dataframe.boxplot("value" ,by = "name" )

Выходной рисунок 2:

enter image description here

1 Ответ

3 голосов
/ 20 марта 2019

Расстояние между двумя полями определяется пределами оси x.Для постоянных расстояний в блоках данных между блоками то, что делает их более или менее разнесенными друг от друга, является частью расстояния этих блоков данных по сравнению с общим пространством данных, показанным на оси.Например, в случае с морским порогом первая коробка находится в точке x = 0, а вторая в точке x = 1.Разница составляет 1 единицу.Таким образом, максимальное расстояние между двумя коробочными диаграммами достигается установкой пределов оси x на эти точные пределы:

ax.set_xlim(0, 1)

Конечно, это сократит половину каждой ячейки.

enter image description here

Таким образом, более полезным значением будет ax.set_xlim(0-val, 1+val), где val находится где-то в диапазоне ширины блоков.

Нужно отметить, что панды используют разные юниты.Первый блок в х = 1, второй в х = 2.Следовательно, нужно что-то вроде ax.set_xlim(1-val, 2+val).

. Следующее добавит ползунок на график, чтобы увидеть влияние различных значений.

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

dict_a = {'value':[1,2,3,7,8,9],'name':['Group_a']*3+['Group_b']*3}
dataframe = pd.DataFrame(dict_a)

fig, (ax, ax2, ax3) = plt.subplots(nrows=3,
                                   gridspec_kw=dict(height_ratios=[4,4,1], hspace=1))

sns.boxplot( y="value" , x="name" , data=dataframe, width=0.1, ax=ax)   
dataframe.boxplot("value", by = "name", ax=ax2)


from matplotlib.widgets import Slider
slider = Slider(ax3, "", valmin=0, valmax=3)

def update(val):
    ax.set_xlim(-val, 1+val)
    ax2.set_xlim(1-val, 2+val)

slider.on_changed(update)


plt.show()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...