Fix typography in axis labels
Perhaps draw the axis and labels manually, rather than accepting the defaults?
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=""))
Here is how to do it with ggplot. The pdf
device doesn't render the unicode symbols, so use cairo_pdf
instead.
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)
The new package signs doing exactly what the OP asks for. Here is an example from the website:
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()
)
Another way which is almost the same as the one provided by Joshua Ulrich, except that you can let R compute the axis ticks :
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)