- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有一个数据集 x
和 y
根据两个变量分组的值:grp
是 a
, b
, 或 c
, 而 subgrp
是 E
, F
, 或 G
.
a
有 y
[0, 1] 中的值 b
有 y
[10, 11] 中的值 c
有 y
[100, 101] 中的值。 y
反对
x
用
y
定义的点的颜色所有
grp
和
subgrp
组合。自各
grp
有很大不同
y
值,我不能只使用
facet_grid
单独,因为色阶将是无用的。所以,我绘制了每个
grp
使用自己的比例尺,然后用
plot_grid
将它们拼凑在一起来自
cowplot
.我还想使用
scale_colour_gradient2
指定的三点渐变.我的代码如下所示:
# Set RNG seed
set.seed(42)
# Toy data frame
df <- data.frame(x = runif(270), y = runif(270) + rep(c(0, 10, 100), each = 90),
grp = rep(letters[1:3], each = 90), subgrp = rep(LETTERS[4:6], 90))
head(df)
#> x y grp subgrp
#> 1 0.9148060 0.1362958 a D
#> 2 0.9370754 0.7853494 a E
#> 3 0.2861395 0.4533034 a F
#> 4 0.8304476 0.1357424 a D
#> 5 0.6417455 0.8852210 a E
#> 6 0.5190959 0.3367135 a F
# Load libraries
library(cowplot)
library(ggplot2)
library(dplyr)
# Plotting list
g_list <- list()
# Loop through groups 'grp'
for(i in levels(df$grp)){
# Subset the data
df_subset <- df %>% filter(grp == i)
# Calculate the midpoint
mp <- mean(df_subset$y)
# Print midpoint
message("Midpoint: ", mp)
g <- ggplot(df_subset) + geom_point(aes(x = x, y = y, colour = y))
g <- g + facet_grid(. ~ subgrp) + ggtitle(i)
g <- g + scale_colour_gradient2(low = "blue", high = "red", mid = "yellow", midpoint = mp)
g_list[[i]] <- g
}
#> Midpoint: 0.460748857570191
#> Midpoint: 10.4696476330981
#> Midpoint: 100.471083269571
plot_grid(plotlist = g_list, ncol = 1)
y
的平均值。每个
grp
.我打印这个并验证它是正确的。这是。
grp
尽管对数据进行了子集化。如果我更换
for(i in levels(df$grp)){
与
for(i in levels(df$grp)[1]){
,色标对于生成的单个图是正确的。
ggplot_build(g)$data[[1]]$colour
紧接在
g_list[[i]] <- g
之前解决了这个问题。但为什么?
最佳答案
长话短说,您正在创建未评估的 promise ,然后在原始数据消失时评估它们。如果您使用正确的函数式编程风格而不是过程代码,通常可以避免这个问题。即,定义一个完成工作的函数,然后为循环使用一个应用函数。
set.seed(42)
# Toy data frame
df <- data.frame(x = runif(270), y = runif(270) + rep(c(0, 10, 100), each = 90),
grp = rep(letters[1:3], each = 90), subgrp = rep(LETTERS[4:6], 90))
library(cowplot)
library(ggplot2)
library(dplyr)
# Loop through groups 'grp'
g_list <- lapply(
levels(df$grp),
function(i) {
# Subset the data
df_subset <- df %>% filter(grp == i)
# Calculate the midpoint
mp <- mean(df_subset$y)
# Print midpoint
message("Midpoint: ", mp)
g <- ggplot(df_subset) + geom_point(aes(x = x, y = y, colour = y))
g <- g + facet_grid(. ~ subgrp) + ggtitle(i)
g <- g + scale_colour_gradient2(low = "blue", high = "red", mid = "yellow", midpoint = mp)
g
}
)
#> Midpoint: 0.460748857570191
#> Midpoint: 10.4696476330981
#> Midpoint: 100.471083269571
plot_grid(plotlist = g_list, ncol = 1)
关于r - 使用 cowplot 将绘图拼凑在一起时的颜色渐变不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55729296/
这是关于@ClausWilke ( see post ) 提供的解决方案之一的后续问题,用于在主面板和边际图之间插入间隙。如何决定 (scale_x_continuous) 限制?另外,如果我们使用“
在当前图中,p2 现在居中。我希望 p2 与左侧的 p1 对齐。我尝试了 plot_grid 中的一些参数,但图像根本没有改变。 library(ggplot2) library(flextable)
我正在尝试为使用 cowplot::plot_grid() 组合 ggplot2 绘图的函数编写单元测试。例如, # setup set.seed(123) library(ggplot2) # cr
假设我有一个数据集 x和 y根据两个变量分组的值:grp是 a , b , 或 c , 而 subgrp是 E , F , 或 G . a有 y [0, 1] 中的值 b有 y [10, 11] 中的
我正在尝试使用cowplot包的draw_image()函数。我已经设法在图表中获取图像作为示例。 我无法弄清楚 xy 位置是如何工作的,我必须不断输入随机数,直到看到图像。 require(ggpl
我正在尝试使用cowplot包的draw_image()函数。我已经设法在图表中获取图像作为示例。 我无法弄清楚 xy 位置是如何工作的,我必须不断输入随机数,直到看到图像。 require(ggpl
我正在尝试使用 Cowplot 制作一些“紧密堆叠”的图。我可以使用以下 MWE 获得我想要的效果: library(ggplot2) library(cowplot) disp_plot <- gg
我正在尝试制作一个相关热图,其中使用 cowplot::switch_axis_position 将 x 轴移动到顶部.我有不同长度的轴标签,我希望标签左对齐(或者更确切地说是底部对齐,因为它们旋转了
我想以某种方式表明应该将多面板图中的某些行放在一起进行比较。例如,我想制作这个情节: 看起来像这个图(用 PowerPoint 制作的面板周围有框): 这是我为使用第一个图而制作的代码。我使用了 gg
我有一个多图图,由 2x2 配置的 4 个图组成。我使用“cowplot”包和 plot_grid 函数使用下面的代码排列图 plot_grid(p1, p2, p3, p4, align='vh',
我正在尝试在与 plot_grid 对齐的两个图周围绘制边框来自牛图包。请看下面的例子(修改自 "Changing the axis positions" vignette ): require(gt
我有一个关于 Cowplot 中的绘图对齐的问题。 我想在由 3 列组成的面板中对齐图 (ggplot)。第一列有 2 个图(垂直对齐),第二列有 1 个图,第三列也有两个图(垂直对齐)。 示例: #
我已经使用 purrr 创建了 ggplot2 图形的列表列,现在我想使用 cowplot::plot_grid() 来组合他们成一个单一的情节。我怎样才能做到这一点?有一种蛮力方法可以做到这一点,但
我有一个关于 Cowplot 中的绘图对齐的问题。 我想在由 3 列组成的面板中对齐图 (ggplot)。第一列有 2 个图(垂直对齐),第二列有 1 个图,第三列也有两个图(垂直对齐)。 示例: #
我已经使用 purrr 创建了 ggplot2 图形的列表列,现在我想使用 cowplot::plot_grid() 来组合他们成一个单一的情节。我怎样才能做到这一点?有一种蛮力方法可以做到这一点,但
我有一个来自 1:10 的 ggplots 列表,名为 plot_1 , plot_2 ....plot_10 . 我想使用 cowplot 将所有图一起显示。 我如何使用 plot.grid()调用
我正在尝试使用 cowplot::plot_grid() 组合两个 ggplot 对象并垂直对齐它们。这通常使用 align = "v" 非常简单。 dat1 <- data.frame(x = re
我想用 R 绘制一个看起来像用 Mac 的 Numbers 制作的示例的图。我正在为情节和图例框之间的空间而苦苦挣扎。这是我想要实现的示例: 在一些用户的帮助下(请参阅帖子末尾以供引用)我已经非常接近
我被问到 this question on Twitter并认为把它放在这里可能会很好。 使用 plot_grid() 制作带标签的并排图时,对于单字母标签,事情按预期工作: library(cowp
使用cowplot中的draw_image()函数读取矢量化pdf有时会导致图像严重模糊: library(ggplot2) library(cowplot) library(magick) # ma
我是一名优秀的程序员,十分优秀!