如何将变量值映射到图案填充 - ggplot / ggpattern (
How to map variable values to pattern fills - ggplot / ggpattern (
ggplot(unique(films2[,c("film","word.len.avg")]) ,aes(film,word.len.avg,fill=film,))+
geom_bar_pattern(stat="identity",
pattern =
c(
"circle",
"stripe",
"none",
"wave",
"crosshatch"
),
pattern_angle = c(rep(45, ),
rep(60, ),
rep(45, ),
rep(45, ),
rep(45,)),
fill = 'white',
colour = 'black',
pattern_density = .35,
pattern_fill = 'darkblue',
pattern_colour = 'darkblue'
) +
scale_x_discrete(breaks = c("dial.m.for.murder", "pscyho", "rear.window", "rope", "vertigo"),
labels = c("Dial M for Murder", "Psycho", "Rear Window", "Rope", "Vertigo"))+
theme_bw() +
aes(pattern = film)+
theme(legend.position = "right") +
coord_fixed(ratio = 1.5)+
scale_pattern_spacing_discrete(range = c(0.01, 0.05))
您好,我有上面的带有图案填充的条形图代码。请参阅下面的相关图片。这是我从堆栈溢出的各种来源拼凑而成的代码,我很高兴它终于可以工作了,因为我现在终于有了五个条形图,每个条形图都有不同的填充模式。但是,很明显,这些模式不一定与特定电影相关(电影有五个值)。我想知道如何将图案填充映射到特定的电影,因为目前图例不会显示,我假设是因为这个(即事情没有正确映射?)。任何建议将不胜感激。马罗
补充一下,我在网上找到了这个 https://evamaerey.github.io/flipbooks/ggpattern/ggpattern#28 它可以满足我的要求,但看起来不如上面那个好。现在可以这样做,但是如果有人对如何将两者结合起来有任何建议,或者如何调整上面的代码以便我可以获得要显示的密钥,那也将不胜感激!谢谢!!!
当您在 aes
之外设置事物时,就像在图例之外设置它们。
如果有什么东西,比如角度或图案,你愿意失去控制,你可以把它变成一个传奇。例如:
ggplot(unique(films2[,c("film","word.len.avg")], aes(film, word.len.avg,)) +
geom_col_pattern(aes(pattern = film, fill = film,
pattern_angle = film, pattern_spacing = film),
fill = 'white',
colour = 'black',
pattern_density = .35,
pattern_fill = 'darkblue',
pattern_colour = 'darkblue') +
theme_bw() +
theme(legend.position = "right") +
coord_fixed(ratio = 1.5)+
scale_pattern_spacing_discrete(range = c(0.01, 0.05))
您可能已经注意到我使用了 geom_col_pattern()
。
我看到你 aes(pattern = film)
这条线没有做任何事情,它需要绑定到 geom_
或 stat_
调用。
如果您设置了变量的显示方式,则可以使用
scale_color_manual
和 scale_fill_manual
呼吁这样做。
例如:
ggplot(unique(films2[,c("film","word.len.avg")], aes(film, word.len.avg,, fill = film))+
geom_bar_pattern(stat="identity",
pattern = c("circle", "stripe", "none",
"wave", "crosshatch" ),
pattern_angle = c(45, 60, rep(45, 3)),
# fill = 'white',
colour = 'black',
pattern_density = .35,
pattern_fill = 'darkblue',
pattern_colour = 'darkblue'
) + scale_fill_manual(values = setNames(c("darkred", "darkblue", "white",
"lightyellow", "gray"),
unlist(df$film))) +
scale_x_discrete(breaks = c("dial.m.for.murder", "pscyho",
"rear.window", "rope", "vertigo"),
labels = c("Dial M for Murder", "Psycho", "
Rear Window", "Rope", "Vertigo"))+
theme_bw() +
# aes(pattern = film)+
theme(legend.position = "right") + scale_pattern_fill_viridis_c() +
coord_fixed(ratio = 1.5)+
scale_pattern_spacing_discrete(range = c(0.01, 0.05))
ggplot(unique(films2[,c("film","word.len.avg")]) ,aes(film,word.len.avg,fill=film,))+
geom_bar_pattern(stat="identity",
pattern =
c(
"circle",
"stripe",
"none",
"wave",
"crosshatch"
),
pattern_angle = c(rep(45, ),
rep(60, ),
rep(45, ),
rep(45, ),
rep(45,)),
fill = 'white',
colour = 'black',
pattern_density = .35,
pattern_fill = 'darkblue',
pattern_colour = 'darkblue'
) +
scale_x_discrete(breaks = c("dial.m.for.murder", "pscyho", "rear.window", "rope", "vertigo"),
labels = c("Dial M for Murder", "Psycho", "Rear Window", "Rope", "Vertigo"))+
theme_bw() +
aes(pattern = film)+
theme(legend.position = "right") +
coord_fixed(ratio = 1.5)+
scale_pattern_spacing_discrete(range = c(0.01, 0.05))
您好,我有上面的带有图案填充的条形图代码。请参阅下面的相关图片。这是我从堆栈溢出的各种来源拼凑而成的代码,我很高兴它终于可以工作了,因为我现在终于有了五个条形图,每个条形图都有不同的填充模式。但是,很明显,这些模式不一定与特定电影相关(电影有五个值)。我想知道如何将图案填充映射到特定的电影,因为目前图例不会显示,我假设是因为这个(即事情没有正确映射?)。任何建议将不胜感激。马罗
补充一下,我在网上找到了这个 https://evamaerey.github.io/flipbooks/ggpattern/ggpattern#28 它可以满足我的要求,但看起来不如上面那个好。现在可以这样做,但是如果有人对如何将两者结合起来有任何建议,或者如何调整上面的代码以便我可以获得要显示的密钥,那也将不胜感激!谢谢!!!
当您在 aes
之外设置事物时,就像在图例之外设置它们。
如果有什么东西,比如角度或图案,你愿意失去控制,你可以把它变成一个传奇。例如:
ggplot(unique(films2[,c("film","word.len.avg")], aes(film, word.len.avg,)) +
geom_col_pattern(aes(pattern = film, fill = film,
pattern_angle = film, pattern_spacing = film),
fill = 'white',
colour = 'black',
pattern_density = .35,
pattern_fill = 'darkblue',
pattern_colour = 'darkblue') +
theme_bw() +
theme(legend.position = "right") +
coord_fixed(ratio = 1.5)+
scale_pattern_spacing_discrete(range = c(0.01, 0.05))
您可能已经注意到我使用了 geom_col_pattern()
。
我看到你 aes(pattern = film)
这条线没有做任何事情,它需要绑定到 geom_
或 stat_
调用。
如果您设置了变量的显示方式,则可以使用
scale_color_manual
和 scale_fill_manual
呼吁这样做。
例如:
ggplot(unique(films2[,c("film","word.len.avg")], aes(film, word.len.avg,, fill = film))+
geom_bar_pattern(stat="identity",
pattern = c("circle", "stripe", "none",
"wave", "crosshatch" ),
pattern_angle = c(45, 60, rep(45, 3)),
# fill = 'white',
colour = 'black',
pattern_density = .35,
pattern_fill = 'darkblue',
pattern_colour = 'darkblue'
) + scale_fill_manual(values = setNames(c("darkred", "darkblue", "white",
"lightyellow", "gray"),
unlist(df$film))) +
scale_x_discrete(breaks = c("dial.m.for.murder", "pscyho",
"rear.window", "rope", "vertigo"),
labels = c("Dial M for Murder", "Psycho", "
Rear Window", "Rope", "Vertigo"))+
theme_bw() +
# aes(pattern = film)+
theme(legend.position = "right") + scale_pattern_fill_viridis_c() +
coord_fixed(ratio = 1.5)+
scale_pattern_spacing_discrete(range = c(0.01, 0.05))