我试图在facet环境中将表达式设置为x轴文本ggplot2,标签长度不等.例如:
dat <- structure(list(Species = structure(c(1L, 1L, 1L, 1L, 2L, 2L,
2L, 2L, 2L), .Label = c("A", "B"), class = "factor"), Individual = structure(c(1L,
2L, 3L, 5L, 1L, 2L, 3L, 4L, 5L), .Label = c("1", "2", "3", "4",
"expression(bar(\"x\"))"), class = "factor"), mean = c(45, 32,
100, 59, 65, 110, 87, 93, 88.75), min = c(34, 20, 89, 47.66666667,
54, 100, 67, 85, 76.5), max = c(54, 42, 110, 68.66666667, 76,
120, 99, 105, 100)), .Names = c("Species", …Run Code Online (Sandbox Code Playgroud) 我正在尝试为 R 和 ggplot 制作一个映射包,它允许用户使用十进制度数定义他们的数据,但会根据用户数据所在的位置使用适当的投影。我决定为此使用ggspatial包,因为它会自动转换坐标。ggspatial 包反过来使用sf包,该包受 ggplot 支持。
我使用北极极地立体投影来获取纬度 > 60 度的数据。投影是笛卡尔投影,以距离北极的米为坐标单位。当然,当我尝试在北极的太平洋一侧绘制此投影时,北方将指向下方(因为 y 坐标指向北极)。
如何使用coord_sfggplot将地图指向北方?如果没有合理的方法来做到这一点,你能提出解决这个问题的方法吗?
示例数据:
library(rnaturalearth)
library(sp)
library(raster)
library(sf)
#> Linking to GEOS 3.7.2, GDAL 2.4.2, PROJ 5.2.0
library(ggplot2)
library(ggspatial)
# Get coastline data a example
dt <- rnaturalearth::ne_coastline()
# Clip and reproject the data to Arctic polar stereographic
clip_boundary <- sp::SpatialPolygons(
list(sp::Polygons(
list(sp::Polygon(
data.frame(lon = c(-180, 180, 180, -180), lat = c(60, 60, 90, 90)))), ID = 1)
), proj4string = sp::CRS(sp::proj4string(dt))) …Run Code Online (Sandbox Code Playgroud) 我有一些R作为统计平台的经验,但在基于图像的数学方面缺乏经验.我有一系列照片(tiff格式,px /μm已知),有孔和不规则曲线.我想测量一个洞和那个特定洞的最近曲线之间的最短距离.我想为照片中的每个洞做这个.这些孔也不规则,所以也许我需要告诉程序什么是孔和什么是曲线(ImageJ有一个点和分段线函数).
任何想法如何做到这一点?我应该在R中使用哪个包?你会为这种任务推荐另一个程序吗?

我想为海洋生物学课程制作一个简单的系统发育树作为教育的例子.我有一个具有分类等级的物种清单:
Group <- c("Benthos","Benthos","Benthos","Benthos","Benthos","Benthos","Zooplankton","Zooplankton","Zooplankton","Zooplankton",
"Zooplankton","Zooplankton","Fish","Fish","Fish","Fish","Fish","Fish","Phytoplankton","Phytoplankton","Phytoplankton","Phytoplankton")
Domain <- rep("Eukaryota", length(Group))
Kingdom <- c(rep("Animalia", 18), rep("Chromalveolata", 4))
Phylum <- c("Annelida","Annelida","Arthropoda","Arthropoda","Porifera","Sipunculida","Arthropoda","Arthropoda","Arthropoda",
"Arthropoda","Echinoidermata","Chorfata","Chordata","Chordata","Chordata","Chordata","Chordata","Chordata","Heterokontophyta",
"Heterokontophyta","Heterokontophyta","Dinoflagellata")
Class <- c("Polychaeta","Polychaeta","Malacostraca","Malacostraca","Demospongiae","NA","Malacostraca","Malacostraca",
"Malacostraca","Maxillopoda","Ophiuroidea","Actinopterygii","Chondrichthyes","Chondrichthyes","Chondrichthyes","Actinopterygii",
"Actinopterygii","Actinopterygii","Bacillariophyceae","Bacillariophyceae","Prymnesiophyceae","NA")
Order <- c("NA","NA","Amphipoda","Cumacea","NA","NA","Amphipoda","Decapoda","Euphausiacea","Calanioda","NA","Gadiformes",
"NA","NA","NA","NA","Gadiformes","Gadiformes","NA","NA","NA","NA")
Species <- c("Nephtys sp.","Nereis sp.","Gammarus sp.","Diastylis sp.","Axinella sp.","Ph. Sipunculida","Themisto abyssorum","Decapod larvae (Zoea)",
"Thysanoessa sp.","Centropages typicus","Ophiuroidea larvae","Gadus morhua eggs / larvae","Etmopterus spinax","Amblyraja radiata",
"Chimaera monstrosa","Clupea harengus","Melanogrammus aeglefinus","Gadus morhua","Thalassiosira sp.","Cylindrotheca closterium",
"Phaeocystis pouchetii","Ph. Dinoflagellata")
dat <- data.frame(Group, Domain, Kingdom, Phylum, Class, Order, Species)
dat
Run Code Online (Sandbox Code Playgroud)
我想获得树状图(聚类分析)并使用Domain作为第一个切割点,Kindom作为第二个切割点,Phylum作为第三个切割点,等等.缺失值应该被忽略(没有切割点,而是直线).组应该用作标签的着色类别.
我有点不确定如何从这个数据帧制作距离矩阵.R有很多系统发育树包,他们似乎想要新的数据/ DNA /其他高级信息.因此,对此的帮助将不胜感激.
我试图为手稿制作数字,应该用MS Word书写,不接受pdf格式的数字.该期刊要求初稿中包含Word文件中嵌入的数字.这些数字的分辨率最低为300 dpi,宽度为169 mm或81 mm(两列/一列).我注意到当我将图片的分辨率指定为300(res = 300)时,字体大小将绑定到此值.这适用于一些数字(第一个例子,example.png),更糟糕的是其他人(example2.png).如何控制字体大小以使图形的尺寸和分辨率保持固定?
library(ggplot2)
library(grid)
data(iris)
vplayout <- function(x, y) viewport(layout.pos.row = x, layout.pos.col = y)
p <- ggplot(iris, aes(Species, Petal.Length))
q <- ggplot(iris, aes(Species, Petal.Width))
len <- p + geom_boxplot()
wid <- q + geom_boxplot()
png("example.png", width = 169, height = 100, units = "mm", res = 300)
grid.newpage()
pushViewport(viewport(layout = grid.layout(1, 2)))
print(len, vp = vplayout(1, 1))
print(wid, vp = vplayout(1, 2))
dev.off()
png("example2.png", width = 81, height = 100, units = "mm", res …Run Code Online (Sandbox Code Playgroud) 我正在努力尝试将希腊符号绘制为轴标签.由于循环使用不同比例的几个图,我想使用包含符号名称而不是使用符号名称的向量expression(),这可以正常工作:
x <- rnorm(10, 5,6)
y <- rnorm(10, 2,1)
xlab <- expression(paste(mu, "mol/mol"))
plot(x,y, xlab = xlab)
Run Code Online (Sandbox Code Playgroud)
出于某种原因,我不能用包含符号名称的向量替换"mu":
k <- "mu"
xlab <- expression(paste(get(k), "mol/mol"))
plot(x,y, xlab = xlab)
Run Code Online (Sandbox Code Playgroud)
我发现了一个类似的问题,但是对函数有用的东西似乎对希腊符号不起作用:
ylab <- substitute(paste(nn, "mol/mol"), list(nn=k))
xlab <- bquote(.(k) * "mol/mol")
plot(x,y, ylab = ylab, xlab = xlab)
Run Code Online (Sandbox Code Playgroud)
我做错了什么?如何通过向量获得希腊符号到轴标签?
如何做到这一点更优雅与plyr,reshape2,aggregate功能和/或data.table?
library(plyr)
set.seed(1)
x <- data.frame(Ind = paste0("Ind", 1:10), Treatment = c(rep("Treat",10),rep("Cont",10)),
value = rnorm(20,60,8))
tr <- subset(x, Treatment == "Treat")
tr <- rename(tr, c("value" = "Treat"))
ct <- subset(x, Treatment == "Cont")
ct <- rename(ct, c("value" = "Cont"))
merge(ct[-2], tr[-2], by = "Ind", all = T, sort = F)
# Do not run, data.frame:
Ind Cont Treat
1 Ind1 72.09425 54.98837
2 Ind2 63.11875 61.46915
3 Ind3 55.03008 53.31497
4 Ind4 …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用R来测量感兴趣的对象之间的距离(在这个示例中,年份在树中响起).我之前的尝试非常复杂,以至于我难以使用不同类型的数字再现类似问题的解决方案.我认为必须有一种更简单的方法来进行测量.尽管ImageJ可能用于图片分析,但我觉得用于重复性工作太笨拙了.为什么不使用图像处理程序标记不同颜色的感兴趣对象并尝试提取有关其位置的信息?(这不是问题).这是一个例子:

(将图片另存为tree.jpg).为了测量从开始(蓝点)到红点和绿点(表示两个不同的任意测量值)的距离,我需要提取每个的质心和颜色特征(即点是绿色,蓝色还是红色)点在图片中.
我使用的颜色如下:
cols <- list(red = rgb(255/255, 0/255, 0/255), green = rgb(0/255, 255/255, 0/255), blue = rgb(0/255, 0/255, 255/255))
Run Code Online (Sandbox Code Playgroud)
我已设法打开文件并绘制它:
library("jpeg")
img <- readJPEG("tree.jpg")
ydim <- attributes(img)$dim[1] # Image dimension y-axis
xdim <- attributes(img)$dim[2] # Image dimension x-axis
plot(c(0,xdim), c(0,ydim), type='n')
rasterImage(img, 0,0,xdim,ydim)
Run Code Online (Sandbox Code Playgroud)

图中的尺寸以像素为单位.我还可以在其中一个RGB通道中提取信息(这里是绿色):
plot(c(0,xdim), c(0,ydim), type='n')
rasterImage(img[,,2], 0,0,xdim,ydim)
Run Code Online (Sandbox Code Playgroud)
在此之后,我开始遇到问题.我发现这个Momocs包可能能够从RGB通道矩阵中提取形状,但我怀疑它是解决这个问题的正确工具.也许其中一个空间包可以工作?(但我没有为此目的找到功能).如何使用R从图像中提取彩色点的位置(使用任意坐标系以像素为单位)?
线宽(size)美观ggplot2似乎打印出大约2.13磅的宽线到pdf(实验是在带有Mac的Adobe Illustrator中完成的):
library(ggplot2)
dt <- data.frame(id = rep(letters[1:5], each = 3), x = rep(seq(1:3), 5), y = rep(seq(1:5), each = 3), s = rep(c(0.05, 0.1, 0.5, 1, 72.27/96*0.5), each = 3))
lns <- split(dt, dt$id)
ggplot() + geom_line(data = lns[[1]], aes(x = x, y = y), size = unique(lns[[1]]$s)) +
geom_text(data = lns[[1]], y = unique(lns[[1]]$y), x = 3.5, label = paste("Width in ggplot =", unique(lns[[1]]$s))) +
geom_line(data = lns[[2]], aes(x = x, y = y), …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个具有一组默认值的绘图函数,并且可以通过使用该函数plot在点 ( ...) 参数内接受的任何参数来灵活地更改这些值。一个例子:
PlotIt <- function(x, y, ...) {
plot(x, y, type = "l", asp = 1, ...)
}
x <- 1:10
y <- 10:1
PlotIt(x = x, y = y)
# Returns a plot
PlotIt(x = x, y = y, asp = NA)
# Error in plot.default(x, y, type = "l", asp = 1, ...) :
# formal argument "asp" matched by multiple actual arguments
Run Code Online (Sandbox Code Playgroud)
该错误自然是因为我尝试将 asp 参数两次传递到plot. 到目前为止,我最好的笨拙尝试是做出一个 if-else 语句来考虑到这一点(该方法是从此处修改的): …