如何在 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))
我正在使用 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))