使用ggplot的条形图和折线图的多个y轴

本森

我有一个实验的蒸腾数据,希望将其显示为使用R的线图上的时间序列。我也有一些降水数据,希望与条形图显示在同一张图上。我已经可以使用R的基本程序来执行此操作,但是我想在ggplot中执行此操作。我到处搜索过,我知道设计师不太喜欢用这种方式制作图形,因此很难,但是我看到它是通过使用两个y轴的多个线图/散点图完成的。可以通过折线图和条形图来完成吗?

这是我在基本R中所拥有的 蒸腾时间序列

这是我用来作图的数据

时间序列数据在这里

此处的降雨数据

这是上面剧情的代码。

 attach(summary)
library(Hmisc)
library(scales)
par(mar=c(6.5,4,4,5)+.1)
plot(summary$dates,summary$c_mean_am,type="n",ylim=c(100,350),
     main="Stomatal Conductance during experiment",las=1,cex.main=1,
     font.lab=2,font.axis=2,cex.axis=0.7,cex.lab=0.8,
     ylab=expression('Stomatal conductance'~(m~mol~ m^{2})),,xlab="Date")
lines(dates,c_mean_am,pch=21,cex=0.6,bg="blue",col="blue")
lines(dates,T1_mean_am,pch=21,cex=0.6,bg="yellow",col="yellow")
lines(dates,T2_mean_am,pch=21,cex=0.6,bg="hotpink1",col="hotpink1")
lines(dates,T3_mean_am,pch=21,cex=0.6,bg="orange",col="orange")
lines(dates,T4_mean_am,pch=21,cex=0.6,bg="red",col="red")
with (data = summary  , expr = errbar(dates, c_mean_am, 
                                      c_mean_am+c_se_am, 
                                      c_mean_am-c_se_am, 
                                      add=T, pch=21,col="blue",bg="blue",
                                      cex=0.6,cap=0.01,errbar.col="blue"))
with (data = summary  , expr = errbar(dates, T1_mean_am, 
                                      T1_mean_am+T1_se_am, 
                                      T1_mean_am-T1_se_am, add=T, 
                                      pch=21,col="yellow",bg="yellow",
                                      cex=0.6,cap=0.01,errbar.col="yellow"))
with (data = summary  , expr = errbar(dates, T2_mean_am, 
                                      T2_mean_am+T2_se_am, 
                                      T2_mean_am-T2_se_am, 
                                      add=T, pch=21,col="hotpink1",
                                      bg="hotpink1",cex=0.6,cap=0.01,
                                      errbar.col="hotpink1"))
with (data = summary  , expr = errbar(dates, T3_mean_am, 
                                      T3_mean_am+T3_se_am, 
                                      T3_mean_am-T3_se_am, 
                                      add=T, pch=21,col="orange",
                                      bg="orange",cex=0.6,cap=0.01,
                                      errbar.col="orange"))
with (data = summary  , expr = errbar(dates, T4_mean_am, 
                                      T4_mean_am+T4_se_am, 
                                      T4_mean_am-T4_se_am, add=T, 
                                      pch=21,col="red",bg="red",
                                      cex=0.6,cap=0.01,errbar.col="red"))
data2<-Rainfall
names(data2)
par(new=TRUE)
graph<-tapply(data2$`daily rainfall`,data2$DATE,I)
barplot(graph,col="light blue",border=NA,xaxt="n",yaxt="n",xlab="",ylab="",ylim=c(0,150))
axis(4,las="1",cex.axis=0.7,font.axis=2)
mtext("Rainfall (mm)",side=4,line=3,font=2,cex=0.8)

以下是ggplot时间序列图和格式略有不同的相同数据

ggplot

这是代码

dt<-am_means
attach(dt)
dt$dates <- as.Date(dt$dates,format = "%d/%m/%y")
sp<-ggplot(dt,aes(x=dates,y=cond,colour=Treatment,group=Treatment))+geom_errorbar
(aes(ymin=cond-err,ymax=cond+err),width=0.5,size=0.5)+geom_line()+geom_point()+scale_x_date
(date_breaks = "2 weeks",date_minor_breaks = "1 week",date_labels = "%b %d")

sp2<-sp + scale_color_manual(breaks = c("Control", "T1","T2","T3","T4"),
values=c("blue", "yellow","hotpink1","orange","red"))

print(sp2 +ylim(100, 350)+labs(title= "Stomatal Conductance - Tamata Maples", 
y=expression(Conductance (m~mol~m^{-2})), x = "Date"))

