带有2个Y变量的ggplot2条形图

时间:2015-05-29 01:02:36

标签: r ggplot2 bar-chart

我正在尝试使用ggplot2(在R中)创建一个简单的条形图。 我想每个类别有2个酒吧。

ImageView

所以对于A,我希望有2个条相当于0,53(Y1)和0,01(Y2)。对于B,它将是2条相当于0,23(Y1)和0,01(Y2)等等。

这是我到目前为止所尝试的:

import java.util.Random;

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.CheckBox;
import javafx.scene.control.Label;
import javafx.scene.control.ScrollPane;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.TilePane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

public class ImageViewClickTest extends Application {

    private static final Random RNG = new Random();

    @Override
    public void start(Stage primaryStage) {
        TilePane tilePane = new TilePane();

        CheckBox pickOnBounds = new CheckBox("Pick on bounds");
        pickOnBounds.setPadding(new Insets(16));

        for (int i=1; i<=200; i++) {
            ImageView imageView = createImageView(i);

            imageView.pickOnBoundsProperty().bind(pickOnBounds.selectedProperty());

            // mouse handler directly on image view:
            // can access image-view specific data...
            String message = "Clicked on Image "+i ;
            imageView.setOnMouseClicked(e -> 
                System.out.println("From handler on ImageView: "+message));


            tilePane.getChildren().add(imageView);
        }
        StackPane stack = new StackPane(tilePane);

        stack.setOnMouseClicked(e -> {
            // source will be the stack pane
            // target will be the top-most node 
            // (i.e. the ImageView, in most cases)
            System.out.println("From handler on stack pane: Source: "+e.getSource());
            System.out.println("From handler on stack pane: Target: "+e.getTarget());
        });


        ScrollPane scroller = new ScrollPane(stack);
        scroller.setFitToWidth(true);

        scroller.setOnMouseClicked(e -> {
            // source will be the scroll pane
            // target will be the top-most node 
            // (i.e. the ImageView, in most cases)
            System.out.println("From handler on scroller: Source: "+e.getSource());
            System.out.println("From handler on scroller: Target: "+e.getTarget());
        });

        BorderPane root = new BorderPane(scroller, pickOnBounds, null, null, null);

        Scene scene = new Scene(root, 400, 400);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    private ImageView createImageView(int index) {
        Label label = new Label(Integer.toString(index));
        label.setAlignment(Pos.CENTER);
        label.setMinSize(48, 48);
        label.setStyle(randomStyle());
        Image image = new Scene(label, Color.TRANSPARENT).snapshot(null);
        ImageView imageView = new ImageView(image);
        return imageView ;
    }

    private String randomStyle() {
        StringBuilder style = new StringBuilder();
        style.append("-fx-background-color: -fx-background;");
        style.append("-fx-background: ");
        if (RNG.nextDouble() < 0.25) {
            style.append( "transparent;");
            style.append(" -fx-text-fill: black;") ;
        } else {
            String bg = String.format("#%02x%02x%02x;", 
                    RNG.nextInt(256), RNG.nextInt(256), RNG.nextInt(256));
            style.append(bg);
        }
        return style.toString();
    }

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

由于

1 个答案:

答案 0 :(得分:2)

library(reshape)    
dataframe <- melt(dataframe )
    dataframe  <- dataframe [complete.cases(dataframe ),]

    ggplot(data = dataframe , aes(x=X, y = value, fill = variable) ) + geom_bar(stat="identity", position="dodge")

enter image description here

如果需要,您还可以通过删除位置减淡声明来堆叠它们。 您可以使用普通ggplot命令更改标签和轴标题。