首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用ggplot2绘制被分成多个类别的数据?

如何使用ggplot2绘制被分成多个类别的数据?
EN

Stack Overflow用户
提问于 2021-09-30 13:06:07
回答 1查看 41关注 0票数 1

一项关于使用两种清洁产品(产品A和产品B)的市场调查按房间(厨房、浴室、卧室)、使用频率(每天、每周、每月)和产品瓶子大小(小、中、大)分开。

我认为表示这些结果的最好方法是柱状图。然而,我认为有更好的方法来表示这些结果,所以我来这里寻求更好的图形表示的建议,因为我对柱状图不是很满意。

在MWE中,数据是按升序排列的,但对于真实数据,不同的列大小使得绘图在视觉上非常混乱。

代码语言:javascript
复制
library(ggplot2)

Product <- c("Product A", "Product B")
Place <- c("Kitchen", "Bathroom", "Bedroom")
Bottle_size <- c("Small", "Medium", "Large")
Frequency <- c("Daily", "Weekly", "Monthly")

DF <- expand.grid(Bottle_size = Bottle_size,
                  Place = Place,
                  Frequency = Frequency,
                  Product = Product)

DF$Consumer_Approval <- seq(from = 10,
                            to = 100,
                            by = (100-10)/53)

ggplot(data = DF,
       aes(x = Frequency,
           y = Consumer_Approval)) +
  geom_col(aes(fill = Bottle_size),
           position = "dodge") +
  facet_grid(Product ~ Place)

enter image description here

实际数据类似于:enter image description here

EN

回答 1

Stack Overflow用户

发布于 2021-09-30 14:13:31

一种选择是棒棒糖图表,其中棒棒糖的高度显示产品A和产品B的消费者评级之间的差异。这允许在给定的设置中快速直观地估计首选产品:

代码语言:javascript
复制
ProdA <- split(DF, Product)[[1]]
ProdB <- split(DF, Product)[[2]]
DF <- dplyr::left_join(ProdA, ProdB, c("Bottle_size", "Place", "Frequency"))
DF$AvsB <- DF$Consumer_Approval.x - DF$Consumer_Approval.y

ggplot(data = DF, aes(x = Frequency, y = AvsB, color = Bottle_size)) +
  geom_point(position = position_dodge(width = 0.5)) +
  geom_linerange(aes(ymin = AvsB, ymax = 0), position = position_dodge(width = 0.5)) +
  geom_hline(yintercept = 0, linetype = 2) +
  ylim(-100, 100) +
  facet_grid(.~Place) +
  labs(y = "Prefers Product B <- No preference  -> Prefers Product A")

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69392779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档