R 在ggplot中具有不同位置的错误条和条形图

R 在ggplot中具有不同位置的错误条和条形图,r,ggplot2,bar-chart,R,Ggplot2,Bar Chart,我有一个数据帧df > df id zone mean SE 1 1 1 0.9378712 0.10 2 1 2 2.4830645 0.09 3 1 3 0.7191759 0.09 4 1 4 1.3030844 0.09 5 1 5 1.2497096 0.11 6 1 6 0.7247015 0.15 7 1 7 0.1776825 0.16 8 1 8 1.4755258 0.1

我有一个数据帧df

> df
   id zone      mean   SE
1   1    1 0.9378712 0.10
2   1    2 2.4830645 0.09
3   1    3 0.7191759 0.09
4   1    4 1.3030844 0.09
5   1    5 1.2497096 0.11
6   1    6 0.7247015 0.15
7   1    7 0.1776825 0.16
8   1    8 1.4755258 0.13
9   1    9 1.0902742 0.16
10  1   10 0.2679057 0.08
11  1   12 0.7677998 0.09
12  2    1 1.2728942 0.14
13  2    2 1.3189574 0.07
14  2    3 1.0934750 0.14
15  2    4 1.3024298 0.10
16  2    5 1.3029797 0.11
17  2    6 1.0878356 0.12
18  2    7 0.5390098 0.12
19  2    8 1.2761170 0.09
20  2    9 1.1395524 0.12
21  2   10 0.6863418 0.14
22  2   12 1.1534048 0.12
23  3    1 1.2963668 0.14
24  3    2 1.3032349 0.07
25  3    3 1.1302980 0.14
26  3    4 1.3049038 0.10
27  3    5 1.3221782 0.11
28  3    6 1.0464710 0.14
29  3    7 0.4997006 0.13
30  3    8 1.2777002 0.09
31  3    9 1.1480874 0.12
32  3   10 0.6844529 0.15
33  3   12 1.1593346 0.13
34  4    1 1.2819611 0.14
35  4    2 1.4276992 0.07
36  4    3 1.1061886 0.14
37  4    4 1.3572913 0.11
38  4    5 1.3588146 0.12
39  4    6 1.1318426 0.14
40  4    7 0.5321167 0.12
41  4    8 1.3701237 0.10
42  4    9 1.1996266 0.13
43  4   10 0.6977050 0.14
44  4   12 1.2620727 0.14
现在可以看到,在区域中没有11个数字,10之后是12。 所以当我自动绘制它时,它是这样的

axis_labels <- c("first","second","third","fourth","fifth","sixth","seventh","eigth","ninth","tenth","eleventh")
axis_labels <- setNames(axis_labels, 1:11)



ggplot(df, aes(x=factor(zone), y=mean, fill = id)) + 
  geom_col(position = position_dodge()) +
  scale_fill_discrete(labels = c("1" = "M", "2" = "I","3" = "Mi","4"="C"))+
  scale_x_discrete(labels = axis_labels) +
  theme(axis.title.x = element_blank(), 
        axis.line.x = element_blank(), 
        axis.text.x = element_blank(),
        axis.ticks.x = element_blank()) +
  theme(plot.margin = unit(rep(0, 5), "pt"))+
  geom_errorbar(aes(x=zone, ymin=mean-SE, ymax=mean+SE), width=0.4, position = position_dodge(.9))+
  theme_bw()

