Почему опция 'ipady' в методе tkinter.grid () добавляет только пространство под виджетом?

Одной из распространенных практик является разделение данных с помощью split, а затем применение интересующей функции к этой группе. Предположим, что у нас есть четыре столбца, группа, настройки, диагноз и stay.length. Первые три имеют два уровня.

df <- data.frame(
  group = sample(1:2, 64, TRUE),
  setting  = sample(1:2, 64, TRUE),
  diagnosis  = sample(1:2, 64, TRUE), 
  stay.length = sample(1:5, 64, TRUE)
)
> head(df)
    group setting diagnosis var
1     1       1         1   4
2     1       1         2   5
3     1       1         2   4
4     2       1         2   3
5     1       2         2   3
6     1       1         2   5

Выполните split, и вы получите разделенный List:

dfl <- split(df$stay.length, list(df$group, df$setting, df$diagnosis))

> head(dfl)
$`1.1.1`
[1] 5 3 4 1 4 5 4 2 1

$`2.1.1`
[1] 5 4 5 4 3 1 5 3 1

$`1.2.1`
[1] 4 2 5 4 5 3 5 3

$`2.2.1`
[1] 2 1 4 3 5 4 4

$`1.1.2`
[1] 5 4 4 4 3 2 4 4 5 1 5 5

$`2.1.2`
[1] 5 4 4 5 3 2 4 5 1 2    

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

dflm <- lapply(dfl, mean)
> dflm
$`1.1.1`
[1] 3.222222

.
.
.
.

$`2.2.2`
[1] 2.8

. В вашем случае вы можете применить fitdist или любую другую функцию.

dfl.fitdist <- lapply(dfl, function(x) fitdist(x, "gamma"))

> dfl
$`1.1.1`
Fitting of the distribution ' gamma ' by maximum likelihood 
Parameters:
  estimate Std. Error
shape  3.38170  2.2831073
rate   1.04056  0.7573495

.
.
.


$`2.2.2`
Fitting of the distribution ' gamma ' by maximum likelihood 
Parameters:
  estimate Std. Error
shape 4.868843  2.5184018
rate  1.549188  0.8441106
1
задан Sun Bear 19 January 2019 в 06:22
поделиться

1 ответ

Я не думаю, что ipady вполне делает то, что вы думаете, что делает. Следует признать, что документация немного неясна по этому вопросу. Это не добавляет эквивалент внутреннего поля. Вместо этого он просто добавляет столько пикселей к высоте виджета, и пиксели добавляются на внутренней стороне границы, а не на внешней стороне. Он не блокирует использование этих пикселей.

Если ваш кадр обычно имеет высоту 20 пикселей, то с ipady=50 ваш виджет теперь будет иметь высоту 120 пикселей (50 * 2 + 20). Любые виджеты, добавленные внутри этого фрейма, могут использовать все пространство внутри фрейма. Таким образом, когда вы используете grid для помещения чего-либо в нулевую строку, оно все равно будет отображаться в самой верхней части кадра, чуть ниже границы.

Это именно то, что я вижу в вашем коде. На моей машине frame2 без ipady=50 имеет высоту 20 пикселей. Когда я добавляю ipady=50, рамка становится 120 пикселей в высоту. Метка появляется в самом верху рамки, поскольку она была помещена в нулевую строку.

TL; DR: не думайте о том, что ipady говорит «мне нужно так много внутреннего поля», а скорее «мне нужно гораздо больше дополнительного пространства внутри».

0
ответ дан Bryan Oakley 19 January 2019 в 06:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: