【发布时间】:2019-07-09 08:45:56
【问题描述】:
我希望展示从 2017 年到 2019 年队列数量变化之间的差异,我遇到了一个图表,该图表是从我想在 R 中创建的演示文稿中发送的,因为我觉得这将是最好的视觉效果显示我的数据。
我目前已尝试使用该站点的示例数据从以下 URL 创建斜率图:
http://r-statistics.co/Top50-Ggplot2-Visualizations-MasterList-R-Code.html#Slope%20Chart
这给了我图表内的 2 轴,但它现在试图了解我如何在两者之间添加颜色以使其看起来像附加的图像。我还查看了面积图的工作原理,我查看的 URL 之一如下:
https://www.displayr.com/how-to-make-an-area-chart-in-r/
因为我的图像似乎是面积图和斜率图的混合体,所以我想我可以尝试看看面积图中是否有任何关于如何填充颜色的代码,但这只是向我展示了它用于填充差异的属性。
当我从站点复制数据时,我使用的代码来自上述 URL (http://r-statistics.co/Top50-Ggplot2-Visualizations-MasterList-R-Code.html#Slope%20Chart),但我一直在努力进行任何更改以使其看起来像附加的图像。
如果有人能建议我是否走正确的路线,或者我所附的图表可以使用 R 中的包创建,我将不胜感激,因为我以前没有遇到或看到过这种视觉效果。我将不胜感激。
我创建的代码(全部归功于http://r-statistics.co/)
library(ggplot2)
library(scales)
theme_set(theme_classic())
# prep data
df <- read.csv("https://raw.githubusercontent.com/selva86/datasets/master/gdppercap.csv")
colnames(df) <- c("continent", "1952", "1957")
left_label <- paste(df$continent, round(df$`1952`),sep=", ")
right_label <- paste(df$continent, round(df$`1957`),sep=", ")
df$class <- ifelse((df$`1957` - df$`1952`) < 0, "red", "green")
# Plot
p <- ggplot(df) + geom_segment(aes(x=1, xend=2, y=`1952`, yend=`1957`, col=class), size=.75, show.legend=F) +
geom_vline(xintercept=1, linetype="dashed", size=.1) +
geom_vline(xintercept=2, linetype="dashed", size=.1) +
scale_color_manual(labels = c("Up", "Down"),
values = c("green"="#00ba38", "red"="#f8766d")) + # color of lines
labs(x="", y="Mean GdpPerCap") + # Axis labels
xlim(.5, 2.5) + ylim(0,(1.1*(max(df$`1952`, df$`1957`)))) # X and Y axis limits
# Add texts
p <- p + geom_text(label=left_label, y=df$`1952`, x=rep(1, NROW(df)), hjust=1.1, size=3.5)
p <- p + geom_text(label=right_label, y=df$`1957`, x=rep(2, NROW(df)), hjust=-0.1, size=3.5)
p <- p + geom_text(label="Time 1", x=1, y=1.1*(max(df$`1952`, df$`1957`)), hjust=1.2, size=5) # title
p <- p + geom_text(label="Time 2", x=2, y=1.1*(max(df$`1952`, df$`1957`)), hjust=-0.1, size=5) # title
# Minify theme
p + theme(panel.background = element_blank(),
panel.grid = element_blank(),
axis.ticks = element_blank(),
axis.text.x = element_blank(),
panel.border = element_blank(),
plot.margin = unit(c(1,2,1,2), "cm"))
结果:
【问题讨论】:
-
我建议您在此处添加数据和代码以及结果和您尝试修改的内容。这可能会吸引更多的人来提供帮助。请注意,当您尝试显示比例时(至少是图片上显示的),示例中的数据会查看绝对值。
-
谢谢kath,我已经添加了数据、代码和结果。
标签: r data-visualization