R:如何根据下限值和上限值之间的距离对线性范围图进行排序?
R: How to order linerange plots by the distance between their lower and upper value?
是否可以根据上下限值之间的距离对 R 中的线图进行排序,并让它们从最大距离到最小距离排序?
代码:
df <- ToothGrowth
df$dose <- as.factor(df$dose)
head(df, 3)
library(dplyr)
df.summary <- df %>%
group_by(dose) %>%
summarise(
lower = min(len), upper = max(len), p = mean(len),
)
f <- ggplot(
df.summary,
aes(x = dose, y = p, ymin = lower, ymax = upper)
)
f + geom_linerange()
目标是让它们从最远距离到最短距离(从左到右)排列。
如有任何帮助,我们将不胜感激!
您可以使用reorder()
ggplot(
df.summary,
aes(x = reorder(dose, -(upper-lower)), y = p, ymin = lower, ymax = upper)) +
geom_linerange() +
labs(x="Dose")
这应该有效
df <- ToothGrowth
df$dose <- as.factor(df$dose)
head(df, 3)
library(dplyr)
df.summary <- df %>%
group_by(dose) %>%
summarise(
lower = min(len), upper = max(len), p = mean(len),
)
f <- ggplot(
df.summary,
aes(x = reorder(dose,upper-lower), y = p, ymin = lower, ymax = upper)
)
f + geom_linerange()
如您所见,有多种方法可以解决此问题。在下面的例子中,我计算了差异并根据结果对 data.frame 进行了排序。最后一行设置因子水平。这是我的首选方式,因为我保留我的 ggplots 仅用于绘图,并尽可能避免进行任何数据操作。
xy.summary$diff <- with(xy.summary, upper - lower)
xy.summary <- xy.summary[order(xy.summary$diff, decreasing = TRUE), ]
levels(xy.summary$dose) <- xy.summary$dose
ggplot(xy.summary, mapping = aes(x = dose, y = p, ymin = lower, ymax = upper)) +
theme_bw() +
geom_linerange()
是否可以根据上下限值之间的距离对 R 中的线图进行排序,并让它们从最大距离到最小距离排序?
代码:
df <- ToothGrowth
df$dose <- as.factor(df$dose)
head(df, 3)
library(dplyr)
df.summary <- df %>%
group_by(dose) %>%
summarise(
lower = min(len), upper = max(len), p = mean(len),
)
f <- ggplot(
df.summary,
aes(x = dose, y = p, ymin = lower, ymax = upper)
)
f + geom_linerange()
目标是让它们从最远距离到最短距离(从左到右)排列。
如有任何帮助,我们将不胜感激!
您可以使用reorder()
ggplot(
df.summary,
aes(x = reorder(dose, -(upper-lower)), y = p, ymin = lower, ymax = upper)) +
geom_linerange() +
labs(x="Dose")
这应该有效
df <- ToothGrowth
df$dose <- as.factor(df$dose)
head(df, 3)
library(dplyr)
df.summary <- df %>%
group_by(dose) %>%
summarise(
lower = min(len), upper = max(len), p = mean(len),
)
f <- ggplot(
df.summary,
aes(x = reorder(dose,upper-lower), y = p, ymin = lower, ymax = upper)
)
f + geom_linerange()
如您所见,有多种方法可以解决此问题。在下面的例子中,我计算了差异并根据结果对 data.frame 进行了排序。最后一行设置因子水平。这是我的首选方式,因为我保留我的 ggplots 仅用于绘图,并尽可能避免进行任何数据操作。
xy.summary$diff <- with(xy.summary, upper - lower)
xy.summary <- xy.summary[order(xy.summary$diff, decreasing = TRUE), ]
levels(xy.summary$dose) <- xy.summary$dose
ggplot(xy.summary, mapping = aes(x = dose, y = p, ymin = lower, ymax = upper)) +
theme_bw() +
geom_linerange()