我正在尝试使用ggplot在R中重新创建Pólya骨灰盒模型(https://en.wikipedia.org/wiki/Pólya_urn_model)。该模型基本上以“urn”中的1个白色和1个黑色球开始,随机选择一个球并将其与相同颜色的球一起放回。我在R中这样做可以说10次迭代(所以10次取出一个球并将其与另一个球从同一颜色一起放回)。我这样说了5次。因此,我得到一个5列(=每次运行=)和10行(=迭代)的数据帧。
What I want is to illustrate is this但是这张照片显然有更多的试验和迭代。
到目前为止我所拥有的是一个数据框,其中每列是每个试验/运行中的白色球的一部分,我想说明每次迭代的比例如何变化。我希望每次运行时都单独显示,所以我希望每次运行都有不同的颜色。
我查看了无数类似的问题,但未找到答案。我认为这是因为我的数据框现在有5列,但是当我重新形成它时,我只得到一个比例的列,然后我会得到一个代码,说明它属于哪一列 - 但在这种情况下,ggplot只绘制一个4种颜色的线条。
my data frame looks like this:
V1 V2 V3 V4 id
1 0.3333333 0.33333333 0.33333333 0.3333333 1
2 0.5000000 0.25000000 0.25000000 0.2500000 2
3 0.4000000 0.20000000 0.20000000 0.4000000 3
4 0.3333333 0.16666667 0.16666667 0.3333333 4
5 0.2857143 0.14285714 0.14285714 0.2857143 5
6 0.2500000 0.12500000 0.12500000 0.3750000 6
7 0.2222222 0.11111111 0.11111111 0.3333333 7
8 0.2000000 0.10000000 0.10000000 0.3000000 8
9 0.1818182 0.09090909 0.09090909 0.2727273 9
10 0.2500000 0.08333333 0.08333333 0.2500000 10
但为了使这里的测试代码更容易:
V1 <- rnorm(10, 0.5, 0.1)
V2 <- rnorm(10, 0.5, 0.1)
V3 <- rnorm(10, 0.5, 0.1)
V4 <- rnorm(10, 0.5, 0.1)
df <- data.frame(V1, V2, V3, V4)
我的ggplot代码如下:
library(reshape2)
df$id = row.names(df) # add id to each row
df_long = melt(df, id.vars = "id") # reshape the data into long format
这第一个版本仅描述了点
ggplot(df_long, aes(x = value, y = id, color = variable)) +
geom_point()
并且这个版本以某种方式让线条“混乱”,我无法弄清楚原因。
ggplot() + geom_line(data = df_long, aes(x = value, y = id, color = variable, group = variable)) + xlab("x axis") + ylab("y axis")
任何帮助都会受到赞赏,到目前为止,我一直在努力奋斗,并且无法取得任何重大突破。
编辑:'混乱'我的意思是,不是每次运行绘制一行(我想得到的),数据点似乎失去了他们属于哪个试运行。因此,不是每次运行/试用获得一条线,而是获得更多线路,其中一些线路仅连接2-3个点并且经常连接来自不同运行的点。我希望我的解释足够清楚。答案 0 :(得分:2)
如果我理解正确,这似乎可以正确地连接所有这些。请检查这是否正确。
df$id = 1:nrow(df)
final_data <- melt(df, id='id')
names(final_data) <- c('id', 'func', 'value')
ggplot() + geom_line(data = final_data, aes(x = id, y = value, color = func, group = func), size = 1)
输出:
V1 V2 V3 V4 id
1 0.4656275 0.4846357 0.4613710 0.5885883 1
2 0.4312952 0.4929042 0.5499502 0.5133333 2
3 0.5890201 0.4652452 0.5598206 0.4789956 3
4 0.7108441 0.4143140 0.5738660 0.4073124 4
5 0.6374072 0.6671785 0.5111608 0.4475132 5
6 0.4797948 0.6191391 0.5423101 0.4472512 6
7 0.5868793 0.5601147 0.4369428 0.5696494 7
8 0.5169970 0.4398982 0.5137524 0.3923140 8
9 0.3960616 0.3552303 0.4174657 0.4449402 9
10 0.5222120 0.5028562 0.5760920 0.4310323 10
答案 1 :(得分:1)
使用df
你可以做类似的事情:
library(tidyverse)
# I use 'gather' instead of 'melt'
df_long = df %>%
mutate(id = 1:nrow(.)) %>%
gather(id.vars, values, -id)
df_long %>%
ggplot(aes(x = values, y = id, group = id.vars, color = id.vars)) +
geom_line(size = 1)
]
如果您set.seed(...)
我们可以复制您的df
对象。