如何在两个因子变量之间绘制多条线

4
我正在尝试使用R绘制一种特定类型的图表。
这是我要获取的图表的描述: x轴上的变量(“日期”)是因子。它的水平在x轴上报告。 同样,y轴上的变量(“主题”)也是一个因子,并且绘制的是每个“日期”级别下其计数的比例。
因此,例如,让我们考虑这个数据库:
    data <- data.frame(ID = 1:20, Date = as.factor(c(1,1,1,1, 1, 1,1, 2,2,2,2, 2, 2, 2, 2, 3,3,3, 3, 3)), Theme = as.factor(c("a","b", "b", "c", "c", "c", "c","a","a","a", "a", "b","c", "c","a","a","b","b", "b", "c")))

在R中,我成功制作了一个堆积条形图,统计每个日期的主题值比例:
    ggplot(data, aes(x = Date)) + geom_bar(aes(fill = Theme), position = 'fill')

我的目标是为每个x轴级别(“日期”)生成三条水平连接的线,表示y轴变量(“主题”)的计数比例。

我在网上找到了一种方法,但我没有成功使它们工作。

    ggplot(Theme, aes(Date)) + geom_freqpoly(aes(group = Theme, colour = Theme))

我在这里找到了这个公式:http://docs.ggplot2.org/0.9.3.1/geom_bar.html 第13张图基本上就是我想要的。感谢任何帮助!

我认为您的示例数据并不充分代表您想要绘制的内容,但是尝试提供可复现的示例非常好。这是您想要做的吗...... ggplot( aes(Date, Theme) , data=data) + geom_freqpoly( aes( group = Theme , colour = Theme ) ) - Simon O'Hanlon
谢谢你的回答,但我还没有到那里:我得到了与x轴平行的三条线... - Dario Lacan
2个回答

1
对于您的数据,最接近的近似值如下:
ggplot(data, aes(x=Date, y=ID, group=Theme, col=Theme)) + geom_line() + geom_point()

关于日期,更好的方法是使用标准的POSIXct或Date类,它们可以通过相同的ggplot表达式进行可视化,并且可以通过添加scale_x_date()或scale_x_datetime函数进一步自定义轴。


谢谢您的回答!但是我还没有达到目标:它似乎显示了一个累积计数(所有行都“攀升”向右上方),而不是按每个x轴因子水平的计数分布 - 就像我试图获得的图片一样。请告诉我是否可以添加更多信息... - Dario Lacan
抱歉,我错过了你的问题。您可以使用“table”函数高效地计算计数,然后使用类似的命令绘制它。如果您需要进一步帮助,请告诉我。 - df239

0

感谢Simon O'Hanlon和df239的帮助。

最终,我使用了这个公式得到了我想要的结果:

ggplot(data, aes(Date)) + geom_freqpoly(aes(group = Theme, colour = Theme))

我把它分享出来,以便其他可能会进入这个页面的人。

请注意,如果您为y轴声明一个变量,例如aes(Date, Theme),它将不起作用!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接