python向js傳參

標(biāo)題說的可能不是很清楚兔朦。事情是這樣的,最近在用python做一個(gè)數(shù)據(jù)的處理及可視化的項(xiàng)目磨确,但是數(shù)據(jù)比較復(fù)雜沽甥,用python包繪圖無法滿足我們的全部功能,于是想要用D3.js來進(jìn)行可視化及交互乏奥。而為了其他人使用方便摆舟,我打算運(yùn)行完python程序就可以在本地生成一個(gè)html文件并自動(dòng)打開。當(dāng)然邓了,要是想這個(gè)功能可以用python搭一個(gè)服務(wù)端恨诱。但在我這個(gè)功能下是完全沒有必要的。

話不多說驶悟,由于項(xiàng)目的數(shù)據(jù)不可能拿來分享胡野,我這里用的是d3官網(wǎng)上的一個(gè)數(shù)據(jù)材失。這里做了一個(gè)demo痕鳍,供大家參考。結(jié)構(gòu)如下:

demo/             
    demo.py          
    plot.js    
    demo.css  
    demo.json

然后只要運(yùn)行一下demo.py就會(huì)打開一個(gè)html頁面龙巨。具體代碼看這里笼呆。https://github.com/peakhell/demo
其實(shí)關(guān)鍵的地方只有一個(gè)

def plot_net(graph, filename):
    with open("plot.js", "r") as f:
        data_func = f.read()
    with open(filename, "w") as f:
        f.write(''.join([
            '<html>',
            '<head><meta charset="utf-8" /></head>',
            "<script src='https://d3js.org/d3.v4.min.js'></script>",
            "<link href='demo.css' rel='stylesheet' type='text/css'/>",
            '<body>',
            "<div id='draw'>",
            "<svg></svg>",
            "</div>"
            "<script>",
            data_func,
            "read_data({});".format(graph),
            "</script>"
        ]))
    webbrowser.open_new_tab(filename)

注意看上面的函數(shù), graph是數(shù)據(jù)旨别,在我這個(gè)demo中是通過python讀取的json文件诗赌。filename就是你要保存的文件名。
向js傳遞參數(shù)很簡單秸弛。只用在js文件中定義一個(gè)接受數(shù)據(jù)的函數(shù)铭若。然后用python的字符串拼接將傳輸傳進(jìn)去就可以了〉堇溃看這個(gè)地方叼屠。

   data_func,
   "read_data({});".format(graph),

注意read_data同時(shí)也是plot.js中的一個(gè)函數(shù)。通過這一個(gè)就可以將數(shù)據(jù)傳進(jìn)js中了绞铃。值得注意的是,一定要注意你傳入的數(shù)據(jù)類型镜雨,你不能傳遞一個(gè)js中沒有的數(shù)據(jù)類型,例如ndarray儿捧。根據(jù)我的測試荚坞,你可以再python中直接傳入以下類型的數(shù)據(jù):字符串,數(shù)字菲盾,json颓影,字典,list懒鉴。tuple也可以傳入瞭空,但是效果不對。
demo的運(yùn)行效果如下:

力導(dǎo)向圖demo

demo是一個(gè)力導(dǎo)向圖。值得注意的是咆畏,demo.css中有一句很重要

* {
    margin: 0;
    padding: 0;
}

如果不加這一句的話南捂,出來的html頁面將會(huì)變寬和變高,導(dǎo)致出現(xiàn)滾輪旧找。這是由于body元素自帶的margin導(dǎo)致的溺健。因此一定要添加。

我這個(gè)項(xiàng)目接下來的工作是給這個(gè)頁面添加交互功能钮蛛。如一鍵保存成圖片鞭缭,放大縮小,雙擊還原等等魏颓。有空了會(huì)把這些方法寫到這些demo中岭辣,到時(shí)候再更新github, 如果有人看的話甸饱,我也會(huì)更新這篇文章沦童,記錄一下關(guān)鍵技術(shù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末叹话,一起剝皮案震驚了整個(gè)濱河市偷遗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌驼壶,老刑警劉巖氏豌,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異热凹,居然都是意外死亡泵喘,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門般妙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來纪铺,“玉大人,你說我怎么就攤上這事股冗∨福” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵止状,是天一觀的道長烹棉。 經(jīng)常有香客問我,道長怯疤,這世上最難降的妖魔是什么浆洗? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮集峦,結(jié)果婚禮上伏社,老公的妹妹穿的比我還像新娘抠刺。我一直安慰自己,他們只是感情好摘昌,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布速妖。 她就那樣靜靜地躺著,像睡著了一般聪黎。 火紅的嫁衣襯著肌膚如雪罕容。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天稿饰,我揣著相機(jī)與錄音锦秒,去河邊找鬼。 笑死喉镰,一個(gè)胖子當(dāng)著我的面吹牛旅择,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播侣姆,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼生真,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了铺敌?” 一聲冷哼從身側(cè)響起汇歹,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤屁擅,失蹤者是張志新(化名)和其女友劉穎偿凭,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體派歌,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡弯囊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了胶果。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片匾嘱。...
    茶點(diǎn)故事閱讀 38,605評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖早抠,靈堂內(nèi)的尸體忽然破棺而出霎烙,到底是詐尸還是另有隱情,我是刑警寧澤蕊连,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布悬垃,位于F島的核電站,受9級特大地震影響甘苍,放射性物質(zhì)發(fā)生泄漏尝蠕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一载庭、第九天 我趴在偏房一處隱蔽的房頂上張望看彼。 院中可真熱鬧廊佩,春花似錦、人聲如沸靖榕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽茁计。三九已至鸯绿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間簸淀,已是汗流浹背瓶蝴。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留租幕,地道東北人舷手。 一個(gè)月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像劲绪,于是被迫代替她去往敵國和親男窟。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容