axis\u标签问题归结为几件事:

  • 首先,我将对列
    进行推断:我非常确信
    id
    应该是
    字符
    ,但我不确定
    区域
    。我现在猜
    字符

  • 在一种美学中使用
    因子(区域)
    ,在另一种美学中使用
    区域
    ;要么它们都应该是
    因子
    ,要么没有,否则你会把
    ggplot2
    (和我)搞混

  • 你的
    区域中有
    12
    ,但你的标签上写着
    11th
    ,不确定这是打字错误还是其他原因

  • 我认为解决办法是制作一个“适当的”因子变量


    df$zone问题归结为几件事:

  • 首先,我将对列
    进行推断:我非常确信
    id
    应该是
    字符
    ,但我不确定
    区域
    。我现在猜
    字符

  • 在一种美学中使用
    因子(区域)
    ,在另一种美学中使用
    区域
    ;要么它们都应该是
    因子
    ,要么没有,否则你会把
    ggplot2
    (和我)搞混

  • 你的
    区域中有
    12
    ,但你的标签上写着
    11th
    ,不确定这是打字错误还是其他原因

  • 我认为解决办法是制作一个“适当的”因子变量


    df$zone您的
    zone
    范围为1-12,但您的
    axis\u标签只有11个元素,这是故意的吗?此外,当我尝试您的代码时,我得到了未找到的
    对象“gp”
    ,如果我省略
    ylab(gp)
    ,我会得到
    错误:提供给离散比例的连续值。请更新/修复您的问题/数据/代码。(我猜离散/连续的错误是因为您的
    id
    是字符串,而您在此处提供的示例数据不是清晰的字符串。特别是当
    字符
    字段似乎都是数字时,通常最好通过
    dput()
    ,因为它消除了这种模糊性。)最终,我怀疑如果您将
    12
    df$zone
    替换为
    11
    ,它将正确绘制。但是,由于您希望
    区域
    是一个
    因子
    (仅在您指定的两个位置之一使用,它们必须全部为
    因子
    ,或者不为任何一个),因此您的绘图顺序将不正确。只是想知道,我如何在df$区域中将12替换为11?我可以尝试很多方法
    ifelse
    replace
    可能是最简单的,可以处理字符串或数字<代码>pmin
    也可以,假设您没有超过11个计划的元素。您的
    区域
    范围为1-12,但您的
    轴标签
    只有11个元素,这是故意的吗?此外,当我尝试您的代码时,我得到了未找到的
    对象“gp”
    ,如果我省略
    ylab(gp)
    ,我会得到
    错误:提供给离散比例的连续值。请更新/修复您的问题/数据/代码。(我猜离散/连续的错误是因为您的
    id
    是字符串,而您在此处提供的示例数据不是清晰的字符串。特别是当
    字符
    字段似乎都是数字时,通常最好通过
    dput()
    ,因为它消除了这种模糊性。)最终,我怀疑如果您将
    12
    df$zone
    替换为
    11
    ,它将正确绘制。但是,由于您希望
    区域
    是一个
    因子
    (仅在您指定的两个位置之一使用,它们必须全部为
    因子
    ,或者不为任何一个),因此您的绘图顺序将不正确。只是想知道,我如何在df$区域中将12替换为11?我可以尝试很多方法
    ifelse
    replace
    可能是最简单的,可以处理字符串或数字<代码>pmin
    也会起作用,假设你没有超过11的计划。一个关键的收获(imo)是,如果你期望某个东西成为ggplot中的一个
    因子,这意味着几件事:(1)你期望离散;(2) 通常,您期望的是您的顺序,而不是ggplot强制要求的词典顺序;(3) 也许是水平的顺序。从这三个方面来看,通常最好/最简单的方法是在
    ggplot(.)
    之外管理
    因子
    以降低忘记或错误分配级别的风险。(例如,如果您在调用中这样做,每次使用都需要
    因子(,,levels=)
    ,更容易更新一个而不是另一个。可维护性是关键。)如何将x轴上的第一个、第二个第三个变量更改为“治疗”非“控制”…等等。您的意思是取代
    “第一个”
    “第二个”“
    ,等等?一个关键要点(imo)是,如果你期望某个东西成为ggplot中的
    因子,这意味着几件事:(1)你期望离散;(2) 通常,您期望的是您的顺序,而不是ggplot强制要求的词典顺序;(3) 也许是水平的顺序。从这三个方面来看,通常最好/最简单的方法是在
    ggplot(.)
    之外管理
    因子
    以降低忘记或错误分配级别的风险。(例如,如果您在调用中这样做,每次使用都需要
    因子(,,levels=)
    ,更容易更新其中一个,而不是另一个。可维护性是关键。)如何将x轴上的第一、第二个第三个变量更改为“治疗”非“控制”…等等。您的意思是代替
    “第一”
    “第二”
    ,等等?