dotplot与ggplot2分组y值

时间:2015-07-09 05:23:39

标签: r plot ggplot2

我有一个与此类似的数据集

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()

产生以下图表

enter image description here

这几乎就是我的意思,但是,我想按照这个图表对产品进行分类:

dotchart(data$timestamp, labels=data$products, groups=data$categories, color=data$color)

enter image description here

将产品的出现次数绘制为相同的y值非常重要(如第一个图中所示),而不是像在第二个图中那样对每个记录重复它。

1 个答案:

答案 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()

enter image description here

虽然y轴文本的布局不像dotchart

或者您可以将facet_wrap用于类似但有点不同的事情(不需要type事物):

ggplot(data, aes(timestamp, products, colour=categories)) + geom_point() + facet_wrap( ~ categories,ncol=1)

enter image description here

这个提供了更多类别的分离,并且具有显示&#34;空&#34;的优势(或者可能不利,取决于您的意见)。级别组合(例如,类别2产品1)。如果您不喜欢,请添加scales="free_y"

ggplot(data, aes(timestamp, products, colour=categories)) + geom_point() + facet_wrap( ~ categories, ncol=1, scales="free_y")

enter image description here