簡體   English   中英

在 ggplot2 中創建自定義圖例

[英]Create custom legend in ggplot2

所以,這是我的問題。 我有類似於下面我想用ggplot2繪制的最小可重現示例的數據,其中數據框包含我想用作每個geom的 x 值的一列和我想要作為不同 y 值的幾列。 從下面的示例中可以看出,我想將geom_linegeom_pointgeom_point值的不同形狀組合在一起。

我現在的問題是,如何插入一個圖例來告訴我哪個形狀代表哪些列。 到目前為止,根據我對ggplot2了解,通常會生成圖例,如果我將某些因素(可能不是正確的術語)映射到color =group = ,我錯了? 那么如果沒有這個先決條件,我怎么能得到一個傳奇呢?

非常感謝幫助!

library(tidyverse)

df <- structure(list(rep = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1), Y_1 = c(0.0198, 0.0108, 0, 0.0117, 0.00931, 0.0089, 0.0115, 
0.00509, 0.00831, 0.0158, 0.0437, 0.0953, 0.267, 0.677, 1.81), 
    Y_2 = c(0.025, 0.00249, 0.00303, 0.00268, 0.0102, 0.0112, 
    0.0231, 0.0326, 0.0575, 0.0852, 0.143, 0.219, 0.384, 0.687, 
    1.01), X = c(0.1, 0.164, 0.268, 0.439, 0.72, 1.18, 1.93, 
    3.16, 5.18, 8.48, 13.9, 22.8, 37.3, 61.1, 100)), row.names = c(NA, 
15L), class = "data.frame")

df_plot <- ggplot(data = df) +
  geom_line(mapping = aes(x = X, y = Y_1)) +
  geom_point(mapping = aes(x = X, y = Y_1), shape = 15) +
  geom_line(mapping = aes(x = X, y = Y_2)) +
  geom_point(mapping = aes(x = X, y = Y_2), shape = 0) +
  scale_x_log10() +
  scale_y_log10() +
  theme_classic()

df_plot

創建圖例的方法是將變量的不同級別映射到美學比例(在您的情況下,形狀比例)。 ggplot最慣用的方法是將您的數據重塑為長格式,方法是將Y_1Y_2變成一列 y 值,並使用一個新列根據它來自的原始列標記每個 y 值。 這意味着您只需要一次調用geom_line和一次調用geom_point

ggplot(data = tidyr::pivot_longer(df, c("Y_1", "Y_2"))) +
  geom_line(mapping = aes(x = X, y = value, group = name)) +
  geom_point(mapping = aes(x = X, y = value, shape = name)) +
  scale_shape_manual(values = c(0, 15)) +
  scale_x_log10() +
  scale_y_log10() +
  labs(shape = "variable") +
  theme_classic()

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM