ENV
R版本3.3.1
MAC OSX 10.9.4
我想绘制如下图所示的样式,由matlab绘制。
图上有完整的网格,有自定义的轴范围(例如$ 10 ^ 0~10 ^ { - 4} $)和轴标签(例如10 ^ 0 10 ^ 1 10 ^ -2 10 ^ -3 10 ^ - 4 10 ^ -5)。在10 ^ 0和10 ^ 1之间有十个刻度以及其他标签。 y轴相似。
预期:
我试过了:
initial.dir<-getwd()
setwd("/Rworks/bin")
sink("r.o")
pk <- read.table("2017.file)
rownames(pk)<-c("k","pk")
d.f <- data.frame(t(pk))
png(file="m.png")
plot(
d.f$k,
d.f$pk,
type = "n",
log = "xy",
xlim = c( 10^0, 10^2),
ylim = c( 0.00001, 1),
)
lines( d.f$k, d.f$pk, col = "green4", lty = "dotted")
points( d.f$k, d.f$pk, bg = "limegreen", pch = 21 )
box()
dev.off
sink()
setwd(initial.dir)
我得到了:
轴和轴标签以及刻度和网格不是我想要的。任何人都可以提出建议吗?感谢。
答案 0 :(得分:2)
最糟糕的情况是,您可以自己绘制轴和背景线。
plot(
x=c(1,2), y=c(0.6,0.2),
pch=21, bg="red",
log = "xy",
xlim = c( 10^0, 10^2),
ylim = c( 0.00001, 1),
xaxt="n", yaxt="n",
xlab="", ylab="",
yaxs="i"
)
lines(x=c(1,2), y=c(0.6,0.2))
axis(1, at=10^(0:2),
labels=expression(10^0, 10^1, 10^2))
axis(2, at=10^(-5:0), las=1,
labels=expression(10^-5, 10^-4, 10^-3, 10^-2, 10^-1, 10^0))
abline(h=outer((1:10),(10^(-5:-1))), col="#00000033", lty=2)
abline(v=outer((1:10),(10^(0:1))), col="#00000033", lty=2)
答案 1 :(得分:1)
以下是一个示例 - 它并不完全符合您的要求(例如,您可以使用panel.grid.minor
这样的主题选项来获取虚线网格线),但它大部分都在那里。
来自here的指数格式轴刻度标签:
fancy_scientific <- function(l) {
# turn in to character string in scientific notation
l <- format(l, scientific = TRUE)
# quote the part before the exponent to keep all the digits
l <- gsub("^(.*)e", "'\\1'e", l)
# turn the 'e+' into plotmath format
l <- gsub("e", "%*%10^", l)
# return this as an expression
parse(text=l)
}
来自@ G5W答案的手动勾选:可以自动编写一个函数来执行此操作,或者可能存在某个函数。
yticks = outer((1:10),(10^(-5:-1)))
xticks = outer((1:10),(10^(0:1)))
绘制图(使用@ G5W的样本迷你数据)
library(ggplot2)
ggplot(data.frame(x=1:2,y=c(0.6,0.2)),
aes(x,y))+
geom_point(colour="red")+
scale_x_log10(limits=c(1,100),labels=fancy_scientific,
minor_breaks=xticks)+
scale_y_log10(limits=c(1e-5,1),labels=fancy_scientific,
minor_breaks=yticks)+
theme_bw()