将一堆线条图绘制在一起,但我只想在它们之间全部绘制之后专门为它们着色(以便可视化我的'目标'随着时间的推移而能够查看其后面的其他群众。所以这个例子就像100线图一样,但我想专门为其中的5个或10个颜色进行讨论,以讨论其他90个灰度级的趋势。
以下帖子有一个非常好的图像,我想要复制,但骨骼上的肉稍多,,除了我想要在这3个灰色背后的许多线条,但这3个是我突出显示的城市我想在前景中看到,按照说法。
我的原始数据如下:
# The unique identifier is a City-State combo,
# there can be the same cities in 1 state or many.
# Each state's year ranges from 1:35, but may not have
# all of the values available to us, but some are complete.
r1 <- c("city1" , "state1" , "year" , "population" , rnorm(11) , "2")
r2 <- c("city1" , "state2" , "year" , "population" , rnorm(11) , "3")
r3 <- c("city2" , "state1" , "year" , "population" , rnorm(11) , "2")
r4 <- c("city3" , "state2" , "year" , "population" , rnorm(11) , "1")
r5 <- c("city3" , "state2" , "year" , "population" , rnorm(11) , "7")
df <- data.frame(matrix(nrow = 5, ncol = 16))
df[1,] <- r1
df[2,] <- r2
df[3,] <- r3
df[4,] <- r4
df[5,] <- r5
names(df) <- c("City", "State", "Year", "Population", 1:11, "Cluster")
head(df)
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
# City | State | Year | Population | ... 11 Variables ... | Cluster #
# ----------------------------------------------------------------------#
# Each row is a city instance with these features ... #
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
但我认为以不同的方式查看数据可能会更好,所以我也采用以下格式。我不确定哪个更适合这个问题。
cols <- c(0:35)
rows <- c("unique_city1", "unique_city2","unique_city3","unique_city4","unique_city5")
r1 <- rnorm(35)
r2 <- rnorm(35)
r3 <- rnorm(35)
r4 <- rnorm(35)
r5 <- rnorm(35)
df <- data.frame(matrix(nrow = 5, ncol = 35))
df[1,] <- r1
df[2,] <- r2
df[3,] <- r3
df[4,] <- r4
df[5,] <- r5
names(df) <- cols
row.names(df) <- rows
head(df)
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
# Year1 Year2 .......... Year 35 #
# UniqueCityState1 VAL NA .......... VAL #
# UniqueCityState2 VAL VAL .......... NA #
# . #
# . #
# . #
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
我尝试使用melt
将数据转换为ggplot
可以接受并随时间绘制每个城市的格式,但似乎没有任何效果。此外,我已经尝试创建自己的函数来遍历我的每个独特的城市状态组合到stack ggplots
,其中有关于该主题的相当多的研究可用,但还没有。我不确定如何找到这些独特的城市状态对,并随着时间的推移绘制它们的集群值或任何数值。或者也许我正在寻找的是不可能的,我不确定。
思想?
> head(df)
city state year population stat1 stat2 stat3 stat4 stat5
1 BESSEMER 1 1 31509 0.3808436 0 0.63473928 2.8563268 9.5528262
2 BIRMINGHAM 1 1 282081 0.3119671 0 0.97489728 6.0266377 9.1321287
3 MOUNTAIN BROOK 1 1 18221 0.0000000 0 0.05488173 0.2744086 0.4390538
4 FAIRFIELD 1 1 12978 0.1541069 0 0.46232085 3.0050855 9.8628448
5 GARDENDALE 1 1 7828 0.2554931 0 0.00000000 0.7664793 1.2774655
6 LEEDS 1 1 7865 0.2542912 0 0.12714558 1.5257470 13.3502861
stat6 stat6 stat7 stat8 stat9 cluster
1 26.976419 53.54026 5.712654 0 0.2856327 9
2 35.670605 65.49183 11.982374 0 0.4963113 9
3 6.311399 21.40387 1.426925 0 0.1097635 3
4 21.266759 68.11527 11.480968 0 1.0787487 9
5 6.770567 23.24987 3.960143 0 0.0000000 3
6 24.157661 39.79657 4.450095 0 1.5257470 15
agg
1 99.93970
2 130.08675
3 30.02031
4 115.42611
5 36.28002
6 85.18754
最终我需要以row.names
,1:35为col.names
的独特城市形式,如果该年份存在,则每个单元格内的值为agg
或{ {1}}如果不是。我再次确信这是可能的,我只是无法获得一个好的解决方案,而且我目前的方式是不稳定的。
答案 0 :(得分:2)
如果我理解你的问题,你想用一种颜色绘制所有的线条,然后用几种不同的颜色绘制几条线条。您可以使用ggplot2
,在两个数据框上调用geom_line
两次。第一次绘制所有城市数据而不将线条映射到颜色。第二次绘制目标城市的子集并将颜色映射到颜色。您需要重新组织原始数据框并对目标城市的数据框进行子集化。在以下代码中,我使用tidyr
和dplyr
来处理数据框。
### Set.seed to improve reproducibility
set.seed(123)
### Load package
library(tidyr)
library(dplyr)
library(ggplot2)
### Prepare example data frame
r1 <- rnorm(35)
r2 <- rnorm(35)
r3 <- rnorm(35)
r4 <- rnorm(35)
r5 <- rnorm(35)
df <- data.frame(matrix(nrow = 5, ncol = 35))
df[1,] <- r1
df[2,] <- r2
df[3,] <- r3
df[4,] <- r4
df[5,] <- r5
names(df) <- 1:35
df <- df %>% mutate(City = 1:5)
### Reorganize the data for plotting
df2 <- df %>%
gather(Year, Value, -City) %>%
mutate(Year = as.numeric(Year))
gather
函数将df
作为第一个参数。它将创建名为key
的{{1}}列,该列将存储年份编号。年份编号是Year
数据框中除df
列以外的每列的列名称。 City
函数还会创建一个名为gather
的列,该列将存储除Value
列之外的df
数据框中每列的所有数值。最后,City
列不会涉及此过程,因此请使用City
告诉-City
函数&#34;不要转换gather
列中的数据&#34 ;
City
可以在此处看到结果图:https://dl.dropboxusercontent.com/u/23652366/example_plot.png