错误栏和值标签未放置在 ggplot2 中的正确栏上
The Error Bars and the value labels are not getting placed on the Correct Bars in ggplot2
我正在尝试向图表添加误差线和标签值。我能够添加酒吧。但是它们并没有被放置在我想要的确切位置。也就是说,每个错误栏和标签值都没有放在相应的栏上。相反,它们不匹配。
我使用的代码:
Source_Data <-
data.frame(
key = c(1, 1, 1, 2, 2, 2, 3, 3, 3),
Product_Name = c(
"Table",
"Table",
"Chair",
"Table",
"Bed",
"Bed",
"Sofa",
"Chair",
"Sofa"
),
Product_desc = c("XX", "XXXX", "YY", "X", "Z", "ZZZ", "A", "Y", "A"),
sd =c(0.1,0.3,0.4,0.5,0.6,0.7,0.7,0.8,0.5),
Cost = c(1, 2, 3, 4, 2, 3, 4, 5, 6)
)
Source_Data %>%
ggplot(aes(Product_Name, Cost)) +
geom_col(aes(fill = Product_desc), position = position_dodge(preserve =
"single")) +
geom_errorbar(aes(ymin=Cost-sd, ymax=Cost+sd)) +
geom_text(aes(label=Cost)) +
facet_wrap(~key, scales = "free_x", strip.position = "bottom") +
theme(strip.placement = "outside") +
theme_bw()
当代码为 运行 时,我无法将错误栏和标签值放在正确的栏上。
还有没有办法让图表更具交互性?也就是说,当我将光标移到图表顶部时,值应该会自动显示,如果需要,我很乐意 post 这也作为一个单独的问题。
可能有比我在这里提供的方法更好的方法,and/or这可能不是您所需要的。如果这与您正在寻找的内容相似,请发表评论。
我将您的代码从 position_dodge
切换为 position_dodge2
,这样可以更好地使条形组在 x 位置居中。此外,将 fill = Product_desc
移至主要 ggplot
调用(良好做法)。
对于 geom_col
、geom_errorbar
和 geom_text
,我始终将 width
设置为 .9。为了使误差线对齐,我添加了 padding
(参见:https://github.com/tidyverse/ggplot2/issues/2251)。此外,将文本 y 位置移动到略高于错误栏的位置(Cost+sd
和 vjust
- 如果愿意,可以考虑在其他地方)。
为了交互性,可以考虑 plotly
包。请进一步准确描述您希望在 hover
行为中看到的内容。
Source_Data %>%
ggplot(aes(Product_Name, Cost, fill = Product_desc)) +
geom_col(position = position_dodge2(width = .9, preserve = "single")) +
geom_errorbar(aes(ymin=Cost-sd, ymax=Cost+sd), position = position_dodge2(width = .9, preserve = "single", padding = .5)) +
geom_text(aes(y=Cost+sd, label=Cost), position = position_dodge2(width=.9), vjust = -1) +
facet_wrap(~key, scales = "free_x", strip.position = "bottom") +
theme(strip.placement = "outside") +
theme_bw()
只需在您的脚本中添加点点滴滴,使其不那么冗长。您可能不需要栏上的文本,因为可以从“y 轴”看到它。
library(ggplot2)
# saving the min and max values on variables for the errorbar
min <- Source_Data$Cost - Source_Data$sd
max <- Source_Data$Cost + Source_Data$sd
# -------------------------------------------------------------------------
# Plotting the base layer and saving it on base
base <- ggplot(Source_Data, aes(Product_Name, Cost, fill = Product_desc))
# -------------------------------------------------------------------------
# adding the bar and error bar on the base layer and saving it on base_col_err_bar
base_col_err_bar <- base +
geom_col(position = "dodge2") +
geom_errorbar(
aes(ymin = min, ymax = max),
position = position_dodge2(width = 0.5, padding = 0.5)
)
# -------------------------------------------------------------------------
# Adding the text and facet layer and the themes you wanted
b_facet_text <- base_col_err_bar +
geom_text(aes(label=Cost)) +
facet_wrap(~key, scales = "free_x", strip.position = "bottom") +
theme(strip.placement = "outside") +
theme_bw()
# -------------------------------------------------------------------------
# Renaming the x and y labs and the legend title
b_facet_text+ labs(x = "Product Name", y = "Cost", fill = "Product Desc.")
产出
如果你真的想调整 geom_text()
的位置(恕我直言,你不需要来自 R 的 'em in the first place), read the manual using `?geom_text'。
我正在尝试向图表添加误差线和标签值。我能够添加酒吧。但是它们并没有被放置在我想要的确切位置。也就是说,每个错误栏和标签值都没有放在相应的栏上。相反,它们不匹配。
我使用的代码:
Source_Data <-
data.frame(
key = c(1, 1, 1, 2, 2, 2, 3, 3, 3),
Product_Name = c(
"Table",
"Table",
"Chair",
"Table",
"Bed",
"Bed",
"Sofa",
"Chair",
"Sofa"
),
Product_desc = c("XX", "XXXX", "YY", "X", "Z", "ZZZ", "A", "Y", "A"),
sd =c(0.1,0.3,0.4,0.5,0.6,0.7,0.7,0.8,0.5),
Cost = c(1, 2, 3, 4, 2, 3, 4, 5, 6)
)
Source_Data %>%
ggplot(aes(Product_Name, Cost)) +
geom_col(aes(fill = Product_desc), position = position_dodge(preserve =
"single")) +
geom_errorbar(aes(ymin=Cost-sd, ymax=Cost+sd)) +
geom_text(aes(label=Cost)) +
facet_wrap(~key, scales = "free_x", strip.position = "bottom") +
theme(strip.placement = "outside") +
theme_bw()
当代码为 运行 时,我无法将错误栏和标签值放在正确的栏上。
还有没有办法让图表更具交互性?也就是说,当我将光标移到图表顶部时,值应该会自动显示,如果需要,我很乐意 post 这也作为一个单独的问题。
可能有比我在这里提供的方法更好的方法,and/or这可能不是您所需要的。如果这与您正在寻找的内容相似,请发表评论。
我将您的代码从 position_dodge
切换为 position_dodge2
,这样可以更好地使条形组在 x 位置居中。此外,将 fill = Product_desc
移至主要 ggplot
调用(良好做法)。
对于 geom_col
、geom_errorbar
和 geom_text
,我始终将 width
设置为 .9。为了使误差线对齐,我添加了 padding
(参见:https://github.com/tidyverse/ggplot2/issues/2251)。此外,将文本 y 位置移动到略高于错误栏的位置(Cost+sd
和 vjust
- 如果愿意,可以考虑在其他地方)。
为了交互性,可以考虑 plotly
包。请进一步准确描述您希望在 hover
行为中看到的内容。
Source_Data %>%
ggplot(aes(Product_Name, Cost, fill = Product_desc)) +
geom_col(position = position_dodge2(width = .9, preserve = "single")) +
geom_errorbar(aes(ymin=Cost-sd, ymax=Cost+sd), position = position_dodge2(width = .9, preserve = "single", padding = .5)) +
geom_text(aes(y=Cost+sd, label=Cost), position = position_dodge2(width=.9), vjust = -1) +
facet_wrap(~key, scales = "free_x", strip.position = "bottom") +
theme(strip.placement = "outside") +
theme_bw()
只需在您的脚本中添加点点滴滴,使其不那么冗长。您可能不需要栏上的文本,因为可以从“y 轴”看到它。
library(ggplot2)
# saving the min and max values on variables for the errorbar
min <- Source_Data$Cost - Source_Data$sd
max <- Source_Data$Cost + Source_Data$sd
# -------------------------------------------------------------------------
# Plotting the base layer and saving it on base
base <- ggplot(Source_Data, aes(Product_Name, Cost, fill = Product_desc))
# -------------------------------------------------------------------------
# adding the bar and error bar on the base layer and saving it on base_col_err_bar
base_col_err_bar <- base +
geom_col(position = "dodge2") +
geom_errorbar(
aes(ymin = min, ymax = max),
position = position_dodge2(width = 0.5, padding = 0.5)
)
# -------------------------------------------------------------------------
# Adding the text and facet layer and the themes you wanted
b_facet_text <- base_col_err_bar +
geom_text(aes(label=Cost)) +
facet_wrap(~key, scales = "free_x", strip.position = "bottom") +
theme(strip.placement = "outside") +
theme_bw()
# -------------------------------------------------------------------------
# Renaming the x and y labs and the legend title
b_facet_text+ labs(x = "Product Name", y = "Cost", fill = "Product Desc.")
产出
如果你真的想调整 geom_text()
的位置(恕我直言,你不需要来自 R 的 'em in the first place), read the manual using `?geom_text'。