ggplot:使用绘制数据框的列
ggplot: plot columns of dataframe using
我在 R 中工作,我遇到了一个问题:(。我有这个数据框,我想使用 ggplot 绘制:
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 -0.8067465 -0.4170181 0.9380890 0.613084937 0.4583916 0.4175951 -0.7183698 -0.3479931 -0.3392734 -0.8516039
2 -0.2893608 -0.8066911 0.1534129 0.008801641 -0.1916244 -0.6729157 0.6154498 0.1914066 0.3660398 0.9019622
3 -0.9536465 0.9645535 -0.6915938 0.328425519 -0.4197832 -0.2064765 -0.4328127 0.7849686 -0.2665250 0.6206650
我需要将每一列绘制到另一列,就像 facet_grid 那样。在 X 轴上,对于每个图,我只需要根据间隔(例如:[-1,1])调整限制,而不是特定的 column/variable。 Y轴工作正常。
我的主要问题是我不知道如何使用列名及其在同一图表中的三个点(或 n 个点)为数据框中的每一列生成每个图。我试过这样的:
ggplot(q12, aes(x = V1, y = row.names(q12))) +
geom_point()+
facet_grid(.~ V1)
生成 this plot and i want some like this.
我知道 V1
必须是列的列表,但我不知道该怎么做。使用 colnames(q12)
不起作用,我需要同一图中的三个点。
在我以前使用 ggplot 的经验中,我有一个 ID 为绘图属性的列。这个案例有点不同,我做了很多研究,但我没有找到任何解决方案。我用melt试过没有结果,可能我不知道它是如何工作的。
如果有人能一步一步地帮助我学习,我将不胜感激。
数据
structure(list(V1 = c(-0.8067465, -0.2893608, -0.9536465), V2 = c(-0.4170181,
-0.8066911, 0.9645535), V3 = c(0.938089, 0.1534129, -0.6915938
), V4 = c(0.613084937, 0.008801641, 0.328425519), V5 = c(0.4583916,
-0.1916244, -0.4197832), V6 = c(0.4175951, -0.6729157, -0.2064765
), V7 = c(-0.7183698, 0.6154498, -0.4328127), V8 = c(-0.3479931,
0.1914066, 0.7849686), V9 = c(-0.3392734, 0.3660398, -0.266525
), V10 = c(-0.8516039, 0.9019622, 0.620665)), .Names = c("V1",
"V2", "V3", "V4", "V5", "V6", "V7", "V8", "V9", "V10"), class = "data.frame", row.names = c("1",
"2", "3"))
你需要做两件事:
- 为您的
y
值添加列(行名不适合放置有意义的信息)
- 将您的数据转换为长格式。
开始吧:
# Add ID column:
q12$id = 1:nrow(q12)
# maybe better for you: q12$id = row.names(q12)
# Change data to long format
## original answer
library(reshape2)
df_long = melt(q12, id.vars = "id")
## more modern approach: use `tidyr::pivot_longer`
# plot data
ggplot(df_long, aes(x = value, y = id)) +
geom_point() +
facet_wrap(~ variable)
我使用了 dput()
:
生成的数据
q12 = structure(list(V1 = c(-0.8067465, -0.2893608, -0.9536465), V2 = c(-0.4170181,
-0.8066911, 0.9645535), V3 = c(0.938089, 0.1534129, -0.6915938
), V4 = c(0.613084937, 0.008801641, 0.328425519), V5 = c(0.4583916,
-0.1916244, -0.4197832), V6 = c(0.4175951, -0.6729157, -0.2064765
), V7 = c(-0.7183698, 0.6154498, -0.4328127), V8 = c(-0.3479931,
0.1914066, 0.7849686), V9 = c(-0.3392734, 0.3660398, -0.266525
), V10 = c(-0.8516039, 0.9019622, 0.620665)), .Names = c("V1",
"V2", "V3", "V4", "V5", "V6", "V7", "V8", "V9", "V10"), row.names = c("1",
"2", "3"), class = "data.frame")
我在 R 中工作,我遇到了一个问题:(。我有这个数据框,我想使用 ggplot 绘制:
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 -0.8067465 -0.4170181 0.9380890 0.613084937 0.4583916 0.4175951 -0.7183698 -0.3479931 -0.3392734 -0.8516039
2 -0.2893608 -0.8066911 0.1534129 0.008801641 -0.1916244 -0.6729157 0.6154498 0.1914066 0.3660398 0.9019622
3 -0.9536465 0.9645535 -0.6915938 0.328425519 -0.4197832 -0.2064765 -0.4328127 0.7849686 -0.2665250 0.6206650
我需要将每一列绘制到另一列,就像 facet_grid 那样。在 X 轴上,对于每个图,我只需要根据间隔(例如:[-1,1])调整限制,而不是特定的 column/variable。 Y轴工作正常。
我的主要问题是我不知道如何使用列名及其在同一图表中的三个点(或 n 个点)为数据框中的每一列生成每个图。我试过这样的:
ggplot(q12, aes(x = V1, y = row.names(q12))) +
geom_point()+
facet_grid(.~ V1)
生成 this plot and i want some like this.
我知道 V1
必须是列的列表,但我不知道该怎么做。使用 colnames(q12)
不起作用,我需要同一图中的三个点。
在我以前使用 ggplot 的经验中,我有一个 ID 为绘图属性的列。这个案例有点不同,我做了很多研究,但我没有找到任何解决方案。我用melt试过没有结果,可能我不知道它是如何工作的。
如果有人能一步一步地帮助我学习,我将不胜感激。
数据
structure(list(V1 = c(-0.8067465, -0.2893608, -0.9536465), V2 = c(-0.4170181,
-0.8066911, 0.9645535), V3 = c(0.938089, 0.1534129, -0.6915938
), V4 = c(0.613084937, 0.008801641, 0.328425519), V5 = c(0.4583916,
-0.1916244, -0.4197832), V6 = c(0.4175951, -0.6729157, -0.2064765
), V7 = c(-0.7183698, 0.6154498, -0.4328127), V8 = c(-0.3479931,
0.1914066, 0.7849686), V9 = c(-0.3392734, 0.3660398, -0.266525
), V10 = c(-0.8516039, 0.9019622, 0.620665)), .Names = c("V1",
"V2", "V3", "V4", "V5", "V6", "V7", "V8", "V9", "V10"), class = "data.frame", row.names = c("1",
"2", "3"))
你需要做两件事:
- 为您的
y
值添加列(行名不适合放置有意义的信息) - 将您的数据转换为长格式。
开始吧:
# Add ID column:
q12$id = 1:nrow(q12)
# maybe better for you: q12$id = row.names(q12)
# Change data to long format
## original answer
library(reshape2)
df_long = melt(q12, id.vars = "id")
## more modern approach: use `tidyr::pivot_longer`
# plot data
ggplot(df_long, aes(x = value, y = id)) +
geom_point() +
facet_wrap(~ variable)
我使用了 dput()
:
q12 = structure(list(V1 = c(-0.8067465, -0.2893608, -0.9536465), V2 = c(-0.4170181,
-0.8066911, 0.9645535), V3 = c(0.938089, 0.1534129, -0.6915938
), V4 = c(0.613084937, 0.008801641, 0.328425519), V5 = c(0.4583916,
-0.1916244, -0.4197832), V6 = c(0.4175951, -0.6729157, -0.2064765
), V7 = c(-0.7183698, 0.6154498, -0.4328127), V8 = c(-0.3479931,
0.1914066, 0.7849686), V9 = c(-0.3392734, 0.3660398, -0.266525
), V10 = c(-0.8516039, 0.9019622, 0.620665)), .Names = c("V1",
"V2", "V3", "V4", "V5", "V6", "V7", "V8", "V9", "V10"), row.names = c("1",
"2", "3"), class = "data.frame")