r - 用 : shifted y-axis 行覆盖条形图

标签 r bar-chart

数据:

V   D1  D2  D3  CS1 CS2 CS3
10  2038    1806    1643    72.81171847 64.52304394 58.69953555
20  550 709 757 92.46159343 89.85351911 85.7449089
30  142 192 271 97.53483387 96.71311183 95.42693819
40  45  61  80  99.14255091 98.89246159 98.28510182
50  12  20  30  99.57127546 99.6070025  99.35691318
60  5   6   10  99.74991068 99.82136477 99.71418364
70  2   2   3   99.82136477 99.89281886 99.82136477
80  4   1   2   99.96427295 99.92854591 99.89281886
90  1   0   1   100.0000000 99.92854591 99.92854591
100 0   1   0   100.0000000 99.96427295 99.92854591

脚本:

mp<-barplot(as.matrix(t(df[,2:4])),beside=TRUE,xlim=c(0,40),ann=FALSE)
mp
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,]  1.5  5.5  9.5 13.5 17.5 21.5 25.5 29.5 33.5  37.5
[2,]  2.5  6.5 10.5 14.5 18.5 22.5 26.5 30.5 34.5  38.5
[3,]  3.5  7.5 11.5 15.5 19.5 23.5 27.5 31.5 35.5  39.5

par(new=TRUE)
plot(mp[2,],df$CS1,xlim=c(0,40),type="l",col="red",axes=FALSE,ylim=c(0,100),ann=FALSE)
lines(mp[2,],df$CS2,col="blue")
lines(mp[2,],df$CS3,col="green")
axis(1,at=mp[2,],labels=df$V)
axis(4,at=seq(0,100,10))

创建这个

combined barplot and lines

如果你看一下图片,Y 轴会相互移动。 如何让两个Y轴的0在同一高度?

最佳答案

这是使用 dplyrggplot2 处理数据操作和可视化的另一种方法:

df <- df %>% 
      gather(D, d_val, D1:D3) %>% 
      gather(CS, cs_vsl, CS1:CS3)

这将提供数据集的长格式,即

head(df)

   V  D d_val  CS   cs_vsl
1 10 D1  2038 CS1 72.81172
2 20 D1   550 CS1 92.46159
3 30 D1   142 CS1 97.53483
4 40 D1    45 CS1 99.14255
5 50 D1    12 CS1 99.57128
6 60 D1     5 CS1 99.74991

使用长格式,可以像这样完成双轴图:

ggplot(df, aes(V)) + 
  geom_bar(aes(y=d_val, fill=D), stat="identity", position="dodge") + 
  geom_line(aes(y=cs_vsl*20, colour=CS)) +
  scale_y_continuous(sec.axis = sec_axis(~./20, name = "CS")) + ylab("D") +
  scale_x_continuous(breaks=seq(0,100, 10))

enter image description here

此方法将解决两个轴上的 0 未在同一直线上对齐的问题。

关于r - 用 : shifted y-axis 行覆盖条形图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43839102/

相关文章:

在 data.table 中按组进行回归和汇总统计

r - R中有没有办法将多层栅格(Terra)转换为rasterStack对象(Raster)?

r - 动态计算 r 中的条件表达式

python - 条形图,带有单独的正值和负值条形图

javascript - D3.js 条形图不刷新

r - 如何在 R 中打开 .xlsb 文件?

r - 将两个图例添加到 image.plot

r - 在 ggplot 中向 barplot 添加图例

python - 显示带有数据帧中的值的标签堆叠条形图

javascript - d3.js 条形图新数据添加到条形图上,