logo
down
shadow

d3 barchart animates on load, but not on update


d3 barchart animates on load, but not on update

By : Samuel Carvajal
Date : November 21 2020, 07:31 AM
should help you out When chaining methods be careful of what's being returned to the variable. In your case .transition returns a transition object, when you meant to save the rect selection to valueBar.
code :
valueBar = chart.append("rect")
  .attr({ "y": height, "height": 0, "width": valueWidth, "class": "standard" });

valueBar
  .transition()
  .duration(500)
  .attr("class", chartColor(items.count))
  .attr("height", function () { return (items.count / items.max * height) + (valueBorder * 2) + (border * 2) })
  .attr("y", function () { return (height - (items.count * height / items.max)) - valueBorder });


Share : facebook icon twitter icon
Why set function on property does not update when storyboard animates

Why set function on property does not update when storyboard animates


By : BI_DMO
Date : March 29 2020, 07:55 AM
it helps some times If i understand you right, you're going to animate the X property of a TranslateTransform, that is also bound to your X property (you didn't mention the class in which it is defined).
Even if you had declared the binding two-way, your approach won't work. A dependency property such as TranslateTransform.X gets its value from a variety of providers like style setters, triggers, animations, value inheritance, default value from property metadata, local value, and a few more (where data bindings set the local value). These providers are applied in a certain order, i.e. with a certain precedence.
BarChart Update

BarChart Update


By : Jamie Shields
Date : March 29 2020, 07:55 AM
around this issue In your BuildData (by the way, not following Java Naming Conventions, change its name) method you are updating the data of series. In the same method you are adding this series to the chart. By clicking the "next" button, BuildData method is invoked where this chart is added again which is unnecessary. Delete the
code :
Platform.runLater(() -> {  
    barchart.getData().add(series1);  
});
...
...
vbox.getChildren().addAll(box, barchart);
barchart.getData().add(series1);
pane.getChildren().add(vbox);
...
...
import java.util.Calendar;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Orientation;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.chart.BarChart;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.scene.control.Button;
import javafx.scene.layout.FlowPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class BarChartDemo extends Application {

    final String[] months = {"Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"};
    //Connection conn;
    final CategoryAxis month_axis = new CategoryAxis();
    final NumberAxis data_axis = new NumberAxis();
    final XYChart.Series<String, Number> series1 = new XYChart.Series();
    private final BarChart<String, Number> barchart = new BarChart(month_axis, data_axis);
    private Integer year = 0;

    @Override
    public void start(Stage primaryStage) {
        year = Calendar.getInstance().get(Calendar.YEAR);
        Button btn_next = new Button("NEXT");
        Button btn_previous = new Button("PREVIOUS");
        HBox box = new HBox(50);
        box.getChildren().addAll(btn_previous, btn_next);
        box.setAlignment(Pos.TOP_CENTER);
        VBox vbox = new VBox(25);
        box.setPadding(new Insets(10, 0, 10, 0));
        FlowPane pane = new FlowPane(Orientation.VERTICAL);
        vbox.getChildren().addAll(box, barchart);
        barchart.getData().add(series1);
        pane.getChildren().add(vbox);
        Scene scene = new Scene(pane);
        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
        BuildData(year);
        btn_next.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                year += 1;
                BuildData(year);
            }
        });
        btn_previous.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                year -= 1;
                BuildData(year);
            }
        });
    }

    public static void main(String[] args) {
        launch(args);
    }

    private void BuildData(Integer y) {
        series1.setName("Versement");
        month_axis.setLabel("Mois de l'Année");
        month_axis.setStyle("-fx-font-weight:BOLD;" + "-fx-font-size:15");
        data_axis.setLabel("Valeur des Opérations Bancaires");
        data_axis.setStyle("-fx-font-weight:BOLD;" + "-fx-font-size:15");
        series1.getData().clear(); // clear old values
        for (int i = 0; i < months.length; i++) {
            series1.getData().add(new XYChart.Data(months[i], i * 10 * (y-2000)));

//            try {
//                String a;
//                if (i < 9) {
//                    a = y + "0" + (i + 1);
//                } else {
//                    a = y + "" + (i + 1);
//                }
//                conn = DBConnection.connect();
//                String sql = "select sum(montant_operation) from operations where (select Extract(YEAR_MONTH from date_operation)) = '" + a + "' and typ_operation ='Versement';";
//                final ResultSet rs = conn.prepareStatement(sql).executeQuery();
//                if (rs.next()) {
//                    series1.getData().add(new XYChart.Data<>(months[i], rs.getFloat("sum(montant_operation)")));
//                }
//            } catch (SQLException e) {
//                System.out.println(e);
//            }
        }
    }
}
Update grouped barchart with new values

