使用 R 绘制多系列 Bar/Dot 图
Graphing a Multi-Series Bar/Dot Plot with R
所以我在创建我拥有的这个数据集的点 plot/bar 图时遇到了问题。我的数据集看起来像 this. I want an output that looks like this。但是,通过 ggplot 的 geom_bar() 只会给我计数,不会从 table 中获取单独的小数值。我也尝试过使用 Plotly,但它似乎不能很好地扩展到多个玩家的情节。
我已经设置了一个包含 200 多个变量的更大的数据框。我正在尝试做一些可以在该数据框中搜索特定玩家的东西,然后从中创建一个情节。因此,我理想地寻找可以轻松处理 5-10 个不同系列的东西。
如有任何帮助,我们将不胜感激。
谢谢!
这非常简单,关键是将您的数据从当前的宽格式转换为更适合在 R 中绘图的长格式。并使用 geom_point
而不是 geom_bar
。
首先,一些可重现的示例数据(如果您 post 在这里提出另一个问题,您应该在您的问题中再次使用这些数据,让其他人更容易帮助您):
library(ggplot2)
library(reshape2)
dataset <- data.frame(
PlayerName = letters[1:6],
IsolationPossG = runif(6),
HandoffPossG = runif(6),
OffScreenPossG = runif(6)
)
这是您当前的宽格式数据:
dataset
PlayerName IsolationPossG HandoffPossG OffScreenPossG
1 a 0.78184751 0.939183520 0.74461784
2 b 0.06557433 0.745699149 0.96540299
3 c 0.21105745 0.753534811 0.02977973
4 d 0.41271918 0.555475622 0.18317886
5 e 0.38153149 0.246292074 0.74862310
6 f 0.89946318 0.008412111 0.53195933
现在我们转换成长格式:
molten <- melt(
dataset,
id.vars = "PlayerName",
measure.vars = c("IsolationPossG", "HandoffPossG", "OffScreenPossG")
)
这是长格式,对于在 R 中绘图更有用:
head(molten)
PlayerName variable value
1 a IsolationPossG 0.78184751
2 b IsolationPossG 0.06557433
3 c IsolationPossG 0.21105745
4 d IsolationPossG 0.41271918
5 e IsolationPossG 0.38153149
6 f IsolationPossG 0.89946318
绘制方法如下:
ggplot(molten, aes(x = variable, y = value, colour = PlayerName)) +
geom_point(size = 4) +
theme_bw() +
theme(legend.position="bottom",legend.direction="horizontal")
给出:
h/t how to have multple labels in ggplot2 for bubble plot
如果您希望数据点的形状因名称而异,如您的示例图片所示(但在两个情节的美学上让玩家名称变量似乎太过分了):
ggplot(molten, aes(x = variable, y = value, shape = PlayerName, colour = PlayerName)) +
geom_point(size = 4) +
theme_bw() +
theme(legend.position="bottom",legend.direction="horizontal")
所以我在创建我拥有的这个数据集的点 plot/bar 图时遇到了问题。我的数据集看起来像 this. I want an output that looks like this。但是,通过 ggplot 的 geom_bar() 只会给我计数,不会从 table 中获取单独的小数值。我也尝试过使用 Plotly,但它似乎不能很好地扩展到多个玩家的情节。
我已经设置了一个包含 200 多个变量的更大的数据框。我正在尝试做一些可以在该数据框中搜索特定玩家的东西,然后从中创建一个情节。因此,我理想地寻找可以轻松处理 5-10 个不同系列的东西。
如有任何帮助,我们将不胜感激。
谢谢!
这非常简单,关键是将您的数据从当前的宽格式转换为更适合在 R 中绘图的长格式。并使用 geom_point
而不是 geom_bar
。
首先,一些可重现的示例数据(如果您 post 在这里提出另一个问题,您应该在您的问题中再次使用这些数据,让其他人更容易帮助您):
library(ggplot2)
library(reshape2)
dataset <- data.frame(
PlayerName = letters[1:6],
IsolationPossG = runif(6),
HandoffPossG = runif(6),
OffScreenPossG = runif(6)
)
这是您当前的宽格式数据:
dataset
PlayerName IsolationPossG HandoffPossG OffScreenPossG
1 a 0.78184751 0.939183520 0.74461784
2 b 0.06557433 0.745699149 0.96540299
3 c 0.21105745 0.753534811 0.02977973
4 d 0.41271918 0.555475622 0.18317886
5 e 0.38153149 0.246292074 0.74862310
6 f 0.89946318 0.008412111 0.53195933
现在我们转换成长格式:
molten <- melt(
dataset,
id.vars = "PlayerName",
measure.vars = c("IsolationPossG", "HandoffPossG", "OffScreenPossG")
)
这是长格式,对于在 R 中绘图更有用:
head(molten)
PlayerName variable value
1 a IsolationPossG 0.78184751
2 b IsolationPossG 0.06557433
3 c IsolationPossG 0.21105745
4 d IsolationPossG 0.41271918
5 e IsolationPossG 0.38153149
6 f IsolationPossG 0.89946318
绘制方法如下:
ggplot(molten, aes(x = variable, y = value, colour = PlayerName)) +
geom_point(size = 4) +
theme_bw() +
theme(legend.position="bottom",legend.direction="horizontal")
给出:
h/t how to have multple labels in ggplot2 for bubble plot
如果您希望数据点的形状因名称而异,如您的示例图片所示(但在两个情节的美学上让玩家名称变量似乎太过分了):
ggplot(molten, aes(x = variable, y = value, shape = PlayerName, colour = PlayerName)) +
geom_point(size = 4) +
theme_bw() +
theme(legend.position="bottom",legend.direction="horizontal")