以R钟形曲线(密度)重新排列条形图

问题描述 投票:-1回答:1

假设我有一个数据框:

df <- data.frame(x = c("A","B","C"), y = c(10,20,30)) 

并且我希望使用ggplot2对其进行绘制,以便获得类似直方图的图形(在这里,我从数据框中绘制了count列值,而不是绘制y。(我不介意[C0 ]列是因子列或字符列。

[我将补充说,我知道如何通过降序/升序对条形图进行重新排序,但是像直方图一样进行排序(最高值在均值中间,而在两侧均递减)仍然超出我的范围。

[我想到了对数据进行变换,以便可以将其拟合为直方图-就像创建一个包含10个x对象,20个"A"和30 "B"个对象的矢量,然后在其上运行直方图。但这对于我要尝试的操作不切实际,因为这似乎是一种懒惰且效率极低的方法。同样,"C"数据帧非常大,因此在我的系统上乘以数百万之类的内容就不好了。

r ggplot2 geom-bar
1个回答
1
投票

这似乎是一件很奇怪的事情,因为如果您的x变量中的排序尚未隐含,那么按钟形曲线进行排序最多是人为的。但是,如果您真的想...,则实现起来很简单。

df

library(ggplot2) df <- data.frame(yvals = floor(abs(rnorm(26)) * 100), xvals = LETTERS, stringsAsFactors = FALSE) ggplot(data = df, aes(x = xvals, y = yvals)) + geom_bar(stat = "identity")

enter image description here

ordered <- order(df$yvals) left_half <- ordered[seq(1, length(ordered), 2)] right_half <- rev(ordered[seq(2, length(ordered), 2)]) new_order <- c(left_half, right_half) df2 <- df[new_order,] df2$xvals <- factor(df2$xvals, levels = df2$xvals) ggplot(data = df2, aes(x = xvals, y = yvals)) + geom_bar(stat = "identity")

© www.soinside.com 2019 - 2024. All rights reserved.