Вот пример использования контроллера, введенного Guice.
/**
* Loads a FXML file and injects its controller from the given Guice {@code Provider}
*/
public abstract class GuiceFxmlLoader {
public GuiceFxmlLoader(Stage stage, Provider<?> provider) {
mStage = Objects.requireNonNull(stage);
mProvider = Objects.requireNonNull(provider);
}
/**
* @return the FXML file name
*/
public abstract String getFileName();
/**
* Load FXML, set its controller with given {@code Provider}, and add it to {@code Stage}.
*/
public void loadView() {
try {
FXMLLoader loader = new FXMLLoader(getClass().getClassLoader().getResource(getFileName()));
loader.setControllerFactory(p -> mProvider.get());
Node view = loader.load();
setViewInStage(view);
}
catch (IOException ex) {
LOGGER.error("Failed to load FXML: " + getFileName(), ex);
}
}
private void setViewInStage(Node view) {
BorderPane pane = (BorderPane)mStage.getScene().getRoot();
pane.setCenter(view);
}
private static final Logger LOGGER = Logger.getLogger(GuiceFxmlLoader.class);
private final Stage mStage;
private final Provider<?> mProvider;
}
Вот конкретная реализация загрузчика:
public class ConcreteViewLoader extends GuiceFxmlLoader {
@Inject
public ConcreteViewLoader(Stage stage, Provider<MyController> provider) {
super(stage, provider);
}
@Override
public String getFileName() {
return "my_view.fxml";
}
}
Обратите внимание, что этот пример загружает представление в центр BoarderPane, который является корнем сцены в рабочей области. Это не относится к примеру (деталь реализации моего конкретного варианта использования), но решил оставить его, поскольку некоторые из них могут оказаться полезными.
На самом деле это довольно просто: вместо количества ящиков вы можете указать список с границами бинов. Они также могут быть распределены неравномерно:
plt.hist(data, bins=[0, 10, 20, 30, 40, 50, 100])
Если вы просто хотите, чтобы они были одинаково распределены, вы можете просто использовать диапазон:
plt.hist(data, bins=range(min(data), max(data) + binwidth, binwidth))
Добавлено в исходный ответ
Вышеупомянутая строка работает для data
, заполненной целыми числами. Как указывает macrocosme , для поплавков вы можете использовать:
import numpy as np
plt.hist(data, bins=np.arange(min(data), max(data) + binwidth, binwidth))
Для гистограммы с целыми значениями х я закончил с использованием
plt.hist(data, np.arange(min(data)-0.5, max(data)+0.5))
plt.xticks(range(min(data), max(data)))
. Смещение 0,5 центрирует ячейки на значениях по оси x. Вызов plt.xticks
добавляет галочку для каждого целого числа.
Для N бинов края бункера указаны в списке значений N + 1, где первый N дает нижние края буфера, а +1 дает верхний край последнего бункера.
Код:
from numpy import np; from pylab import *
bin_size = 0.1; min_edge = 0; max_edge = 2.5
N = (max_edge-min_edge)/bin_size; Nplus1 = N + 1
bin_list = np.linspace(min_edge, max_edge, Nplus1)
Обратите внимание, что linspace производит массив от min_edge до max_edge, разбитый на N + 1 или N бит
У меня была такая же проблема, как OP (я думаю!), но я не мог заставить ее работать так, как указано в Lastalda. Я не знаю, правильно ли я правильно истолковал вопрос, но я нашел другое решение (возможно, это действительно плохой способ сделать это).
Так я сделал это:
plt.hist([1,11,21,31,41], bins=[0,10,20,30,40,50], weights=[10,1,40,33,6]);
Что создает это:
Итак, первый параметр в основном «инициализирует» бит - я специально создаю число, находящееся между диапазоном I, установленным в параметре bins.
Чтобы продемонстрировать это, посмотрите на массив в первом параметре ([1,11,21,31,41]) и массив «бункеров» во втором параметре ([0,10,20,30,40,50]):
Затем я использую параметр «вес» для определения размера каждого бина. Это массив, используемый для параметра веса: [10,1,40,33,6].
Таким образом, от 0 до 10 bin задано значение 10, от 11 до 20 бит задано значение от 1, от 21 до 30 бит дано значение 40 и т. д.
Я думаю, что простой способ состоял бы в том, чтобы вычислить минимальные и максимальные данные, которые у вас есть, а затем вычислить L = max - min
. Затем вы делите L
на желаемую ширину бункера (я предполагаю, что это то, что вы подразумеваете под размером бункера), и используйте потолок этого значения как количество ящиков.
10..20..30..
– cqcn1991 10 August 2015 в 06:08(data.max() - data.min()) / number_of_bins_you_want
.+ binwidth
можно изменить только на1
, чтобы сделать это более понятным примером. – Jarad 22 January 2018 в 18:31