gpt4 book ai didi

r - ggplot - facet wrap - 调整比例以显示值之间的明显差异

转载 作者:行者123 更新时间:2023-12-02 05:22:03 25 4
gpt4 key购买 nike

我有一个如下所示的数据框:

text <- "
brand a b c d e f
nissan 99.21 99.78 6496 1.28 216 0.63
toyota 99.03 99.78 7652 1.39 205 0.60
"
df <- read.table(textConnection(text), sep="\t", header = T)

我正在尝试使用 face_wrap 将两组的所有变量绘制在单个 ggplot 中,如下所示:

library(reshape2)
library(ggplot2)
library(ggthemes)
library(RColorBrewer)
ggplot(melt(df, id = "brand")) +
aes(brand, value, fill = brand) +
geom_bar(stat = "identity", position='dodge') +
geom_text(data=melt(df, id = "brand"), angle = 0,
aes(brand, value,
label = ifelse(value > 100, round(value, 0), value) ) ) +
facet_wrap(~ variable, scales = "free_y") +
scale_fill_brewer(palette = "Paired") +
theme(
legend.position = "top",
strip.text.y = element_text(angle = 0),
axis.text.x = element_blank(),
axis.text.y = element_blank(),
axis.ticks = element_blank()
)

除了一件事,它运作良好。变量值组之间的明显差异在视觉上表现不佳。例如,对于变量 a,我希望条形的高度能够以更简单的方式清楚地表明哪个更高。如何使这些接近值之间的高度差更大?

enter image description here

最佳答案

我相信人们会很高兴地告诉您如何破解 ggplot2,这样您就可以让条形图以任意 y 值开始。 但是,您需要注意,结果将是一个毫无意义的垃圾图表,特别是如果您去掉 y 轴的轴刻度。我建议阅读这篇关于 principle of proportional ink. 的博文

您可以采用的一种解决方案是绘制代表两个变量比率的条形图,如下所示:

text <- "
brand a b c d e f
nissan 99.21 99.78 6496 1.28 216 0.63
toyota 99.03 99.78 7652 1.39 205 0.60
"

df_wide <- read.table(textConnection(text), sep="\t", header = T)

library(ggplot2)
library(tidyr)
library(dplyr)

df_long <- gather(df_wide, variable, value, -brand) %>%
spread(brand, value) %>%
mutate(ratio = nissan/toyota,
label = paste(signif(nissan, 3), signif(toyota, 3), sep = " / "),
vjust = ifelse(ratio >= 1, -.5, 1.5)) %>%
mutate(ratio = ifelse(ratio == 1, 1.001, ratio))

ggplot(df_long, aes(variable, ratio, fill = (ratio>=1))) +
geom_col() +
geom_text(aes(label = label, vjust = vjust)) +
scale_y_log10(name = "ratio Nissan / Toyota",
breaks = c(.85, .9, .95, 1, 1.05, 1.1),
expand = c(.15, 0)) +
scale_fill_brewer(palette = "Paired", guide = "none")

enter image description here

结果是每对只有一个条,但条的高度准确反射(reflect)了两个变量的相对大小。而且您似乎对绝对幅度不感兴趣,因为您在原始 facet_wrap() 命令中使用自由 y 轴缩放。

关于r - ggplot - facet wrap - 调整比例以显示值之间的明显差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48199704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com