2016-11-09 65 views
0

我遇到了精彩的figure,它总结(科学)作者多年来的合作。这张图贴在下面。重现matplotlib中的线图或R

enter image description here

每条垂直线是指单个作者。每条垂直线的开始对应于相关作者收到她的第一个合作者的年份(即,当她变为活动并因此成为协作网络的一部分时)。作者按照他们去年(即2010年)的合作者总数排名。着色表示每位作者的合作者数量多年来(从活跃到2010年)如何增加。

我有一个类似的数据集;而不是作者,我在我的数据集中有关键字。每个数值表示特定年份的期限频率。数据是这样的:

Year Term1 Term2 Term3 Term4 
1966  0  1  1  4 
1967  1  5  0  0 
1968  2  1  0  5 
1969  5  0  0  2 

例如,Term2第一次出现在1967年与频率1,而Term4第一次出现在1966年一年,频率4.完整数据集可here

+1

这并不是很有挑战性。展示你自己的努力并解释你卡在哪里。 – Roland

+1

正如你有自然的箱子(作者ID和年份),我会用热图/ imshow做到这一点。首先用'np.nan'填充它,然后用整数填充值(不清楚如何有小数点的合作者)。然后,只需使用'ax.imshow'作为背景+'ax.plot'来绘制那条画线。 – tacaswell

回答

2

该图看起来相当不错,所以我试图重现它。原来这比我想象的要复杂一点。

df=read.table("test_data.txt",header=T,sep=",") 
#turn O into NA until >0 then keep values 
df2=data.frame(Year=df$Year,sapply(df[,!colnames(df)=="Year"],function(x) ifelse(cumsum(x)==0,NA,x))) 
#turn dataframe to a long format 
library(reshape) 
molten=melt(df2,id.vars = "Year") 
#Create a new value to measure the increase over time: I used a log scale to avoid a few classes overshadowing the others. 
#The "increase" is measured as the cumsum, ave() is used to get cumsum to work with NA's and tapply to group on "variable" 
molten$inc=log(Reduce(c,tapply(molten$value,molten$variable,function(x) ave(x,is.na(x),FUN=cumsum)))+1) 
#reordering of variable according to max increase 
#this dataframe is sorted in descending order according to the maximum increase" 
library(dplyr) 
df_order=molten%>%group_by(variable)%>%summarise(max_inc=max(na.omit(inc)))%>%arrange(desc(max_inc)) 
#this allows to change the levels of variable so that variable is ranked in the plot according to the highest value of "increase" 
molten$variable<-factor(molten$variable,levels=df_order$variable) 
#plot 
ggplot(molten)+ 
    theme_void()+ #removes axes, background, etc... 
    geom_line(aes(x=variable,y=Year,colour=inc),size=2)+ 
    theme(axis.text.y = element_text())+ 
    scale_color_gradientn(colours=c("red","green","blue"),na.value = "white")# set the colour gradient 

给出: enter image description here

不是像你一样的文件,但这是一个开始。