码迷,mamicode.com
首页 > 其他好文 > 详细

蜀汉英雄传部分人物可视化

时间:2020-06-15 11:58:20      阅读:68      评论:0      收藏:0      [点我收藏+]

标签:txt   nis   手写   index   自己   sha   identity   name   src   

蜀汉英雄传是一款gba游戏,打游戏的过程中搜集了其中的人物数据,但是没有给出人物归属,所以得处理一下。数据见百度网盘:链接: https://pan.baidu.com/s/1TMclLvFsnIRdytuZQPBVxA  提取码:cdrw

 

  • Python处理数据
import pandas as pd
import numpy as np
pd.options.display.max_rows=10

heros=pd.read_excel(‘C:/Users/Administrator/Desktop/University/蜀汉英雄传人物.xlsx‘)
colnames=[‘人物‘,‘武力‘,‘智力‘,‘速度‘,‘武器‘,‘天赋1‘]+[‘天赋‘+str(i) for i in range(2,10)]
heros.columns=colnames

country=pd.read_csv(‘C:/Users/Administrator/Desktop/University/人物归属.txt‘,header=None,sep=‘、‘)
s1= country.iloc[0,:][country.iloc[0,:].notnull()]
country1=pd.DataFrame(list(s1[0]*s1.shape[0]))
s2= country.iloc[1,:][country.iloc[1,:].notnull()]
country2=pd.DataFrame(list(s2[0]*s2.shape[0]))
s3= country.iloc[2,:][country.iloc[2,:].notnull()]
country3=pd.DataFrame(list(s3[0]*s3.shape[0]))

s=pd.concat([s1,s2,s3],axis=0)
own=pd.concat([country1,country2,country3],axis=0)
belong=pd.concat([s,own],axis=1)
belong.columns=[‘人物‘,‘国家‘]

tidy=pd.merge(heros,belong,how=‘inner‘,left_on=[‘人物‘],right_on=[‘人物‘])
tidy=tidy.drop_duplicates()

tidy.to_csv(‘C:/Users/Administrator/Desktop/University/最终数据.csv‘,index=False)
  •  R读取数据并进行可视化

  这里自己动手写一个图层geom_sword(),专门用来画剑。

library(grid)
library(ggplot2)

GeomSword<-ggproto(‘GeomSword‘,Geom,
                   required_aes=c(‘x‘,‘y‘),
                   draw_key=draw_key_polygon,
                   default_aes=aes(fill=‘white‘,handle=‘grey‘,size=0.1,angle=0),
                   
                   draw_panel=function(data,panel_params,coord){
                     coords<-coord$transform(data,panel_params)
                     Body<-lapply(1:nrow(coords),function(i){
                       vp=viewport(x=coords$x[i],y=coords$y[i],
                                   width=coords$size[i],height=coords$size[i]*(1+sqrt(5))/2,
                                   angle=coords$angle[i],
                                   just=c(‘center‘,‘center‘),
                                   default.units=‘native‘)
                       
                       polygonGrob(vp=vp,
                                   gp=grid::gpar(fill=coords$fill[i]),
                                   x=c(1/2,1/3,5/12,7/12,2/3),
                                   y=c(8/9,2/3,1/3,1/3,2/3))

                     })
                     class(Body)<-"gList"
                     
                     Handle<-lapply(1:nrow(coords),function(i){
                       vp=viewport(x=coords$x[i],y=coords$y[i],
                                   width=coords$size[i],height=coords$size[i]*(1+sqrt(5))/2,
                                   angle=coords$angle[i],
                                   just=c(‘center‘,‘center‘),
                                   default.units=‘native‘)
                       
                       polygonGrob(vp=vp,
                                   gp=grid::gpar(fill=coords$handle[i]),
                                   x=c(1/3,1/3,11/24,11/24,
                                       13/24,13/24,2/3,2/3),
                                   y=c(1/3,1/3-1/12,1/3-1/12,1/18,
                                       1/18,1/3-1/12,1/3-1/12,1/3))
                       
                     })
                     
                     class(Handle)<-"gList"
                     ggplot2:::ggname(‘geom_sword‘,gTree(children=gList(Body,Handle)))
                   })
geom_sword<-function(mapping=NULL,data=NULL,
                     stat=‘identity‘,position=‘identity‘,
                     na.rm=FALSE,show.legend=NA,
                     inherit.aes=TRUE,...){
  ggplot2::layer(
    geom=GeomSword,
    data=data,mapping=mapping,
    stat=stat,position=position,
    show.legend=show.legend,
    inherit.aes=inherit.aes,
    params=list(na.rm=na.rm,...)
  )
}

 图层写完后,R读入数据,画图

heros<-read.csv(‘C:/Users/Administrator/Desktop/University/最终数据.csv‘,
                
                header=TRUE,sep=‘,‘,fileEncoding=‘utf-8‘)
ggplot(heros,aes(武力,智力))+
  geom_sword(angle=seq(0,360,length=nrow(heros)),aes(fill=速度))+
  facet_wrap(vars(国家))

 效果如下:

技术图片

先打个草稿,以后再来补充解释吧

蜀汉英雄传部分人物可视化

标签:txt   nis   手写   index   自己   sha   identity   name   src   

原文地址:https://www.cnblogs.com/Enjoy-Respect-9527/p/13129863.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!