Данные считываются как строки. В matplotlib 2.0 они автоматически преобразуются в числа с плавающей точкой, так что они могут быть построены.
В matplotlib 2.1 введены категориальные графики . Это теперь позволяет что-то вроде
plt.plot(["apple", "banana", "cherry"], [2,1,3])
. Хотя это, конечно, отлично подходит для определенных приложений, оно прерывает предыдущий вариант построения строк, которые можно преобразовать в float. Я думаю, что если это хорошо, это просто дает пользователю ответственность за само преобразование.
В этом случае вы хотели бы сделать это преобразование, например
values = [None if v is '' else float(v) for v in values]
Начиная с JavaFX-8, вы можете использовать новый CSS-селектор table-column
,
#my-table .table-column {
-fx-alignment: CENTER-RIGHT;
}
для JavaFX-2, для достижения это определит селектор CSS:
#my-table .table-cell {
-fx-alignment: CENTER-RIGHT;
/* The rest is from caspian.css */
-fx-skin: "com.sun.javafx.scene.control.skin.TableCellSkin";
-fx-padding: 0.166667em; /* 2px, plus border adds 1px */
-fx-background-color: transparent;
-fx-border-color: transparent -fx-table-cell-border-color transparent transparent;
-fx-border-width: 0.083333em; /* 1 */
-fx-cell-size: 2.0em; /* 24 */
-fx-text-fill: -fx-text-inner-color;
}
и задайте идентификатор таблицы.
tableView.setId("my-table");
Начиная с JavaFX-8, вы можете применить стиль непосредственно к TableColumn
,
firstTextCol.setStyle( "-fx-alignment: CENTER-RIGHT;");
или css,
firstTextCol.getStyleClass().add( "custom-align");
, где
.custom-align {
-fx-alignment: center-right;
}
Для JavaFX-2, Чтобы применить различные выравнивания к различным столбцам, вам нужно установить заводскую ячейку для этого столбца. Например, предположим, что 1-й столбец в вашей таблице должен быть выровнен слева, а в других столбцах используется выравнивание по умолчанию в таблице (CENTER-RIGHT
в вашем случае).
firstTextCol.setCellFactory(new Callback<TableColumn, TableCell>() {
public TableCell call(TableColumn p) {
TableCell cell = new TableCell<Person, String>() {
@Override
public void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
setText(empty ? null : getString());
setGraphic(null);
}
private String getString() {
return getItem() == null ? "" : getItem().toString();
}
};
cell.setStyle("-fx-alignment: CENTER-LEFT;");
return cell;
}
});
Даже это два года, вот еще один ответ. Для каждого столбца таблицы существует класс стиля css по умолчанию .table-column
, поэтому, если вы хотите изменить все столбцы таблицы для выравнивания вправо, нужно только поместить это в таблицу стилей или встроенный стиль:
.table-column {
-fx-alignment: CENTER_RIGHT;
}
, и если у вас есть столбец, который должен быть выровнен другим способом, например, заголовок строки, без проблем, присоедините идентификатор к этому столбцу, например rowHeading и напишите в вашей таблице стилей или встроенном стиле:
#rowHeading {
-fx-alignment: CENTER_LEFT;
}
, и его следует оставить в центре. Нет необходимости в огромном кодировании.
Быстрое исправление заключается в том, чтобы выбрать столбец в SceneBuilder и просто добавить свойство в поле стиля
Я использовал
cell.setAlignment(Pos.CENTER_RIGHT);
вместо
cell.setStyle("-fx-alignment: CENTER-LEFT;");
. Но если для этого есть CSS, то я не могу поместить fx: id в столбец, а затем поставить выравнивание для него в файле CSS? Это много кода выше, чтобы установить выравнивание столбцов.
Я попробовал это, и он работает
@FXML private TableColumn<BookingData,String>colClientMobile;
//Some code
colClientMobile.setCellFactory(new Callback<TableColumn<BookingData, String>, TableCell<BookingData, String>>() {
@Override
public TableCell<BookingData, String> call(TableColumn<BookingData, String> param) {
return new TableCellFormat();
}
});
private class TableCellFormat extends TableCell<BookingData, String>{
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
this.setText(item);
this.setAlignment(Pos.CENTER_RIGHT);
}
}