可以在同一ggplot折线图上显示降雨条形图吗?

瓦伦丁

如此此处以版本2.2.0开始的漂亮示例所述ggplot2,可以添加辅助轴

可以尝试一下:

准备提供的数据以用于ggplot

# Read data from OP's DropBox links
am_means <- read.csv("https://www.dropbox.com/s/z4dl0jfslhqccb8/am_means.csv?dl=1")
rainfall <- read.csv("https://www.dropbox.com/s/vkv9vm5o93ttk1i/Rainfall.csv?dl=1")

am_means$dates <- as.Date(am_means$dates, format = "%d/%m/%Y")
rainfall$DATE <- as.Date(rainfall$DATE,format = "%d/%m/%Y")

# join the two tables
my_data_all <- merge(x = am_means,
                     y = rainfall,
                     by.x = "dates",
                     by.y = "DATE",
                     all = TRUE)

# use data between desired date interval (rainfall had some extra dates)
require(data.table)
setDT(my_data_all)
my_data <- my_data_all[dates %between% c("2017-01-31", "2017-04-06")]

具有次要OY轴的图:

转换第二个OY(右侧)上显示的数据很重要由于最大值比第一个OY轴(左侧)的数据小2倍,因此可以乘以2。

my_factor <- 2
my_plot <- ggplot(my_data, 
                  aes(x = dates,
                      group = Treatment)) +
    geom_errorbar(aes(ymin = cond - err,
                      ymax = cond + err,
                      colour = Treatment),
                  width = 0.5,
                  size  = 0.5) +
    geom_line(aes(y = cond, colour = Treatment)) + 
    geom_point(aes(y = cond, colour = Treatment)) +
    # here the factor is applied 
    geom_bar(aes(y = daily.rainfall * my_factor), 
             fill = "light blue",
             stat = "identity")
my_plot

在此处输入图片说明

使用添加第二个OY轴scale_y_continuous注意转换回来。如果在上面我们乘以2,现在我们将数据除以2:

my_plot <- my_plot + scale_y_continuous(sec.axis = sec_axis(trans = ~ . / my_factor, 
                                                            name = "Rainfall (mm)"))

继续OP的代码

my_plot <- my_plot + scale_x_date(date_breaks = "2 weeks",
                                  date_minor_breaks = "1 week",
                                  date_labels = "%b %d") + 
    scale_color_manual(breaks = c("Control", "T1", "T2", "T3", "T4"),
                       values = c("blue", "yellow", "hotpink1", "orange", "red")) +
    labs(title = "Stomatal Conductance - Tamata Maples", 
         y = expression(Conductance (m~mol~m^{-2})), 
         x = "Date") +
    theme_bw()
my_plot

在此处输入图片说明

其他一些相关的已回答问题:添加累积曲线组合条形图和折线图

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Python使用辅助y轴制作条形图和折线图

在ggplot2中组合条形图和折线图(双轴)

ggplot组合的条形图和折线图

如何在双Y轴图中的ggvis中对齐条形图和折线图?

如何使用ggplot在一个图表中创建条形图和折线图

如何使用ng2-charts获取多个图表(条形图和折线图)?

散景中具有多个x轴刻度的水平条形图和折线图

Chart.js在条形图和折线图上具有双轴

熊猫-条形图和折线图-日期时间轴

如何绘制混合的条形图和折线图并获取x轴作为年份

使用pandas和matplotlib绘制叠加图(折线图和条形图)

在JavaScript中组合条形图和折线图

分组条形图和折线图

Highcharts获得组合的条形图和折线图

ggplot - 一个图上的双折线图和堆积条形图

如何在ggplot2中绘制组合的条形图和折线图

如何在条形图和折线图的同一图上绘制多个列表?

无法使用pandas plot()函数组合条形图和折线图

使用iOS图表的组合图表(折线图和条形图)

Python:使用 DataFrame 绘制折线图和条形图时 DatetimeIndex 的不同行为

如何使用R组合特定变量的折线图和条形图

使用选取框行为创建折线图和条形图

将图例添加到两个 y 轴上的条形图 + 折线图

Matplotlib:如何在2个独立的轴上显示条形图和折线图例?

D3.js 组合条形图和折线图 x 轴未对齐问题

如何仅用一个分组变量将ggplot2中的折线图和条形图合并?

情节:如何将条形图和折线图与条形图组合为子图?

使用ggplot绘制线形图和条形图(带有辅助轴的线图)

条形图 ggplot2 R 上的折线图