【问题标题】:绘制多个图时,在 ggplot2 图例中设置固定数量的中断
【发布时间】:2022-01-20 06:46:51
【问题描述】:

假设我有一个包含 20 个数据帧的列表 df,我需要使用 scale_fill_steps2 将它们绘制在 for loop 中,如下所示:

plot_lst=list()

for (i in 1:length(df)) {
  
    plot_lst[[i]] = ggplot() +
    geom_contour_fill(data=df[[i]], aes(x=lon, y=lat, z =value)) +
    scale_fill_steps2(name = "", low = "#0571b0", mid = '#ffffbf', high = '#ca0020')

}

我的每个 data.frames 都有不同的value 范围,并且为每个数据创建一个 taylored 图例是不切实际的。通过使用上面的代码,我得到了一个在 data.frames 之间具有不同数量的中断(或 bin)的图例。

有没有一种方法可以绘制我的 data.frames 在图例中具有唯一数量的中断?例如总共 5 或 6 次休息。

感谢您的帮助

【问题讨论】:

标签: r dataframe ggplot2 legend break


【解决方案1】:

在您的绘图函数中,使用seq() 根据每个数据框的value 的范围创建一个长度为numbreaks 的向量。

# plotting function
plotbreaks <- function(dat, numbreaks) {

    xmin <- min(dat$value)
    xmax <- max(dat$value)
   
    breaks <- seq(from = xmin, to = xmax,
                  by = round((xmax - xmin) / numbreaks, digits = 0))

    ggplot() +
    geom_contour_fill(data = dat,
                      mapping = aes(x = lon, y = lat, z = value)) +
    scale_fill_steps2(name = "", low = "#0571b0",
                      mid = "#ffffbf", high = "#ca0020",
                      breaks = breaks)

}

# loop through list of dataframes
for(i in 1:length(df)) {

  plotbreaks(dat = df[[i]],
             numbreaks = 5)

}

【讨论】:

  • 嗨,谢谢。 break 参数不起作用
  • 可能是因为我的真实数据中的值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-02
相关资源
最近更新 更多