Reputation: 3308
I have below ggplot (from https://wilkelab.org/ggtext/reference/geom_richtext.html)
library(ggplot2)
df <- data.frame(
label = c(
"Some text **in bold.**",
"Linebreaks<br>Linebreaks<br>Linebreaks",
"*x*<sup>2</sup> + 5*x* + *C*<sub>*i*</sub>",
"Some <span style='color:blue'>blue text **in bold.**</span><br>And *italics text.*<br>
And some <span style='font-size:18pt; color:black'>large</span> text."
),
x = c(.2, .1, .5, .9),
y = c(.8, .4, .1, .5),
hjust = c(0.5, 0, 0, 1),
vjust = c(0.5, 1, 0, 0.5),
angle = c(0, 0, 45, -45),
color = c("black", "blue", "black", "red"),
fill = c("cornsilk", "white", "lightblue1", "white")
)
ggplot(df) +
aes(
x, y, label = label, angle = angle, color = color, fill = fill,
hjust = hjust, vjust = vjust
) +
geom_richtext() +
geom_point(color = "black", size = 2) +
scale_color_identity() +
scale_fill_identity() +
xlim(0, 1) + ylim(0, 1)
I would like to add some transparency to the label
background. When I apply alpha = 0.30
, both text and background are affected. I there any way to adjust alpha
of background?
@stefan suggested to use scales::alpha
, however this is not working in below case
library(ggplot2)
library(ggtext)
ggplot(data.frame(x = c(-2, 2)), aes(x = x)) +
stat_function(fun = dnorm) +
geom_richtext(data = data.frame(x = c(-1.4, -.5), y = rep(dnorm(0, 2)), y1 = c('First', 'Second')),
aes(x = x, y = y, label = y1, fill = alpha(y1, 0.2))) +
scale_fill_manual(breaks = c('First', 'Second'), values = c('#c1121f', '#023e8a'), aesthetics = 'fill')
With this I am getting below error
Error: Unknown colour name: First
Upvotes: 0
Views: 518
Reputation: 124863
One option would be to use scales::alpha
to set the alpha for the fill color:
library(ggplot2)
library(ggtext)
ggplot(df) +
aes(
x, y, label = label, angle = angle, color = color, fill = fill,
hjust = hjust, vjust = vjust
) +
geom_richtext(aes(fill = alpha(fill, 0.30))) +
geom_point(color = "black", size = 2) +
scale_color_identity() +
scale_fill_identity() +
xlim(0, 1) + ylim(0, 1)
EDIT For your second example we could or have to apply scales::alpha
on the values
of the fill
scale. This however works only if we use the fill
aes only in geom_richtext
. If this is not the case than of course could we still apply one of both approaches side-by-side with the ggnewscale
package.
library(ggplot2)
library(ggtext)
ggplot(data.frame(x = c(-2, 2)), aes(x = x)) +
stat_function(fun = dnorm) +
geom_richtext(
data = data.frame(x = c(-1.4, -.5), y = rep(dnorm(0, 2)), y1 = c("First", "Second")),
aes(x = x, y = y, label = y1, fill = y1)
) +
scale_fill_manual(
breaks = c("First", "Second"),
values = alpha(c("#c1121f", "#023e8a"), .2),
aesthetics = "fill"
)
Upvotes: 4
Reputation: 79079
Here is an alternative approach:
According to the documentation of ggtext
library(ggplot2)
library(ggtext)
ggplot(df) +
aes(
x, y, label = label, angle = angle, color = color,
hjust = hjust, vjust = vjust
) +
geom_richtext(
fill = NA, label.color = df$color, # remove background and outline
label.padding = grid::unit(rep(5, 10), "pt") # remove padding
) +
geom_point(color = "black", size = 2) +
scale_color_identity() +
xlim(0, 1) + ylim(0, 1)
Upvotes: -1