我想用ggplot绘制以下数据:
SC_LTSL_BM 16.8275
SC_STSL_BM 17.3914
proB_FrBC_FL 122.1580
preB_FrD_FL 18.5051
B_Fo_Sp 14.4693
B_GC_Sp 15.4986
我想做的是制作一个条形图并保持条形图的顺序(即从SC_LTSL_BM ...B_GC_Sp
开始),但是ggplot geom_bar的默认行为是排序,我该如何避免呢?
library(ggplot2)
dat <- read.table("http://dpaste.com/1469904/plain/")
pdf("~/Desktop/test.pdf")
ggplot(dat,aes(x=V1,y=V2))+geom_bar()
dev.off()
目前的数字如下所示:
6条答案
按热度按时间xn1cxnb41#
你需要告诉ggplot你已经有了一个有序因子,所以它不会自动为你排序。
3z6pesqy2#
下面是一种不修改原始数据但使用
scale_x_discrete
的方法。从?scale_x_discrete
,“使用限制调整显示的级别(以及显示顺序)”。例如:zpjtge223#
dplyr让你很容易创建一个
row
列,你可以在ggplot中重新排序。ddarikpa4#
如果希望避免更改原始数据,则可以使用
forcats
(tidyverse
的一部分)中的fct_inorder
来保持数据沿x轴的原始顺序(而不是更改为字母顺序)。forcats
的另一个选项是手动指定fct_relevel
的顺序。xoefb8l85#
您也可以按照here所述重新排序相应的因子
ljsrvy3e6#
正如其他答案所指出的,如果您不希望ggplot假定显示内容的顺序,它希望您指定一个变量作为因子。如果您正在处理已经排序的数据,使用
readr
库是最简单的方法。使用
read_table
而不是read.table
函数,并作为col_types
参数的一部分,指定带有标签的列(本例中为V1
)作为因子。对于此类小型数据集,简单的格式字符串通常是最简单的方法字符串
"fd"
告诉read_table
第一列是因子,第二列是双精度型。函数的帮助文件包括其他类型数据的字符Map。