在ggplot2中有一种方法可以获得情节类型"b"吗?见例子:
x <- c(1:5)
y <- x
plot(x,y,type="b")
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想用它们的值替换点,以获得类似于这个着名示例的东西:

编辑:这里有一些样本数据(我想在情节类型为"b"的方面绘制每个"猫"):
df <- data.frame(x=rep(1:5,9),y=c(0.02,0.04,0.07,0.09,0.11,0.13,0.16,0.18,0.2,0.22,0.24,0.27,0.29,0.31,0.33,0.36,0.38,0.4,0.42,0.44,0.47,0.49,0.51,0.53,0.56,0.58,0.6,0.62,0.64,0.67,0.69,0.71,0.73,0.76,0.78,0.8,0.82,0.84,0.87,0.89,0.91,0.93,0.96,0.98,1),cat=rep(paste("a",1:9,sep=""),each=5))
Run Code Online (Sandbox Code Playgroud)
此致,穆萨
题:
我对如何为数据框列表中的列批量处理 as.numeric() (或任何其他函数)感到有些困惑。
我知道我可以使用以下方法查看此列表中的特定数据框或列:
> my.list[[1]]
# or columns within this data frame using:
> my.list[[1]][1]
Run Code Online (Sandbox Code Playgroud)
但是当我尝试将其应用于 lapply() 函数以将所有数据从整数更改为数字时,我的麻烦就来了。
# Example of what I am trying to do
> my.list[[each data frame in list]][each column in data frame] <-
as.numberic(my.list[[each data frame in list]][each column in data frame])
Run Code Online (Sandbox Code Playgroud)
如果您能以任何方式帮助我,或者知道任何可以帮助我的资源,我将不胜感激。
背景:
我的数据框的结构如下例所示,其中我有 5 种栖息地类型以及有关单个物种家庭范围扩展到n 的面积的信息:
# Example data
spp.1.data <- data.frame(Habitat.A = c(100,45,0,9,0), Habitat.B = c(0,0,203,45,89), Habitat.C = c(80,22,8,9,20), Habitat.D = c(8,59,77,83,69), Habitat.E = c(23,15,99,0,10))
Run Code Online (Sandbox Code Playgroud)
我有多个具有上述结构的数据框,它们已分配给列表对象:
all.spp.data <- …Run Code Online (Sandbox Code Playgroud) 有没有办法根据数值为箱线图上的抖动点着色,例如:
ggplot(data, aes(y = y_var, x = x_var)) +
geom_jitter(size = 2, aes(color = ifelse(y_var < 5, "red", "black)))
Run Code Online (Sandbox Code Playgroud)
我添加了这个可重现的示例,但不太有效(绘图上的颜色与抖动调用不对应):
a <- rnorm(100, mean = 5, sd = 1)
b <- as.factor(sample(0:1, 100, replace = TRUE))
test_data <- data.frame(cbind(a,b))
test_data$b <- as.factor(test_data$b)
ggplot(test_data, aes(y = a, x = b)) +
geom_boxplot()+
geom_jitter(aes(color = ifelse(a < 5, "red", "black")))
Run Code Online (Sandbox Code Playgroud)
我正在使用 geom_raster 和 geom_text 在我的情节中的每个彩色矩形上放置一个字母。我也希望这封信出现在图例中的颜色框顶部,但不知道如何。
我尝试添加show.legend=TRUE到geom_text,但这会导致每个图例键中的字母“a”,而不是所需的字符。
所需的结果如下所示:
这是重现基本情节的代码:
library(tidyverse)
d <-tribble(
~a, ~b, ~c,
"a", "l", "A",
"a", "r", "F",
"b", "l", "Q",
"b", "r", "R"
)
ggplot(data=d, aes(x=a, y=b, fill=c)) +
geom_raster(na.rm=TRUE) +
geom_text(aes(label=c), size=3, na.rm=TRUE)
Run Code Online (Sandbox Code Playgroud)
和输出:
这可能与此问题有关:https://github.com/tidyverse/ggplot2/issues/2004,但也许有解决方法?
对于主y轴和x轴,我有通用标题,如"Tank's Ratio"和"Counts".我想要第二行标签,我指定比率和计数.例如.就在"Tank's Ratio"之下,我希望"#in water /#in sand"中的字体较小,但是沿着y轴.类似地,对于x轴.这是基本代码
data <- data.frame(set = c(1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 4, 4), density = c(1, 3, 3, 1, 3, 1, 1, 1, 3, 3, 1, 3), counts = c(100, 2, 3, 76, 33, 12, 44, 13, 54, 36, 65, 1), ratio = c(1, 2, 3, 4, 1, 2, 3, 4, 5, 6, 90, 1))
library(ggplot2)
ggplot(data, aes(x = counts, y = ratio)) +
geom_point() +
ylab("Tank's Ratio") +
xlab("Counts")
Run Code Online (Sandbox Code Playgroud) 我通过互联网搜索,但找不到解决我问题的方法。
为了更明确地说,我们有一个带有两个图例的图形,如下所示:
library(ggplot2)
ggplot() +
geom_point(data = mtcars, aes(x = disp, y = mpg, color = gear),
pch =20, size=18) +
geom_line(data = mtcars, aes(x = disp, y = mpg, size = disp/mpg*100)) +
scale_size(range = c(0,3.5)) +
guides(size = guide_legend("", order = 1, keywidth = 2, keyheight = 1.5),
color = guide_legend("", order = 2, keywidth = 1, keyheight = 1 )) +
labs(x = "disp", y = "mpg") +
geom_text(size=2.7, color = "grey29", vjust=-0.8) +
theme_bw()
# ggsave("trial.png", …Run Code Online (Sandbox Code Playgroud) 我不想用 ggplot 绘制矩阵。
这是一些示例代码:
# create a dummy matrix
d2 <- matrix(data=NA,nrow=21,ncol=21,dimnames=list(-10:10,-10:10))
sig <- 3; mx <- 0; my <- 0;
for (jr in as.numeric(dimnames(d2)[[1]])){
for (jc in as.numeric(dimnames(d2)[[2]])){
d2[jr+11,jc+11] <- 1/sig/(2*pi)^.5*exp(-((jr-mx)^2+(jc-my)^2)/2/sig^2)
}
}
# convert it to dataframe
d2.df <- data.frame(x=rep(as.numeric(dimnames(d2)[[1]]),each=ncol(d2)),y=rep(as.numeric(dimnames(d2)[[2]]),times=nrow(d2)),z=as.vector(d2))
# plot with geom_tiles
library(ggplot2)
ggplot(data=d2.df,aes(x=x,y=y,fill=z))+
geom_tile()
Run Code Online (Sandbox Code Playgroud)
可以在不将其转换为数据帧的情况下完成此操作吗?
我正在创建一个自定义几何图形,并希望它带有一个名为 的额外参数,showpoints该参数对实际绘图执行某些操作或其他操作。例如,通过将其设置为 FALSE,geom 实际上会返回一个zeroGrob(). 我找到了一种方法来做到这一点,但是(i)它很笨重并且有点奇怪,并且(ii)我不完全理解我在做什么,这是一个坏兆头。问题是,当您定义新的统计数据时,可以运行setup_params,但 geoms 没有它:
与 Stat 和 Position 相比,Geom 略有不同,因为设置函数和计算函数的执行是分开的。setup_data 在位置调整之前运行,而 draw_layer 直到渲染时间才运行,晚得多。这意味着没有 setup_params,因为很难传达更改。
基本上,我的代码的工作原理是,您可以使用附加参数来抑制点的绘制:
# draw the points by default
ggplot(mpg, aes(displ, hwy)) + geom_simple_point()
# suppresses drawing of the points
ggplot(mpg, aes(displ, hwy)) + geom_simple_point(showpoints=FALSE)
Run Code Online (Sandbox Code Playgroud)
到目前为止,这是我的代码,基于扩展 ggplot2 教程:
## Return the grob to draw. The additional parameter,
## showpoints, determines whether a points grob should be returned,
## or whether zeroGrob() should take care of not …Run Code Online (Sandbox Code Playgroud) 这里是新的,对 R 是半新的,所以希望我能正确地提出这个问题。
我有看起来像这样的数据(最后是完整的数据集):
Peak Length Height Class Label
Peak 16 16.542 1128.60 Class 2 Peak 16
Peak 10 16.592 74909.84 Class 4 Peak 10
Peak 6 16.930 21747.10 Class 2 Peak 6
Peak 9 17.177 98380.79 Class 2 Peak 9
Peak 20 17.235 168036.36 Class 4 Peak 20
Peak 11 17.264 85770.79 Class 5 Peak 11
Run Code Online (Sandbox Code Playgroud)
我正在使用标签制作一个情节geom_label_repel,代码如下:
library(ggplot)
library(ggrepel)
ggplot(data = df, aes(x = Length, y = Height, color = Class)) +
geom_col()+
geom_label_repel(aes(label = Label),
fill …Run Code Online (Sandbox Code Playgroud) 作为这个著名线程的后续。我决定提出一个新问题,因为这更具体针对垂直图例,并且给出的答案仍然没有提供完全令人满意的解决方案。对于多边形键字形,有人建议通过修改底层的draw_key函数来增加实际多边形字形和键边框之间的边距大小。但是,如果我想保留边框(例如黑色),这实际上不起作用。
当使用其他几何对象(例如,geom_line)时,我什至不知道如何增加字形和边框之间的边距 - 简要浏览一下中使用的draw_key函数ggplot2:::GeomLine(它不使用导出的draw_key函数),它我不清楚在哪里修改它。
所以,我的问题是是否有一种方法可以改变关键字形之间的实际空间,从而允许保留边框(例如,颜色=“黑色”),并且不增加字形大小。
library(ggplot2)
p <- ggplot(dplyr::filter(msleep, grepl("^C", order)),
aes(sleep_total, sleep_rem, color = order)) +
geom_line(na.rm = TRUE) +
theme(legend.key = element_rect(color = "black"))
p
Run Code Online (Sandbox Code Playgroud)
示例图:关键字形接触。

p + theme(legend.key.height = unit(.5, "in"))
Run Code Online (Sandbox Code Playgroud)
如果我删除颜色,看起来字形的间距会更大,但我希望关键字形的大小与上面相同,只是它们之间有间距。

GeomLine 中的底层draw_key
# ggplot2:::GeomLine$draw_key
#> ...
#> segmentsGrob(0.1, 0.5, 0.9, 0.5, gp = gpar(col = alpha(data$colour %||%
#> data$fill %||% "black", data$alpha), fill = alpha(params$arrow.fill %||%
#> data$colour %||% data$fill %||% "black", data$alpha),
#> lwd = (data$size %||% 0.5) * …Run Code Online (Sandbox Code Playgroud)