我有一个与此类似的数据集
products <- c('Product1', 'Product2', 'Product3', 'Product3', 'Product1', 'Product1')
timestamp <- c(1,2,3,4,5,6)
categories <- c('Category1', 'Category2', 'Category1', 'Category1', 'Category1', 'Category1')
data <- data.frame(timestamp, products, categories)
Run Code Online (Sandbox Code Playgroud)
现在我想用 ggplot2 画一个点图,如下所示
ggplot(data, aes(timestamp, products, colour=categories, group=categories)) + geom_point()
Run Code Online (Sandbox Code Playgroud)
产生以下图表

这几乎就是我想要的,但是,我想将产品按类别分组,如下表所示:
dotchart(data$timestamp, labels=data$products, groups=data$categories, color=data$color)
Run Code Online (Sandbox Code Playgroud)

重要的是绘制相同 y 值的产品出现次数(如第一个图中所示),而不是像第二个图中那样对每个记录重复它。
您可以尝试y像这样创建一个新列:
type <- paste(data$categories, data$products)
# convert to a factor and sort the levels reverse-alphabetical (so it is in order top-down on the plot)
type <- factor(type, levels=sort(unique(type), dec=T))
data$type <- type
ggplot(data, aes(timestamp, type, colour=categories)) + geom_point()
Run Code Online (Sandbox Code Playgroud)

尽管 y 轴文本的布局不像dotchart.
或者你可以用于类似但有点不同的东西(然后facet_wrap不需要这个东西):type
ggplot(data, aes(timestamp, products, colour=categories)) + geom_point() + facet_wrap( ~ categories,ncol=1)
Run Code Online (Sandbox Code Playgroud)

此选项提供了对类别的更多分离,并具有显示“空”级别组合(例如类别 2 产品 1)的优点(也可能是缺点,具体取决于您的意见)。如果你不喜欢这样添加scales="free_y":
ggplot(data, aes(timestamp, products, colour=categories)) + geom_point() + facet_wrap( ~ categories, ncol=1, scales="free_y")
Run Code Online (Sandbox Code Playgroud)
