データフレームを変更する必要がなく、直感的で (レイヤーがどのように描画されるかを考えれば)、線が互いに上書きされないソリューションを提案したいと思います。ただし、1 つ問題があります。線種を変更することはできません。その理由がわからないので、誰かが私たちを啓発するためにチャイムを鳴らすことができれば、それは素晴らしいことです.
OPへの簡単な答え:
ggplot(df, aes(x = date, y = value, color = adjuster))+
geom_line(aes(group = 1, colour = adjuster))+
geom_point(aes(group = adjuster, color = adjuster, shape = adjuster))
OP のデータフレームでは、group=1
期間全体にわたるグループを作成するために使用できます。
図で示した例:
# Create data
df <- structure(list(year = c(1990, 2000, 2010, 2020, 2030, 2040),
variable = structure(c(1L, 1L, 1L, 1L, 1L, 1L), .Label = "Something", class = "factor"),
value = c(4, 5, 6, 7, 8, 9), category = structure(c(1L, 1L, 1L,
2L, 2L, 2L), .Label = c("Observed", "Projected"), class = "factor")), .Names = c("year",
"variable", "value", "category"), row.names = c(NA, 6L), class = "data.frame")
# Load library
library(ggplot2)
OP に似た基本的なプロットは、データをinsideと insideのcategory
両方でグループ化し、このアプリケーションでは、線が 2 つのカテゴリ間で 2 つのポイントを「ブリッジ」しないという望ましくない結果をもたらします。geom_point(aes())
geom_line(aes())
# Basic ggplot with geom_point() and geom_line()
p <- ggplot(data = df, aes(x = year, y = value, group = category)) +
geom_point(aes(colour = category, shape = category), size = 4) +
geom_line(aes(colour = category), size = 1)
ggsave(p, file = "ggplot-points-connect_p1.png", width = 10, height = 10)
私の解決策の鍵は、グループ化することですが、内部variable
で色付けすることですcategory
geom_line(aes())
# Modified version to connect the dots "continuously" while preserving color grouping
p <- ggplot(data = df, aes(x = year, y = value)) +
geom_point(aes(group = category, colour = category, shape = category), size = 4) +
geom_line(aes(group = variable, colour = category), size = 1)
ggsave(p, file = "ggplot-points-connect_p2.png", width = 10, height = 10)
ただし、悲しいことに、このアプローチでは、現在のところ、線種を制御することはできません。
ggplot(data = df, aes(x = year, y = value)) +
geom_point(aes(group = category, colour = category, shape = category), size = 4) +
geom_line(aes(group = variable, colour = category), linetype = "dotted", size = 1)
## Error: geom_path: If you are using dotted or dashed lines, colour, size and linetype must be constant over the line
備考: 私は別のデータフレームを使用しています。これは、自分が行っていたことからコピーして貼り付けているため、この質問にアクセスしたためです。この方法で画像をアップロードできます。