图例混合形状与几何点R

图例混合形状与几何点R,r,legend,geom-point,R,Legend,Geom Point,使用ggplot2在R中绘制图形时,图例显示不正确。我的数据集的一列由geom_条表示,另外两列由geom_点表示(各一个形状)。圆圈和钻石形状在2000年和2008年都会出现,圆圈在diamong的年份都会出现。然而,这个图表运行得非常好 以下是一个屏幕截图: 我已经创建了我的数据集的简化版本: order_var <- c(1, 4, 3, 5, 6, 2) alt_name <- c('Agriculture', 'Mining', 'Food products',' Man

使用ggplot2在R中绘制图形时,图例显示不正确。我的数据集的一列由geom_条表示,另外两列由geom_点表示(各一个形状)。圆圈和钻石形状在2000年和2008年都会出现,圆圈在diamong的年份都会出现。然而,这个图表运行得非常好

以下是一个屏幕截图:

我已经创建了我的数据集的简化版本:

order_var <- c(1, 4, 3, 5, 6, 2)
alt_name <- c('Agriculture', 'Mining', 'Food products',' Manufacture', 'Chemicals', 'Machinery')
y2000 <- c(20, 40, 50, 80, 30, 70)
y2008 <- c(40, 50, 80, 70, 30, 60)
y2018 <- c(10, 30, 80, 50, 40, 50)
datatest <- data.frame("order_var" = order_var, "alt_name" = alt_name, "y2000" = y2000, "y2008" = y2008, "y2018" = y2018)
如果你知道如何纠正这个问题,我将非常感激


谢谢:)

这是一个非常棘手的情节,你正在尝试,因为你在本质上映射相同的美学到不同的
geom
s

您应该做的第一件事是将数据重塑为长格式。我还将您的数据集划分为2018年(酒吧)和2000年、2008年(积分)

另一种更通用的解决方案是,避免对
几何点
使用
填充
美学,而是将形状更改为实心形状:

ggplot(data_bar, aes(x = reorder(alt_name, order_var))) +
  geom_bar(aes(y = value, fill = name), stat = 'identity', color = "black") +
  geom_point(data = data_point, position=position_dodge(width=0.6), aes(y = value, color = name, shape = name, size = name)) +
  scale_fill_manual(values = c("#4F81BD"), labels = c("2018")) +
  scale_colour_manual(values = c("orange", "white"), labels = c("2000", "2008")) +
  scale_shape_manual(values = c(19, 18), labels = c("2000", "2008")) +
  scale_size_manual(values = c(4, 6), labels = c("2000", "2008")) +
  theme(legend.position = "top", legend.title = element_blank()) +
  labs(x = "Industry", y = "Percentage")

df2 <- datatest %>%
  pivot_longer(cols = -c(order_var, alt_name)) %>%
  mutate(bar = if_else(name == "y2018", 1, 0))

data_bar <- df2 %>% filter(bar == 1)
data_point <- df2 %>% filter(bar != 1)
ggplot(data_bar, aes(x = reorder(alt_name, order_var))) +
  geom_bar(aes(y = value, linetype = name), fill = "#4F81BD", stat = 'identity', color = 'black') +
  geom_point(data = data_point, position=position_dodge(width=0.6), aes(y = value, color = name, shape = name, size = name, fill = name)) +
  scale_colour_manual(values = c("orange", "black"), labels = c("2000", "2008")) +
  scale_fill_manual(values = c("orange", "white"), labels = c("2000", "2008")) +
  scale_shape_manual(values = c(19, 23), labels = c("2000", "2008")) +
  scale_size_manual(values = c(3, 5), labels = c("2000", "2008")) +
  scale_linetype_manual(values = 1, guide = guide_legend(override.aes = list(fill = c("#4F81BD"))), labels = c("2018")) +
  theme(legend.position = "top", legend.title = element_blank()) +
  labs(x = "Industry", y = "Percentage")
ggplot(data_bar, aes(x = reorder(alt_name, order_var))) +
  geom_bar(aes(y = value, fill = name), stat = 'identity', color = "black") +
  geom_point(data = data_point, position=position_dodge(width=0.6), aes(y = value, color = name, shape = name, size = name)) +
  scale_fill_manual(values = c("#4F81BD"), labels = c("2018")) +
  scale_colour_manual(values = c("orange", "white"), labels = c("2000", "2008")) +
  scale_shape_manual(values = c(19, 18), labels = c("2000", "2008")) +
  scale_size_manual(values = c(4, 6), labels = c("2000", "2008")) +
  theme(legend.position = "top", legend.title = element_blank()) +
  labs(x = "Industry", y = "Percentage")