问题:
如何正确地将使用不同(但相关!)数据集的geom_errorbar()
堆叠在geom_violin()
之上?
设置
我运行了一个招标,收到了多个运输路线的单个投标价格。然后,我选择了2或3个投标以创建加权平均决标价格。此外,对于每个运输路线,我收到了外部基准服务对该运输路线的最低和最高市场估计。在单个图中,我将显示:
geom_violin()
所接收的投标价格的分布。geom_jitter()
的单个投标价格。geom_point()
单一加权平均/混合奖励。- X1 M5 N1 X(或相关的几何-优选地使用X1 M6 N1 X的阴影区域),其示出了该项目的低和高之间的市场估计。
为了尽量减少重复,我使用了2个 Dataframe ,一个包含每个项目的众多投标价格,另一个仅包含混合的授标和市场估计:
df_detail <- data.frame(item = c("Item_1", "Item_1", "Item_1", "Item_1", "Item_1",
"Item_2", "Item_2", "Item_2", "Item_2", "Item_2",
"Item_3", "Item_3", "Item_3", "Item_3", "Item_3"),
bid_price = c(6678, 3236, 4674, 5487, 5490,
5800, 6678, 3827, 4674, 5487,
2266, 1195, 1225, 3285, 1350))
df_summary <- data.frame(item = c("Item_1", "Item_2", "Item_3"),
award = c(4278, 5844.32, 1244.31),
mkt_low = c(4603, 4619, 833),
mkt_high = c(5661, 5681, 1176))
目前为止的工作...
我从其他经验和阅读中了解到,您可以将主数据集放在对ggplot()
的调用中并添加geom_*s()
,还可以在自己的geom_*()
调用中添加单独的数据集。在此调用中,除了geom_errorbar()
之外,我可以轻松获取所有数据集:
library(ggplot2)
ggplot(data = df_detail, # Primary dataset using all the bid prices
aes(x=item,
y = bid_price)) +
geom_violin(fill = "gray90") +
geom_jitter(color = "darkorchid2",
size = 0.75,
alpha = 1,
width = 0.15) +
geom_point(data = df_summary, # Add summary dataset with single award point.
aes(x = item,
y = award),
color = "red") +
theme_bw() +
coord_cartesian(ylim = c(0,7000))
...我可以在他们自己的图中分别创建geom_errorbars()
,其中包含每个项目的市场低点和高点:
ggplot(data = df_summary,
mapping = aes(x = item,
ymin = mkt_low,
ymax = mkt_high)) +
geom_errorbar(width = 0.5) +
theme_bw() +
coord_cartesian(ylim = c(0,7000))
问题
我不能把它们放在同一个情节里:
ggplot(data = df_detail,
aes(x=item,
y = bid_price)) +
geom_violin(fill = "gray90") +
geom_jitter(color = "darkorchid2",
size = 0.75,
alpha = 1,
width = 0.15) +
geom_point(data = df_summary,
aes(x = item,
y = award),
color = "red") +
geom_errorbar(data = df_summary, # I am adding this geom_* call!!!!
mapping = aes(x = item,
ymin = mkt_low,
ymax = mkt_high),
width = 0.5) +
theme_bw() +
coord_cartesian(ylim = c(0,7000))
我在下面的跟踪中看到了上述错误。但是,我感到困惑,因为我没有遇到早期工作的geom_point()
调用的问题。我不理解geom_errorbar()
查找df_detail
的一部分bid_price
对象的过程。如果我运行rlang::last_trace()
,我的技能不足以有效地破译此错误:
我觉得我在这里有一些重大的误解,我感谢任何提供的帮助。提前感谢你。
1条答案
按热度按时间xpcnnkqh1#
因为您在第1行的
ggplot()
调用中设置了data =df_detail
和aes(y = bid_price)
,所以它们将被继承为所有后续geom_* 的默认值。对于geom_errorbar()
中的aes(y = )
参数也是如此,无论为错误栏提供了什么自定义data
和aes(x)
参数。要获得您想要的结果,可以在每个geom中设置y参数,而不是在
ggplot(aes())
调用中设置,或者简单地将geom_errorbar
中aes()
Map的y参数设置为NULL。