Update grouped barchart with new values


By : Sébastien Bodrero
Date : March 29 2020, 07:55 AM
it fixes the issue Here you go, I've taken your example and modified it. Dimple can deal with this on its own, there's no need to modify the shapes in d3. Try using the code below in your example:
code :
<script type="text/javascript">
    var svg = dimple.newSvg("#chartContainer", 600, 450);

    d3.tsv("/data/example_data.tsv", function (data) {

        // Some constants
        var marginLeft = 65;
        marginTop = 60;
        width = 510;
        height = 330;

        var myChart = new dimple.chart(svg, data);
        myChart.setBounds(marginLeft, marginTop, width, height)
        myChart.addCategoryAxis("x", ["Price Tier", "Channel"]);

        var y = myChart.addMeasureAxis('y', 'Unit Sales'); // should/will be updated
        myChart.addSeries("Channel", dimple.plot.bar);
        myChart.addLegend(marginLeft, marginTop-25, width, 25, "right");
        myChart.draw();

        // on click update
        d3.selectAll("input").on("click", updateChart);

        function updateChart(){
            var what = this.value;
            // Change the measure on the y axis
            y.measure = what;
            // Redraw the chart with a 1 second transition
            myChart.draw(1000);
        };
    });
</script>
How to update barchart in matplotlib?

How to update barchart in matplotlib?


By : Julian Saltmarsh
Date : March 29 2020, 07:55 AM
it helps some times In your case, bars is only a BarContainer, which is basically a list of Rectangle patches. To just remove those while keeping all other properties of ax, you can loop over the bars container and call remove on all its entries or as ImportanceOfBeingErnest pointed out simply remove the full container:
code :
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax  = plt.gca()

x = np.arange(5)
y = np.random.rand(5)

bars = ax.bar(x, y, color='grey', linewidth=4.0)

bars.remove()
x2 = np.arange(10)
y2 = np.random.rand(10)
ax.bar(x2,y2)
plt.show()
JavaFX BarChart doesn't update

JavaFX BarChart doesn't update


By : Malle Joepoe
Date : March 29 2020, 07:55 AM
it helps some times You already define everything you need in the FXML. You should not be creating a new chart, or new axes, in the controller.
Add fx:ids to the axes:
code :
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.chart.BarChart?>
<?import javafx.scene.chart.CategoryAxis?>
<?import javafx.scene.chart.NumberAxis?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.layout.AnchorPane?>


<AnchorPane prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/9.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="window.StatisticsController">
   <children>
      <BarChart fx:id="barChartHistogram" layoutX="40.0" layoutY="14.0" prefHeight="372.0" prefWidth="500.0">
        <xAxis>
          <CategoryAxis fx:id="xAxis" side="BOTTOM" />
        </xAxis>
        <yAxis>
          <NumberAxis fx:d="yAxis" side="LEFT" />
        </yAxis>
      </BarChart>
      <Button fx:id="buttonShow" layoutY="337.0" mnemonicParsing="false" onAction="#buttonShowPressed" text="Button" />
   </children>
</AnchorPane>
public class StatisticsController {

    @FXML
    private BarChart<String, Number> barChartHistogram;

    private SortedMap<String, Integer> _points;

    @FXML
    private CategoryAxis xAxis ;
    @FXML
    private NumberAxis yAxis ;


    @FXML
    private void buttonShowPressed(ActionEvent event) {
        xAxis.setLabel("Numer indeksu");
        yAxis.setLabel("Ilość punktów");
        barChartHistogram.setCategoryGap(0);
        barChartHistogram.setBarGap(0);
        barChartHistogram.setTitle("XDDDDDDDDDDDDDDD");
        barChartHistogram.setMaxHeight(1000);
        XYChart.Series series = new XYChart.Series();
        series.setName("Histogram");
        for (Map.Entry<String, Integer> p: _points.entrySet()) {
            series.getData().add(new XYChart.Data(p.getKey(), p.getValue()));
        }
        barChartHistogram.getData().addAll(series);
    }
}
shadow
Privacy Policy - Terms - Contact Us © ourworld-yourmove.org