我有一个与此类似的数据集
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)
现在我想用ggplot2绘制一个像点
的点图ggplot(data, aes(timestamp, products, colour=categories, group=categories)) + geom_point()
产生以下图表
这几乎就是我的意思,但是,我想按照这个图表对产品进行分类:
dotchart(data$timestamp, labels=data$products, groups=data$categories, color=data$color)
将产品的出现次数绘制为相同的y值非常重要(如第一个图中所示),而不是像在第二个图中那样对每个记录重复它。
答案 0 :(得分:3)
您可以尝试创建一个新的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()
虽然y轴文本的布局不像dotchart
。
或者您可以将facet_wrap
用于类似但有点不同的事情(不需要type
事物):
ggplot(data, aes(timestamp, products, colour=categories)) + geom_point() + facet_wrap( ~ categories,ncol=1)
这个提供了更多类别的分离,并且具有显示&#34;空&#34;的优势(或者可能不利,取决于您的意见)。级别组合(例如,类别2产品1)。如果您不喜欢,请添加scales="free_y"
:
ggplot(data, aes(timestamp, products, colour=categories)) + geom_point() + facet_wrap( ~ categories, ncol=1, scales="free_y")