用R/ggplot复制数据可视化
使用用R/ggplot复制数据可视化,r,ggplot2,R,Ggplot2,使用ggplot2 上下文: 我一直在寻求使数据可视化更具吸引力/美感,特别是对于非数据人员,他们是我工作的大多数人(如营销人员、管理层等利益相关者)——我注意到,当可视化看起来像学术出版物质量时(标准ggplot2美感)他们倾向于认为自己不理解它,也不费心去尝试,一开始就破坏了可视化的全部目的。然而,当它看起来更图形化时(就像你在网站或营销材料上看到的一样),他们会集中精力并尝试理解可视化,通常是成功的。通常,我们会在这些类型的可视化中进行最有趣的讨论,所以这是我的最终目标 可视化: 这是我
ggplot2
上下文:我一直在寻求使数据可视化更具吸引力/美感,特别是对于非数据人员,他们是我工作的大多数人(如营销人员、管理层等利益相关者)——我注意到,当可视化看起来像学术出版物质量时(标准
ggplot2
美感)他们倾向于认为自己不理解它,也不费心去尝试,一开始就破坏了可视化的全部目的。然而,当它看起来更图形化时(就像你在网站或营销材料上看到的一样),他们会集中精力并尝试理解可视化,通常是成功的。通常,我们会在这些类型的可视化中进行最有趣的讨论,所以这是我的最终目标
可视化:
这是我在一些营销手册上看到的关于geo网络流量的设备份额的东西,尽管它实际上有点忙,也不清楚,但它比我在标准中创建的类似堆叠条形图更能引起共鸣——我一点也不知道如何在ggplot2
中复制类似的东西,任何尝试都将不胜感激!下面是一些要在数据中使用的示例数据。表:
structure(list(country = c("Argentina", "Argentina", "Argentina",
"Brazil", "Brazil", "Brazil", "Canada",
"Canada", "Canada", "China", "China",
"China", "Japan", "Japan", "Japan", "Spain",
"Spain", "Spain", "UK", "UK", "UK", "USA",
"USA", "USA"),
device_type = structure(c(1L, 2L, 3L, 1L, 2L, 3L, 1L,
2L, 3L, 1L, 2L, 3L, 1L, 2L,
3L, 1L, 2L, 3L, 1L, 2L, 3L,
1L, 2L, 3L),
class = "factor",
.Label = c("desktop",
"mobile",
"multi")),
proportion = c(0.37, 0.22, 0.41, 0.3, 0.31, 0.39,
0.35, 0.06, 0.59, 0.19, 0.2, 0.61,
0.4, 0.18, 0.42, 0.16, 0.28, 0.56,
0.27, 0.06, 0.67, 0.37, 0.08, 0.55)),
.Names = c("country", "device_type", "proportion"),
row.names = c(NA, -24L),
class = c("data.table", "data.frame"))
您可以尝试使用“gg”包及其相应的“geom”
你也可以考虑<代码> GoGoLave< /Cord>
library(googleVis)
dat <- structure(list(country = c("Argentina", "Argentina", "Argentina",
"Brazil", "Brazil", "Brazil", "Canada",
"Canada", "Canada", "China", "China",
"China", "Japan", "Japan", "Japan", "Spain",
"Spain", "Spain", "UK", "UK", "UK", "USA",
"USA", "USA"),
device_type = structure(c(1L, 2L, 3L, 1L, 2L, 3L, 1L,
2L, 3L, 1L, 2L, 3L, 1L, 2L,
3L, 1L, 2L, 3L, 1L, 2L, 3L,
1L, 2L, 3L),
class = "factor",
.Label = c("desktop",
"mobile",
"multi")),
proportion = c(0.37, 0.22, 0.41, 0.3, 0.31, 0.39,
0.35, 0.06, 0.59, 0.19, 0.2, 0.61,
0.4, 0.18, 0.42, 0.16, 0.28, 0.56,
0.27, 0.06, 0.67, 0.37, 0.08, 0.55)),
.Names = c("country", "device_type", "proportion"),
row.names = c(NA, -24L),
class = c("data.table", "data.frame"))
link_order <- unique(dat$country)
node_order <- unique(as.vector(rbind(dat$country, as.character(dat$device_type))))
link_cols <- data.frame(color = c('#ffd1ab', '#ff8d14', '#ff717e', '#dd2c40', '#d6b0ea',
'#8c4fab','#00addb','#297cbe'),
country = c("UK", "Canada", "USA", "China", "Spain", "Japan", "Argentina", "Brazil"),
stringsAsFactors = F)
node_cols <- data.frame(color = c("#ffc796", "#ff7100", "#ff485b", "#d20000",
"#cc98e6", "#6f2296", "#009bd2", "#005daf",
"grey", "grey", "grey"),
type = c("UK", "Canada", "USA", "China", "Spain", "Japan",
"Argentina", "Brazil", "multi", "desktop", "mobile"))
link_cols2 <- sapply(link_order, function(x) link_cols[x == link_cols$country, "color"])
node_cols2 <- sapply(node_order, function(x) node_cols[x == node_cols$type, "color"])
actual_link_cols <- paste0("[", paste0("'", link_cols2,"'", collapse = ','), "]")
actual_node_cols <- paste0("[", paste0("'", node_cols2,"'", collapse = ','), "]")
opts <- paste0("{
link: { colorMode: 'source',
colors: ", actual_link_cols ," },
node: {colors: ", actual_node_cols ,"}}")
Sankey <- gvisSankey(dat,
from = "country",
to = "device_type",
weight = "proportion",
options = list(height = 500, width = 1000, sankey = opts))
plot(Sankey)
library(googleVis)
dat啊,就是这样-冲积和桑基图。。在你上面的链接之后,我找到了我想要的全部细节(包括ggaluvilla
),这真是太棒了!需要如何修改代码以适应多级sankey?@tangerine7199您基本上需要定义更多链接(在本例中-移动到?和桌面到?等)