ggplot2中的水平条形图
Posted
技术标签:
【中文标题】ggplot2中的水平条形图【英文标题】:Horizontal Barplot in ggplot2 【发布时间】:2012-06-12 01:30:55 【问题描述】:我正在ggplot2
中制作水平点图 (?),这让我开始考虑尝试创建水平条形图。但是,我发现能够做到这一点有一些限制。
这是我的数据:
df <- data.frame(Seller=c("Ad","Rt","Ra","Mo","Ao","Do"),
Avg_Cost=c(5.30,3.72,2.91,2.64,1.17,1.10), Num=c(6:1))
df
str(df)
最初,我使用以下代码生成了一个点图:
require(ggplot2)
ggplot(df, aes(x=Avg_Cost, y=reorder(Seller,Num))) +
geom_point(colour="black",fill="lightgreen") +
opts(title="Avg Cost") +
ylab("Region") + xlab("") + ylab("") + xlim(c(0,7)) +
opts(plot.title = theme_text(face = "bold", size=15)) +
opts(axis.text.y = theme_text(family = "sans", face = "bold", size = 12)) +
opts(axis.text.x = theme_text(family = "sans", face = "bold", size = 12))
但是,我现在正在尝试创建水平条形图,但发现我无法这样做。我试过coord_flip()
,但也没有用。
ggplot(df, aes(x=Avg_Cost, y=reorder(Seller,Num))) +
geom_bar(colour="black",fill="lightgreen") +
opts(title="Avg Cost") +
ylab("Region") + xlab("") + ylab("") + xlim(c(0,7)) +
opts(plot.title = theme_text(face = "bold", size=15)) +
opts(axis.text.y = theme_text(family = "sans", face = "bold", size = 12)) +
opts(axis.text.x = theme_text(family = "sans", face = "bold", size = 12))
任何人都可以就如何在ggplot2
中生成水平条形图提供一些帮助吗?
【问题讨论】:
【参考方案1】:ggplot(df, aes(x=reorder(Seller, Num), y=Avg_Cost)) +
geom_bar(stat='identity') +
coord_flip()
如果没有stat='identity'
,ggplot 想要将您的数据汇总为计数。
【讨论】:
ggplot2 中的每个geom
都有一个默认的stat
。对于geom_bar
,默认状态为bin
,因此必须将其更改为identity
,如贾斯汀所示。默认为 bin 的另外两个 geom 是freqpoly
,当然还有histogram
。
这个问题是 coord_flip() 反转了轴。所以在 x 上从左到右的现在在 y 上从下到上。
也适用于“stat_summary(fun=mean, geom="col")”【参考方案2】:
ggplot(df, aes(x=reorder(Seller, Num), y=Avg_Cost)) +
geom_col()
这可能是另一种选择
【讨论】:
以上是关于ggplot2中的水平条形图的主要内容,如果未能解决你的问题,请参考以下文章
将水平线添加到 R 中 ggplot2 中的堆叠条形图,并在图例中显示
R语言ggplot2可视化绘制分组水平并行条形图(bar plot)并为条形图内添加标签
R语言ggplot2可视化绘制分组水平条形图并在条形图的各种位置添加数值标签实战
R语言ggplot2可视化彩色水平条形图并基于条形长度和数值标签长度自定义最优化配置标签在条形内部或者条形外部
R语言ggplot2可视化水平条形图(horizontal bar plot)并且在条形图的条形上添加数值标签( Customizing labels on bars in barplot)
R语言ggplot2可视化水平条形图(horizontal bar plot)设置水平条形图的轴文本标签左对齐(axis lables left align in horizontal bar)