這類信息圖是怎麼製作的?大概用到些什麼軟體?
可以利用Grasshopper + python配合Elk 做出類似的效果
但我不知道非建築系學生要怎麽做,processing應該也是可以做出一樣的效果
1. 先輸入你需要的曲線範圍 (這邊我隨便自己畫)
2. 輸入GH,並使它轉變成mesh,mesh的格點細分越細越好
(在你電腦跑得動的情況下)
3. 因為我沒有所需相關資訊,就隨機選取mesh上的頂點數個,作為要顯示信息的地區,
一樣以隨機選取的數字讓頂點上移,作為此地區的信息值
(實際應用可以自己輸入數據)
4. 將此數據輸入我自己用python做的電池
5. 完成!
我電池的原理基本上是
a.抓取mesh上被選取的頂點(叫他為中心點)
b.以及他上升後的位移作為矢量,
c. 並將此被選取的頂點依照所需的影響範圍(自己設定),抓取中心點周遭的mesh頂點(周遭點)
d. 周遭點距離中心點的距離反比於周遭點上升的量
以下是電池下載連結
https://www.dropbox.com/sh/zhomkc7s0rk5is5/AAC1CYP76UHmDHKJJGmN0ZQma?dl=0
(第一次使用插入代碼,好酷)
代碼做了一點點的修改,所以會跟電池裡的不一樣
import rhinoscriptsyntax as rs
import random
def MeshVtxAdjacentVtxs (strMesh, index, max):
arrVertices = rs.MeshVertices (strMesh)#get all vertices
arrFaceVertices = rs.MeshFaceVertices(strMesh) #get list of list of index
arrAdjacentVtxs = []
faceList = []
center = arrVertices[index]
tempList =[]
level = 0
tempList.append(index)
if max == 1 :
for arrFace in arrFaceVertices:
for m in range(len(arrFace)):
if arrFace[m] == index :
faceList.append(arrFace)
faceList = CullDuplicates(faceList)
elif max &> 1 :
for i in range(max):
for vertex in tempList :
for arrFace in arrFaceVertices:
for m in range(len(arrFace)):
if arrFace[m] == vertex :
faceList.append(arrFace)
faceList = CullDuplicates(faceList)
for f in faceList:
for v in f:
tempList.append(v)
tempList = CullDuplicates(tempList)
for face in faceList:
for j in range(len(face)):
arrAdjacentVtxs.append(face[j])
arrAdjacentVtxs = CullDuplicates(arrAdjacentVtxs)
return arrAdjacentVtxs
def newMeshVertices(center,index,centerVec,arrVTXS,arrFaceVertices,max,dblStep):
centerPt = arrVTXS[center]
periPt = arrVTXS[index]
level = levelCheck(center,index,arrVTXS,arrFaceVertices,max)
#distance = rs.Distance(centerPt,periPt)
if center == index:
reduce = dblStep
vec = rs.VectorScale(centerVec,reduce)
newPt = rs.PointAdd(periPt, vec)
elif level == max :
newPt = periPt
else:
reduce = (1/(level+1))*dblStep
vec = rs.VectorScale(centerVec,reduce)
newPt = rs.PointAdd(periPt, vec)
print level
return newPt
def levelCheck(center,index,arrVTXS,arrFaceVertices,max):
level = 0
indicator = index
for k in range(max):
if center != indicator and level &<= (max-1):
tempList = []
for face in arrFaceVertices:
for i in range(len(face)):
if face[i] == indicator:
tempList.append(face)
verticesList = []
for face in tempList:
for v in face:
verticesList.append(v)
verticesList = CullDuplicates(verticesList)
if center not in verticesList:
level += 1
disList = []
for m in verticesList:
list = []
vertice = arrVTXS[m]
centerPt = arrVTXS[center]
dis = rs.Distance(centerPt,vertice)
list.append(m)
list.append(dis)
disList.append(list)
disList = sorted(disList , key=lambda vertices : vertices[1])
result = disList[0]
indicator = result[0]
else:
level = level +1
break
if center == index:
level = 0
return level
def CullDuplicates(seq, idfun=None):
# order preserving
if idfun is None:
def idfun(x): return x
seen = {}
result = []
for item in seq:
marker = idfun(item)
if marker in seen: continue
seen[marker] = 1
result.append(item)
return result
def Main(meshInput,attrs,dblStep,max):
arrFaceVertices = rs.MeshFaceVertices(meshInput) #get a list of list of indexs
vectorList = []
distanceList = []
arrAttractors = []
ptsOnMesh = []
arrVTXS = rs.MeshVertices (meshInput)
for attr in attrs:
pt = rs.PointCoordinates(attr)
arrAttractors.append(pt) # a list of attactor points
ptOnMesh = rs.PointArrayClosestPoint(arrVTXS,pt)
ptsOnMesh.append(ptOnMesh)
vec = rs.VectorCreate(pt,arrVTXS[ptOnMesh])
len = rs.VectorLength(vec)
vectorList.append(vec)
distanceList.append(len)
arrNEWVTXS = arrVTXS[:]
count = 0
for ptOnMesh in ptsOnMesh:
ClosestAttIndex = rs.PointArrayClosestPoint(arrAttractors,arrVTXS[ptOnMesh])
arrAdjacentVtxs = MeshVtxAdjacentVtxs(meshInput, ptOnMesh, max)
arrVector = vectorList[count]
distance = distanceList[count]
#distance = rs.Distance(arrAttractors[ClosestAttIndex],arrVTXS[ptOnMesh])
#arrVector = [0,0,distance]
for vertex in arrAdjacentVtxs:
arrNEWVTXS[vertex] = newMeshVertices(ptOnMesh,vertex,arrVector,arrVTXS,arrFaceVertices,max,dblStep)
count +=1
strNewMesh = rs.AddMesh(arrNEWVTXS,arrFaceVertices)
#rs.DeleteObject(meshInput)
#meshInput = strNewMesh
return strNewMesh
strNewMesh = Main(meshInput,attrs,dblStep,max)
a = strNewMesh
採用 @Vincent Ku的邏輯來一個不用python的版本:
grasshopper文件鏈接:
https://www.dropbox.com/s/nmmv1imz6u2qvfd/Mesh%20Peaks.gh?dl=0
在平滑這一步建議用kangroo物理模擬一下,形態上更接近示例圖片。我在家用的筆記本,沒裝kangroo,所以簡單用weaving bird平滑了一下。
當然正解應是用GIS,可惜我不會。arcgis 10.3好像就可以
------------------------------------------------------------------------------------
原答案
我是用arcgis做的,理論上可以實現,我做的就是難看。w(?Д?)w
鑒於我做的那麼難看,我就不再放圖了。(っ*′Д`)っ
講一下大體思路
一般的統計數據,基本是shapefile點數據。所以我們需要先將shapefile數據變為TIN數據,然後在將TIN數據轉換為柵格數據。
這樣基本數據就搞定了。然後就是使用三維軟體顯示出來就好了,arcscene,arcglobe都可以。然而我卻用了cityengine。╮(╯▽╰)╭
好吧,把texture換一個好看一點,就會好看很多。(?????) ??
就這樣。
Arcgis就可以做,軟體自帶小比例尺地圖,疊加相應的屬性信息就可以。不過三維顯示效果可能需要工具來實現
公眾號:外企er
微博:外企er英語
持續更新,歡迎關注。
----------------------------------------
在外企工作,面對global 客戶,ppt和信息圖是必備技能。信息圖其實就是information+graphic, 可以另data的呈現更加容易被理解。是一種快速傳遞數據,信息的方式,並且信息圖可以讓你的數據更佳美觀以及靈活的以不同方式,甚至是一種有趣的方式呈現在audience or client 面前,所以,這種技能必須get,下面幫大家分享三個比較常用的信息圖軟體。
Definition: An infographic is a representation of information in a graphic format designed to make the data easily understandable at a glance. People use infographics to quickly communicate a message, to simplify the presentation of large amounts of data, to see data patterns and relationships, and to monitor changes. In the enterprise, infographics are used by all levels of management for high-level views of data. It includes bar graphs, pie charts, histograms, line charts, tree diagrams, mind maps and network diagrams. Such business intelligence software are often used in our daily work.
1.Power BI: Power BI could transform data into rich visuals for you to collect and organize so you can focus on what matters to you
2. canva: canva makes design simple for everyone. Create designs for Web or print: blog graphics, presentations, Facebook covers, flyers, posters, invitations.
3. Visme: Visme helps anyone tell better stories and translate ideas into professional presentations, Infographics and other forms of Visual Content.
4. infogr.am: http://Infogr.am is the data visualization product that brings out the best in your data.
隨手百度了一下,
這是時代周刊的一幅 Infographics,展示了美國各個地區人口密度。
樓主圖的來源應該是以這張原始的人口密度圖為基礎,進行*#%#@,一通調整之後的結果啦~
好啦,線索就提供到這裡了^^
坐等專業大大來解答。
1990年美國人口數據(Understanding USA / http://thoughtformdesign.com / Via http://reddit.com)
2000年美國人口普查局的數據(Joe Lertola / Time / http://understandingusa.com/ Via http://visualizingeconomics.com)我想問,這特么是什麼軟體渲染的??
我也是照著這個美國人口密度圖做的,撐死做到這個份上:
原諒我不能上傳整個圖片,因為報告還在寫T^T...
可以對比一下原圖,簡直不能忍:
。。。
過程就是:某gis做底圖,加入密度數據,和底圖一起倒入某scence
但問題是,三維不能添加地區名稱,也沒法做出圖例。可能我還沒搞懂。
據某教程說,最後還要用illustrator渲染。我還沒學會。。就這樣。。
你試試ArcGIS之類的 GIS軟體 ,像是DEM 每個城市的高程值是人口密度
推薦一款好用的信息圖製作工具:
canvas圖片設計平台(http://canvas.qq.com),新媒體運營利器!平台預置大量的模板和素材,操作簡單沒有門檻,只需要選擇一個模板、通過簡單的拖拽操作就可以製作圖片。目前提供的模板類型包括公眾號文章封面圖、信息圖和活動推廣的海報、邀請函、會議通知等等。
http://weixin.qq.com/r/FDvC2qrElvfpre65924G (二維碼自動識別)
有個excel插件可以實現類似效果
學習。
MATLAB.
大學的時候參加數學建模大賽用MATLAB 做過簡單的效果,實際上就是根據散點數據得到的曲面圖.
具體做法,首先需要知道二維坐標上每個點的高度值,然後在用二維線性插值(還是非線性插值,真的忘了囧..)生成更精細的數據.
然後,需要把散點的數據經過三維擬合,得到描述這些點的曲面方程.
最後用繪圖工具把該函數繪製渲染出來就可以了
這是 MATLAB 官網的介紹視頻的截圖.
以及原網址鏈接: Curve Fitting Toolbox
沒記錯的話應是new york times的 他們有一個data journalism team, 這個data source 不是dynamic refreshing的 所以 就held在他們現有的web server和data store 至於visualization,這個事d3.js
推薦閱讀:
※國雙數據中心的《2015 汽車行業報告》中的圖表是用什麼軟體做出來的?
※怎樣提高數據敏感性和數據的分析能力?
※互聯網分析師是幹什麼的?
※如何通俗易懂地解釋「協方差」與「相關係數」的概念?
※初學matlab,有什麼學習路線可以推薦?
TAG:數據分析 | 信息圖Infographic | 數據可視化 |