ggplot2-添加两个图例(geom_point和color_gradient)

时间:2019-01-03 19:47:01

标签: r ggplot2

我想在ggplot图形中有两个不同的图例。 一个用于颜色渐变,另一个用于解释红色标记的点。

红色圆圈的图例应仅包含一行和单个文本。

我只能创建颜色渐变比例,而不能创建另一个:

public class testLogs {

  protected static Logger logger;

  private static void setupLogging(boolean useConsole) {
    if (useConsole) {
        ConfigurationBuilder<BuiltConfiguration> builder = ConfigurationBuilderFactory.newConfigurationBuilder();
        builder.setStatusLevel(Level.ERROR);
        builder.setConfigurationName("BuilderTest");
        builder.add(builder.newFilter("ThresholdFilter", Filter.Result.ACCEPT, Filter.Result.NEUTRAL)
                .addAttribute("level", Level.DEBUG));
        AppenderComponentBuilder appenderBuilder = builder.newAppender("Stdout", "CONSOLE").addAttribute("target",
                ConsoleAppender.Target.SYSTEM_OUT);
        appenderBuilder.add(builder.newLayout("PatternLayout")
                .addAttribute("pattern", "%d [%t] %-5level: %msg%n%throwable"));
        appenderBuilder.add(builder.newFilter("MarkerFilter", Filter.Result.DENY, Filter.Result.NEUTRAL)
                .addAttribute("marker", "FLOW"));
        builder.add(appenderBuilder);
        builder.add(builder.newLogger("org.apache.logging.log4j", Level.DEBUG)
                .add(builder.newAppenderRef("Stdout")).addAttribute("additivity", false));
        builder.add(builder.newRootLogger(Level.ERROR).add(builder.newAppenderRef("Stdout")));
        LoggerContext ctx = Configurator.initialize(builder.build());
        ctx.updateLoggers();
    } else {
        // from https://stackoverflow.com/a/34969778/10863944
        ConfigurationBuilder<BuiltConfiguration> builder = ConfigurationBuilderFactory
                .newConfigurationBuilder();

        builder.setStatusLevel(Level.ERROR);
        builder.setConfigurationName("RollingBuilder");
        // create the console appender
        AppenderComponentBuilder appenderBuilder = builder.newAppender(
                "Stdout", "CONSOLE").addAttribute("target",
                ConsoleAppender.Target.SYSTEM_OUT);
        appenderBuilder.add(builder.newLayout("PatternLayout").addAttribute(
                "pattern", "%d [%t] %-5level: %msg%n%throwable"));
        builder.add(appenderBuilder);

        LayoutComponentBuilder layoutBuilder = builder.newLayout(
                "PatternLayout").addAttribute("pattern",
                "%d [%t] %-5level: %msg%n");
        @SuppressWarnings("rawtypes")
        ComponentBuilder triggeringPolicy = builder
                .newComponent("Policies")
                .addComponent(
                        builder.newComponent("CronTriggeringPolicy")
                                .addAttribute("schedule", "0 0 0 * * ?"))
                .addComponent(
                        builder.newComponent("SizeBasedTriggeringPolicy")
                                .addAttribute("size", "100M"));
        appenderBuilder = builder
                .newAppender("rolling", "RollingFile")
                .addAttribute("fileName", "logs/mylog.log")
                .addAttribute("filePattern",
                        "logs/mylog-%d{MM-dd-yy}.log.gz").add(layoutBuilder)
                .addComponent(triggeringPolicy);
        builder.add(appenderBuilder);

        // create the new logger
        builder.add(builder.newLogger("TestLogger", Level.DEBUG)
                .add(builder.newAppenderRef("rolling"))
                .addAttribute("additivity", false));

        builder.add(builder.newRootLogger(Level.DEBUG).add(
                builder.newAppenderRef("rolling")));
        LoggerContext ctx = Configurator.initialize(builder.build());
        ctx.updateLoggers();
    }
    logger = LogManager.getLogger();
  }

  public static void main(String[] args) {
    setupLogging(true); // use the console
    logger.info("logging should be on the console");
    setupLogging(false); // do not use the console
    logger.info("logging should be in the log file");
  }

}

enter image description here

1 个答案:

答案 0 :(得分:1)

必须为aes()分配scale_alpha()

library(ggplot2)
data <- data.frame(A = runif(10, 0, 10), 
                   B = runif(10, 0, 10), 
                   color = runif(10, 0, 10), 
                   density = runif(10, 0, 10), 
                   red = rep(1:5, each=2))

ggplot(data, aes(A, B, color = color, alpha = 1/density)) +
  geom_point(shape = 16, size = 5, show.legend = T) +
  geom_point(data = data[data$red == 1,],color="red",size=5, alpha = 0.7, show.legend = T) +
  theme_minimal() +
  theme(axis.text=element_text(size=12, family = 'serif'),
        axis.title=element_text(size=16,face="bold", family = 'serif'),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        axis.line = element_line(colour = "black")) +
  scale_color_gradient(low = "white", high = "black", name = "Scale", breaks = c(8,2), labels = c("max","min"))+
  scale_alpha(range = c(.5, .7), aes(breaks = data$A[1], labels = c("1"))) +
  scale_x_continuous(trans='log10', name = "A") +
  scale_y_continuous(trans='log10', name = "B") 

enter image description here