如何在 ggplot2 中获取 x 轴的正数和负数并在 R 中重新缩放 y 轴?

How to get both positive and negative number for x-axis in ggplot2 and rescale the y-axis in R?

我正在使用 R 中的 ggplot2 为两个对象 A 和 B 绘制图形。 我的密码是

  ggplot(test_error_bar_14_10_21, aes(x=levels, y=len, colour=index, group=index)) + 
  geom_errorbar(aes(ymin=len-ci, ymax=len+ci), width=.03) +
  geom_line() +
  geom_point(size=3, shape=21, fill="white") + # 21 is filled circle
  xlab("Percentage(%population)") +
  ylab("Treatment on new cases") +
  scale_colour_hue(name="Type of indices",    # Legend label, use darker colors
                   breaks=c("doses/population", "death/population"),
                   labels=c("A", "B"),
                   l=40) +                    # Use darker colors, lightness=40
  ggtitle("The Effect of different vaccines rates on \nA and B") +
  coord_flip() +                              #rotate the graph (https://ggplot2.tidyverse.org/reference/coord_flip.html)
  expand_limits(y=0) +                        # Expand y range
  scale_y_continuous(breaks=0:20*4) +         # Set tick every 4
  theme_bw() +
  theme(legend.justification=c(1,0),
        legend.position=c(1,0))               # Position legend in bottom right 

结果是

可以看出,我在 x 轴上得到了负结果,所以我应该怎么做才能在 x 轴上也标记负间隔? 我看到了 post here 但它只适用于负值,而不适用于同一轴上的负值和正值。

除此之外,如何根据 10%-20%-...100% 而不是当前的 0-25%-75%-100% 重新缩放 y 轴图.

根据@Park 的建议,我在此处添加 test_error_bar_14_10_21 的整个样本

index            levels   len        ci

doses/population 0.1      7.232200   7.511183

doses/population 0.2      2.542600   8.51828

doses/population 0.3      -0.615100  10.090960

doses/population 0.4      -1.219400  9.363690

doses/population 0.5      -2.942717  11.359863

doses/population 0.6      -2.063000  9.12014

doses/population 0.7      0.721000   8.69263

doses/population 0.8      3.288216   10.747079

doses/population 0.9      6.778900   8.944848

doses/population 1.0      7.652900   8.24641

death/population 0.1      4.645150   11.179297

death/population 0.2     -5.860138   14.206702

death/population 0.3     -3.841500   15.451860

death/population 0.4      2.966200   16.215530

death/population 0.5      2.168000   18.536120

(抱歉,我在使用 dput 时出错,它只读取我的 4 列中的 2 列,所以我直接在此处输入数据)。我 但不幸的是我到目前为止失败了。

我添加了@Dave2e 推荐的代码,目前有效,结果如下

更新:我添加了@Park的代码,改进了左栏显示为百分比显示

enter image description here

在@Park的帮助下,我得到了想要的结果。非常感谢

enter image description here

我将你的数据命名为dummy。在 x 轴上,@Dave2e 的评论很有帮助,所以我没有做任何改变,只是做了一些补充。将 labels = scales::percent 更改为 lables = label_percent(accuracy = 5L) 将摆脱回合。并制作另一个向量 dummy2 来指示误差条的大小。

dummy2 <- dummy %>%
  mutate(width = ifelse(index == "doses/population", 1, 0.03)) %>% pull(width)

dummy %>%
  ggplot( aes(x=levels, y=len, colour=index, group=index)) + 
  geom_errorbar(aes(ymin=len-ci, ymax=len+ci), width= 0.03, size = dummy2) +
  geom_line() +
  geom_point(size=3, shape=21, fill="white") + # 21 is filled circle
  xlab("Percentage(%population)") +
  ylab("Treatment on new cases") +
  scale_colour_hue(name="Type of indices",    # Legend label, use darker colors
                   breaks=c("doses/population", "death/population"),
                   labels=c("A", "B"),
                   l=40) +                    # Use darker colors, lightness=40
  ggtitle("The Effect of different vaccines rates on \nA and B") +
  coord_flip() +                              #rotate the graph (https://ggplot2.tidyverse.org/reference/coord_flip.html)
  expand_limits(y=0) +                        # Expand y range
  theme_bw() +
  theme(legend.justification=c(1,0), legend.position=c(1,0)) + 
  scale_y_continuous(breaks=seq(-20,20,4)) + 
  scale_x_continuous(n.breaks=10, labels = label_percent(accuracy = 5L))