Kon*_*lph 18 plot typography r
序言:我想从R创建出版级图形而不进行后处理.我所在研究所的其他研究人员总是在图形软件(如Adobe Illustrator)中进行后处理.我希望避免这种情况.
我的抱怨是R不对负数使用正确的减号(特别是在绘图轴上):
plot(-20:-1, rnorm(20) + 1 : 20)
Run Code Online (Sandbox Code Playgroud)

(我已经把犯罪者围了起来供你考虑.)
作为一个排版书呆子(这是真的!检查我的职业生涯简历!)这是不可接受的.我需要在这里使用正确的Unicode字符ᴍɪɴᴜꜱꜱɪɢɴ(U + 2212," - ").我的一个朋友在发布之前通过替换Adobe Illustrator中的所有减号来实现这一点,但我不禁认为必须有一种更好的方法 - 从R内部 - 来实现这一目标; 并且不会强迫我手动更换所有轴标签.
(我目前没有使用ggplot2,但如果有一个只适用于ggplot2的解决方案,我很乐意接受它.)
也许手动绘制轴和标签,而不是接受默认值?
plot(-20:-1, rnorm(20) + 1 : 20, xaxt="n")
Axis(-20:-1, at=seq(-20,-5,5), side=1,
labels=paste("\U2212",seq(20,5,-5),sep=""))
Run Code Online (Sandbox Code Playgroud)

另一种方式几乎与Joshua Ulrich提供的方式相同,只是你可以让R计算轴的刻度:
plot(-20:-1, rnorm(20) + 1 : 20, xaxt="n")
at <- axTicks(1, usr=par("usr")[1:2])
labs <- gsub("-", "\U2212", print.default(at))
axis(1, at=at, labels=labs)
Run Code Online (Sandbox Code Playgroud)

以下是如何使用 ggplot 进行操作。该pdf设备不呈现 unicode 符号,因此请cairo_pdf改用。
unicode_minus <- function(x) sub('^-', '\U2212', format(x))
# change the default scales
scale_x_continuous <- function(..., labels=unicode_minus)
ggplot2::scale_x_continuous(..., labels=labels)
scale_y_continuous <- function(..., labels=unicode_minus)
ggplot2::scale_y_continuous(..., labels=labels)
qplot(-20:-1, rnorm(20) + 1:20)
Run Code Online (Sandbox Code Playgroud)
小智 3
新的一揽子计划完全按照OP的要求进行。这是网站上的一个示例:
library(dplyr)
library(ggplot2)
library(ggrepel)
theme_set(theme_gray())
theme_update(panel.grid.minor = element_blank())
p <-
ggplot(sleep) +
aes(group, extra) +
geom_point() +
xlab("Drug") +
ylab("Extra Sleep (hours)")
label_hours <- function(mapping) {
geom_text_repel(
mapping,
nudge_x = -.1,
direction = "y",
segment.size = .4,
segment.color = "grey75",
hjust = "right"
)
}
p +
label_hours(
mapping = aes(
label = case_when(
group == 1 ~ signs(extra, accuracy = .1), # Unicode minuses
group == 2 ~ number(extra, accuracy = .1) # ASCII minuses
)
)
) +
scale_y_continuous(
limits = c(-4, 6),
breaks = seq(-4, 6),
labels = signs_format(accuracy = .1) # Unicode, analogous to number_format()
)
Run Code Online (Sandbox Code Playgroud)

| 归档时间: |
|
| 查看次数: |
1055 次 |
| 最近记录: |