根据某些条件,我想绘制如下数据:
WC ASL TS LPD
7101 3 L 573.57
7101 3 L 323.33
7102 4 R 113.36
7102 4 R 3.05
7103 7 L 204.72
7103 7 L 123.65
7104 21 R 252.36
7104 21 R 225.74
7104 21 R 147.79
7104 21 R 151.47
7105 27 L 350.51
7105 27 L 41.61
7105 27 L 22.29
7105 27 L 2.00
情节的条件是:
我正在尝试这样的事情:
ggplot(df2, aes(LPD, ASL, TS, colour=WC)) +
geom_line() +
geom_point()
它的所有混乱...可能你可以帮助我更好地了解情节。
因为上面的内容可能让很多人感到困惑,所以我会更简单一点:
grp LPD
1 0.56744
1 0.4200938
2 0.070033616
2 0.065484951
3 0.327293
3 0.4718639
3 0.539516903
3 0.672646939
3 0.769603286
3 0.560730825
3 0.592725708
4 0.27415791
4 0.17706706
4 0.084262982
4 0.220420565
5 1.066580889
5 0.663611983
5 0.005299676
5 0.180121466
5 0.055205502
6 0.435355273
6 0.544843791
7 2.437439375
7 0.631948813
7 0.165961834
7 0.092725372
7 0.262442283
9 0.268541902
9 0.041798885
11 0.348282689
11 0.033044253
11 0.046070074
11 0.127173837
11 0.030580852
12 7.213290722
12 2.738036844
12 1.581291713
12 1.234204974
12 0.043930992
12 0.089781343
12 0.077482862
12 0.056506104
12 0.007676594
答案 0 :(得分:4)
OP并不完全清楚所需的输出是什么。但是,从评论中得出结论可能是这样的:
要创建此图,需要将数据从宽格式转换为长格式。 ggplot2
首选长格式。为此,使用melt()
包中的data.table
。
library(data.table)
df2 <- fread(
"WC ASL TS LPD
7101 3 L 573.57
7101 3 L 323.33
7102 4 R 113.36
7102 4 R 3.05
7103 7 L 204.72
7103 7 L 123.65
7104 21 R 252.36
7104 21 R 225.74
7104 21 R 147.79
7104 21 R 151.47
7105 27 L 350.51
7105 27 L 41.61
7105 27 L 22.29
7105 27 L 2.00"
)
# reshape from wide to long format
molten <- melt(setDT(df2), id = "LPD")
# ensure that factor levels are in order of appearance
molten[, value := forcats::fct_inorder(value)]
str(molten)
#Classes ‘data.table’ and 'data.frame': 42 obs. of 3 variables:
# $ LPD : num 573.57 323.33 113.36 3.05 204.72 ...
# $ variable: Factor w/ 3 levels "WC","ASL","TS": 1 1 1 1 1 1 1 1 1 1 ...
# $ value : Factor w/ 12 levels "7101","7102",..: 1 1 2 2 3 3 4 4 4 4 ...
# - attr(*, ".internal.selfref")=<externalptr>
请注意,melt()
已在一个WC
列中收集(或收集)ASL
,TS
和value
列的所有值之后是character
课。
绘图时,ggplot2
隐含地将字符转换为因子,从而使用字母的字母排序顺序。这意味着ASL
的值按21,27,3,4,7的顺序绘制,而不是3,4,7,21,27。
为了保持数据中出现的值的顺序,使用fct_inorder()
包中的方便forcats
函数明确地表达了对因子的强制。
library(ggplot2)
ggplot(molten, aes(x = value, y = LPD)) +
geom_line() +
geom_point() +
facet_wrap(~ variable, scales = "free_x") +
theme_bw()
OP提供了额外的数据。这些可以使用geom_step()
和
ggplot(DT2, aes(x = grp, y = LPD)) + geom_point() + geom_step() +
theme_bw()
请注意,x轴显示grp
为连续比例。
根据comments,OP希望将行作为&#34;步骤行&#34; 。不幸的是,OP没有指定沿x轴准确显示的内容。所以这些是OP可能期望看到的另一种猜测:
DT2[, grp := factor(grp)]
ggplot(DT2, aes(x = seq_len(nrow(DT2)), y = LPD, group = grp, colour = grp)) +
geom_point() + geom_step() +
theme_bw()
请注意,这里的数据点是连续编号的。这些数字显示在x轴上。数据点通过分组步骤功能连接。此外,这些组是用颜色编码的。
如果数据点在每个组中编号,则会产生更紧凑的显示,以便每个组以1开头。
DT2[, rn := factor(rowid(grp))]
ggplot(DT2, aes(x = rn, y = LPD, group = grp, colour = grp)) +
geom_point() + geom_step() +
theme_bw()