我是粉丝facet_wrap.虽然快速分割大数据框并绘制几个图并在R中进行探索,但它并不总是用于纸张或功率点的最佳工具.我发现自己在缩放比例,宽度和字体大小方面浪费了大量时间,并最终修改了情节.
有时我只是将我的数据框子集成到许多数据框中,并为每个数据框单独绘制.之后multiplot用手或手工加入.
我想知道是否有一种方法可以使ggplot调用几乎以相同的方式(一个大的df与一个用于分面的因子列)或一种方法来使ggplot从具有类似列表的数据帧的东西中读取因子.理想的输出应该是多个单个图,稍后我会在inkscape上编辑(并使用free_y刻度来减少痛苦)
要清楚,
df<-mtcars
ggplot(df,aes(df$mpg,df$disp,color=factor(cyl)))+
geom_point(aes(df$mpg,df$disp))+
facet_wrap( ~cyl)
Run Code Online (Sandbox Code Playgroud)
制作一个情节.在这种情况下,我想要的输出是三个图,每个面一个.
我的数据集包含不同物种的多个观测值.每个物种的观测数量都不同.寻找R中的快速方法来计算每个物种的给定变量的前10%值的平均值.
我想出了如何获得给定数量的值(即前20个值).
clim6 <-setDT(range)[order(species, clim6),.SD[1:20],by=species]
write.csv(Bioclimlo6, file = "clim6.csv")
Run Code Online (Sandbox Code Playgroud)
我也知道有一种方法可以修剪数据集以生成剩余数据集的平均值,但我不确定如何仅修剪底部的90%.
mean(x, trim = 0, na.rm = FALSE)
Run Code Online (Sandbox Code Playgroud) 在ggplot2中是否有办法根据点的密度生成具有不同alpha的geom_ribbon(或其他基于区域的geom)?
以下代码产生50个嘈杂的正弦波,每个样本具有随机x值.我不想绘制每一点,因为我可能想要一千个或更多的重新采样,所以我想总结所有这些要点.
一种简单的方法是绘制一个覆盖95%分位数的geom_ribbon.然而,首先,这并不容易计算,因为每个重采样的x值不相同; 通常你会计算每100个点的逐点分位数.
相反,我希望有一个色带覆盖样品所在的整个区域,具有连续的α梯度,即色带在实际线附近的中间最暗,在离群点处非常浅.这可能在ggplot2中吗?
library(ggplot2)
num_points = 100
num_samples = 50
x = seq(0, 4*pi, length.out=num_points)
sim <- lapply(1:num_samples, function(f) {
x = runif(num_points, 0, 4*pi)
y = sin(x) + rnorm(num_points, 0, 0.4)
data.frame(x=x, y=y)
})
sim.df <- do.call(rbind, sim)
actual = data.frame(x=x, y=sin(x))
ggplot(sim.df, aes(x=x, y=y)) +
geom_point(alpha=0.7) +
geom_line(data=actual, colour='blue', size=1.5)
Run Code Online (Sandbox Code Playgroud)
问题
我正在尝试可视化个人的面板数据,包括离散或分类选择以及每个时间段的连续选择.这种情况的一个常见示例是客户购买产品/订阅,然后选择使用产品/服务的频率.
我想显示在每个时间段内由连续变量加权的时间段内的"流量" - 加权堆积条形图和sankey或冲积图之间的某种交叉.Sankey和冲积图从根本上代表节点之间的流量,其中每个流量具有单个量值.相反,我想展示代表连续选择的"流量",它可能在不同的时间段内具有不同的值,即使对于同一个体也是如此.得到的图表看起来非常类似于sankey或冲积图,除了alluvia或"flow"将逐渐改变时间段之间的宽度.例如,假设客户在两个时间段内购买相同的订阅,但在第二个时间段内更频繁地使用它; 该使用可以由从第一时间段到第二时间段的宽度增加的带或"流"表示.
R中的例子
我将通过一个使用R来解释问题的例子.这是一个示例数据集:
library(tidyr)
library(dplyr)
library(alluvial)
library(ggplot2)
library(forcats)
set.seed(42)
individual <- rep(LETTERS[1:10],each=2)
timeperiod <- paste0("time_",rep(1:2,10))
discretechoice <- factor(paste0("choice_",sample(letters[1:3],20, replace=T)))
continuouschoice <- ceiling(runif(20, 0, 100))
d <- data.frame(individual, timeperiod, discretechoice, continuouschoice)
Run Code Online (Sandbox Code Playgroud)
我可以很好地可视化离散或分类选择片的面板数据.堆积条形图可用于显示每个类别中的个人数量如何随时间变化.冲积图或sankey图还可以显示导致类别总数发生变化的各个运动.例如:
# stacked bar diagram of discrete choice by individual
g <- ggplot(data=d,aes(timeperiod,fill=fct_rev(discretechoice)))
g + geom_bar(position="stack") + guides(fill=guide_legend(title=NULL))
# alluvial diagram of discrete choice by individual
d_alluvial <- d %>%
select(individual,timeperiod,discretechoice) %>%
spread(timeperiod,discretechoice) %>%
group_by(time_1,time_2) %>%
summarize(count=n()) %>%
ungroup()
alluvial(select(d_alluvial,-count),freq=d_alluvial$count)
Run Code Online (Sandbox Code Playgroud)

