gpt4 book ai didi

r - 无法将图例面板添加到具有多个数据集的特定散点图

转载 作者:行者123 更新时间:2023-12-02 20:03:02 24 4
gpt4 key购买 nike

我根本找不到在 R 上使用 ggplot2 在此特定 ggplot 中绘制图例面板的方法。只是想让它出现。

作为上下文,我绘制了 sample 的化学丰度与元素原子序数的关系图。

对于背景,我尝试了这里描述的许多事情:

Reasons that ggplot2 legend does not appear

其中包含链接,但是找不到适合我的特定数据集的解决方案。

我知道问题可能出在数据集的结构内,因为我已经能够使用其他数据做到这一点,但我无法解决它。我也知道问题应该与下面代码中描述的 theme() 有关,因为当我使用默认的 ggplot 配置图例时实际上会出现。我使用这个个性化主题来保持工作的一致性。

这是我迄今为止去除化妆品的方法:

ggplot(atomic, aes(x=atomic$Z, y = atomic$avg, group=1), fill = atomic$Z) + 

绘制平均值的点

geom_point(data=atomic, aes(x=atomic$Z, y=atomic$avg, group=1, color="black"), size=0.5, alpha=1, shape=16 ) +

连接点以获得平均值

geom_line(data=atomic, aes(x=atomic$Z, y=atomic$avg, group=1), color="black", linetype= "dashed") +

绘制样本实际值的点

geom_point(data=atomic, aes(x=atomic$Z, y=atomic$SDSS, group=1, color="#00ba38"), size=5, alpha=1, shape=16, color="#00ba38") +

geom_point(data=atomic, aes(x=atomic$Z, y=atomic$HE22, group=1, color="#619cff"), size=5, alpha=1, shape=16, color="#619cff") +

geom_point(data=atomic, aes(x=atomic$Z, y=atomic$HE12, group=1, color="#F8766D"), size=5, alpha=1, shape=16, color="#F8766D") +

编辑:base_breaks的定义(下面使用)

base_breaks_x <- function(x){
b <- pretty(x)
d <- data.frame(y=-Inf, yend=-Inf, x=min(b), xend=max(b))
list(geom_segment(data=d, aes(x=x, y=y, xend=xend, yend=yend), inherit.aes=FALSE),
scale_x_continuous(breaks=b))
}
base_breaks_y <- function(x){
b <- pretty(x)
d <- data.frame(x=-Inf, xend=-Inf, y=min(b), yend=max(b))
list(geom_segment(data=d, aes(x=x, y=y, xend=xend, yend=yend), inherit.aes=FALSE),
scale_y_continuous(breaks=b))
}

问题可能就在这里

theme_bw() +

theme(plot.title = element_text(hjust = 0.5),
text = element_text(size=20),
legend.position="bottom",
panel.border = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank()) +
base_breaks_x(atomic$Z) +
base_breaks_y(atomic$HE22)

数据集如下

 Z Name  HE22  SDSS  HE12   avg
1 3 Li NA 1.00 NA 1.00
2 6 C 6.16 5.50 6.06 5.91
3 7 N NA NA 6.49 6.49
4 11 Na NA NA 3.53 3.53
5 12 Mg 5.32 4.43 4.99 4.91
6 13 Al 2.90 NA 3.08 2.99
7 14 Si NA 4.90 4.89 4.90
8 20 Ca 4.07 3.37 3.56 3.67
9 21 Sc 0.72 -0.07 0.24 0.30
10 22 Ti 2.74 1.79 2.47 2.33
11 23 V NA NA 1.18 1.18
12 24 Cr 2.88 2.14 2.67 2.56
13 25 Mn 2.34 1.59 2.44 2.12
14 26 Fe 4.92 4.14 4.59 4.55
15 27 Co 2.57 1.72 2.36 2.22
16 28 Ni 3.63 2.96 3.51 3.37
17 29 Cu NA NA 0.31 0.31
18 30 Zn 2.29 NA 2.44 2.37
19 38 Sr 0.62 0.29 0.41 0.44
20 39 Y -0.22 -0.44 -0.33 -0.33
21 40 Zr 0.60 NA 0.30 0.45
22 56 Ba 0.13 -0.10 0.12 0.05
23 57 La -0.77 -0.49 -0.77 -0.68
24 58 Ce NA NA -0.39 -0.39
25 59 Pr NA NA -0.78 -0.78
26 60 Nd -0.47 NA -0.37 -0.42
27 62 Sm NA NA -0.57 -0.57
28 63 Eu -1.02 -0.92 -0.85 -0.93
29 64 Gd NA NA -0.39 -0.39
30 66 Dy NA NA -0.16 -0.16
31 68 Er NA -0.40 NA -0.40
32 70 Yb NA -0.60 NA -0.60
33 90 Th NA -0.60 NA -0.60

Z = 原子序数,Name = 元素,HE12/HE22/SDSS = sample ,avg = sample 的平均值。

我想知道如何添加与散点图颜色一致的图例面板。

非常感谢!希望我能正确描述问题。

最佳答案

这是我个人会做的。

我将数据从宽格式转换为长格式,因为这样更容易操作颜色(抱歉,我只是使用通用的“键”和“值”,因为我不确定您希望为列命名什么) 。希望这至少能让你到达你想去的地方的一部分。如果您有疑问,请告诉我!

library(ggplot2)
library(tidyr)
p <- atomic %>%
gather(key = "key", value = "value", SDSS, HE22, HE12) %>%
ggplot(aes(Z, value, color = key))+
geom_point() +
geom_text(aes(x = Z, y = avg, label = Name), # EDITED
color = "black")
scale_color_manual(values = c("#00ba38", "#619cff", "#F8766D"))
p +
geom_line(data=atomic, aes(x=atomic$Z, y=atomic$avg, group=1), color="black",
linetype= "dashed") +
theme_bw() +
theme(plot.title = element_text(hjust = 0.5),
text = element_text(size=20),
legend.position="bottom",
panel.border = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank()) +
base_breaks_x(atomic$Z) +
base_breaks_y(atomic$HE22)

已编辑

我添加了 geom_text() 命令,以便显示标签。您可以调整参数,使标签看起来更好。我还听说 ggrepel 包中的 geom_text_repel() 对于创建漂亮的标签很有帮助:https://cran.r-project.org/web/packages/ggrepel/vignettes/ggrepel.html#examples My output

关于r - 无法将图例面板添加到具有多个数据集的特定散点图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55410213/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com