我还可以通过对堆积条形图进行加权来按类别和跨时间段查看连续选择总计. …
我试图在没有可怕的 3d 条形图和不清晰的 x 轴的情况下重新创建这个图(这些是不同的时间点,很难说它们是什么时候)。
(来自 Science 291, no. 5513 (2001): 2606-8,否则是一篇好论文。)
我的第一直觉是做一些类似于他们所做的事情,使用 2d 条形图和不同的 x 轴标签,对基因型使用躲避条,然后堆叠条以在前面的条上获得黑白分割,但还有其他一些好的这里的问题说你不能这样做。
我的下一个方法是使用分面(下面的代码),它工作得相当好,但我很想看到一种更好的方法来做到这一点。有没有办法堆叠一些变量并避免其他变量?或者只是一个更好的方法来做到这一点?
编辑:为了澄清,我认为显示堆叠条形的总数(在这种情况下为 m 和 n,最初为黑色和白色)很重要,因为这代表一个测量数量,然后拆分是一个单独的测量。

library(tidyverse)
library(cowplot)
data = tribble(
~Timepoint, ~`Ancestral genotype`, ~Mutator, ~`Mean % of auxotrophs`,
100, 'mutS-', 'o', 10.5,
150, 'mutS-', 'o', 16,
220, 'mutS-', 'o', NA,
300, 'mutS-', 'o', 24.5,
100, 'mutS+', 'n', 1,
150, 'mutS+', 'n', NA,
220, 'mutS+', 'n', 1,
300, 'mutS+', 'n', 1,
100, 'mutS+', 'm', 0,
150, 'mutS+', 'm', NA,
220, 'mutS+', 'm', 2,
300, …Run Code Online (Sandbox Code Playgroud) 我正在尝试从github 安装该fst软件包的开发版本。(我想要开发版本,因为它在保存数据帧时会维护列类,而当前发布的版本则不会。)
最初,由于缺少OpenMP支持,安装失败。我解决了这个(我认为)按照步骤在这里对OSX [R 3.4.0。
但是,现在出现以下错误:/bin/sh: XX: command not found。我已经设置了文件中应该设置的适当路径~/.R/Makevars,所以我不确定下一步该如何解决该错误。
这是我的代码和输出:
首次尝试安装fst,然后添加OpenMP支持
devtools::install_github("fstPackage/fst", ref = "develop")
Run Code Online (Sandbox Code Playgroud)
*安装* source *软件包'fst'...
** libs
clang ++ -std = gnu ++ 11 -I / Library / Frameworks / R.framework / Resources / include -DNDEBUG -fopenmp -I。-Ifstcore -Ifstcore / LZ4 -Ifstcore / ZSTD -Ifstcore / ZSTD / common -Ifstcore / ZSTD / decompress -Ifstcore / ZSTD / compress -I“ /Library/Frameworks/R.framework/Versions/3.4/Resources/library/Rcpp/包含” -I / usr / …
我想采用 gt() 表并将其转换为“宽”格式,而不是按组级别的“长”格式。因此,以使用 iris 数据集为例:
library(dplyr)
library(gt)
iris %>%
group_by(Species) %>%
slice_max(Sepal.Length, n=5) %>%
group_by(Species) %>%
gt()
Run Code Online (Sandbox Code Playgroud)
这会产生:

但是,我想要生成的是以下内容:

有没有办法做到这一点?
可以使用glm函数在R中执行常规的普通线性模型,该函数具有自己的汇总函数方法,并且可以汇总模型,其中每个变量的输出都有p值。根据这些p值,可以说出哪些变量具有统计意义,或者在特定置信度下不具有统计学意义。
我的问题是。有没有对相同的功能cv.glmnet,从功能glmnet包?我知道经过计算后,我可以收到一个系数表,coef(model, s="lambda.min")其中一些系数不为零。因此,我假设(可能错误地)认为这些非零值具有统计意义。我对吗?是否有任何方法可以为这些系数提供p值或置信区间?
当我尝试将一个参数传递给round函数时,我收到一个错误stat_summary(即使类似的代码也适用于,比方说geom_text).这是一个例子:
# Fake data
set.seed(5)
dat = data.frame(group=rep(c("A","B"),each=10), val=rnorm(20))
Run Code Online (Sandbox Code Playgroud)
我们将尝试使用参数设置值标签的小数位数,而不是硬编码:
places = 2
ggplot(dat, aes(group, val)) +
stat_summary(fun.y=mean, geom="text", aes(label=round(..y.., places)))
Run Code Online (Sandbox Code Playgroud)
eval中的错误(expr,envir,enclos):找不到对象'places'
但是,以下两个示例工作正常.
ggplot(dat, aes(group, val)) +
stat_summary(fun.y=mean, geom="text", aes(label=round(..y.., 2)))
ggplot(dat, aes(group, val)) +
geom_text(aes(label=round(val, places)))
Run Code Online (Sandbox Code Playgroud)
我在尝试编写ggplot函数时遇到了这个问题.起初我认为问题涉及ggplot没有从函数环境中获取参数,但上面的例子表明这不是问题.为了完整起见,下面是该函数的简化示例以及错误消息.如果我将数字参数硬编码round,而不是尝试传递places参数,该函数可以正常工作.
pp1 = function(data, group, var, places=2, e=1.5) {
ggplot(data, aes_string(group, var)) +
geom_boxplot() +
stat_summary(fun.y=mean, geom="text", aes(label=round(..y.., places))) +
scale_y_continuous(limits = e * range(data[,var]))
}
pp1(dat, "group","val")
Run Code Online (Sandbox Code Playgroud)
eval中的错误(expr,envir,enclos):找不到对象'places'
我希望了解我是否做错了什么以及我如何能够获得理想的行为.
我在OS X 10.10.5上运行 …
我有一个看起来像的数据集
City Score Count Returns
Dallas 2.9 61 21
Phoenix 2.6 52 14
Milwaukee 1.7 38 7
Chicago 1.2 95 16
Phoenix 5.9 96 16
Dallas 1.9 45 12
Dallas 2.7 75 45
Chicago 2.2 75 10
Milwaukee 2.6 12 2
Milwaukee 4.5 32 0
Dallas 1.9 65 12
Chicago 4.9 95 13
Chicago 5 45 5
Phoenix 5.2 43 5
Run Code Online (Sandbox Code Playgroud)
我想用R markdown建立一份报告; 但是,对于每个城市,我需要建立一份报告.原因是一个城市无法看到另一个城市的报告.如何为每个城市构建报告并保存PDF?
每份报告都需要中位数Score,平均值Count和平均值Returns.我知道使用dplyr我可以简单地使用
finaldat <- dat %>%
group_by(City) %>%
summarise(Score …Run Code Online (Sandbox Code Playgroud)