Mpld3库一个matplotlib被忽视功能,python数据可视化web库
1 说明:
=====
1.1 MPLD3=mpl+d3=matplotlib+D3js。
1.2 是基于当前python下面最流行的图形图像库matplotlib和最知名的javascript库D3js上开发得到的。
1.3 用于创建web交互式数据可视化。
1.4 mpld3——Bringing Matplotlib to the Browser。
2 准备:
=====
2.1 官网:https://pypi.org/project/mpld3/ https://github.com/mpld3/mpld3 http://mpld3.github.io/ #很慢很卡,我没上去
2.2 安装:pip install mpld3 #其实不用安装,新版的matplotlib自带的
2.3 环境:
华为笔记本电脑、深度deepin-linux操作系统、谷歌浏览器、python3.8和微软vscode编辑器。
3 折线图:
========
3.1 代码:#折线图 #从模块导入就知道,mpld3是matplotlib自带的 import matplotlib.pyplot as plt, mpld3 #import mpld3 #也可以这样导出 #这是图片大小设置,建议这样设置大小,默认太大不好看 fig=plt.figure(figsize=(3,2)) #fig=plt.figure(num=1,figsize=(3,2)) datax=[3,1,4,1,5] #plt.plot([3,1,4,1,5], "ks-", mec="w", mew=5, ms=20) #"r-.d"代表red-.p==红色-.-.-.◇菱形 #"c-d" plt.plot(datax, "r-.d", mec="w", mew=5, ms=20) mpld3.show()
3.2 操作和效果图:
4 图和图例的交互式:
===============
4.1 代码:import matplotlib.pyplot as plt,mpld3 import numpy as np import pandas as pd #import mpld3 #这种导出注释掉,放在matplotlib的第一行那样导出 from mpld3 import plugins #数据 np.random.seed(9615) N = 100 #支持中文 df = pd.DataFrame((.1 * (np.random.random((N, 5)) - .5)).cumsum(0), columns=["a组", "b组", "c组", "d组", "e组"],) #折线图和交互式组合 # plot line + confidence interval fig, ax = plt.subplots(figsize=(3,2)) #等价于下面2行 #fig = plt.figure(figsize=(3,2)) #ax = fig.add_subplot(1,1,1) #以上这样设置图片大小成功 ax.grid(True, alpha=0.3) for key, val in df.iteritems(): l, = ax.plot(val.index, val.values, label=key) ax.fill_between(val.index, val.values * .5, val.values * 1.5, color=l.get_color(), alpha=.4) # define interactive legend handles, labels = ax.get_legend_handles_labels() # return lines and labels interactive_legend = plugins.InteractiveLegendPlugin(zip(handles, ax.collections), labels, alpha_unsel=0.5, alpha_over=1.5, start_visible=True) #图片和图例的交互式插件的联系设置 plugins.connect(fig, interactive_legend) ax.set_xlabel("x") ax.set_ylabel("y") #图的标题名和大小 ax.set_title("Interactive legend", size=20) mpld3.show()
4.2 图:
4.3 小插曲:
这里中文是支持的,这个和我曾经的matplotlib中文支持有点不一样,可以参考我的另外一篇文章,里面有提到。
《NetworkX:是一个简单、多样化、能快速生成网络图形的Python库》,这篇文章的第6点:中文显示,简单且一劳永逸。
5 散点图:
=======
5.1 代码:#Scatter图 import matplotlib.pyplot as plt,mpld3 import numpy as np #方法一,facecolor背景颜色 fig, ax = plt.subplots(subplot_kw=dict(facecolor="#EEEEEE"),figsize=(3, 2)) #fig, ax = plt.subplots(subplot_kw=dict(facecolor="lightpink"),figsize=(3, 2)) #fig, ax = plt.subplots() #采用默认 #方法二 #fig = plt.figure(figsize=(3,2)) #ax = fig.add_subplot(1,1,1) #方法三 #fig, ax = plt.subplots(1,1, figsize=(3, 2)) N = 100 scatter = ax.scatter(np.random.normal(size=N), np.random.normal(size=N), c=np.random.random(size=N), s=1000 * np.random.random(size=N), alpha=0.3, cmap=plt.cm.jet) #网格设置 #ax.grid(color="white", linestyle="solid") #图标标题名 ax.set_title("Scatter Plot (with tooltips!)", size=20) labels = ["point {0}".format(i + 1) for i in range(N)] #显示鼠标小提示 tooltip = mpld3.plugins.PointLabelTooltip(scatter, labels=labels) mpld3.plugins.connect(fig, tooltip) mpld3.show()
5.2 图:
6 面积曲线图:
==========
6.1 代码:import matplotlib.pyplot as plt, mpld3 import numpy as np x = np.linspace(0, 10, 200) data_obj = {"x": x, "y1": 2 * x + 1, "y2": 3 * x + 1.2, "mean": 0.5 * x * np.cos(2*x) + 2.5 * x + 1.1} #fig, ax = plt.subplots() #默认大小 fig, ax = plt.subplots(1,1,figsize=(3,2)) #填充两条线之间的颜色 ax.fill_between("x", "y1", "y2", color="yellow", data=data_obj) ax.plot("x", "mean", color="black", data=data_obj) mpld3.show()
6.2 图:
7 拖拽drag:
========
7.1 结合d3.js的JavaScript的代码:import numpy as np import matplotlib.pyplot as plt import matplotlib as mpl import mpld3 from mpld3 import plugins, utils class DragPlugin(plugins.PluginBase): JAVASCRIPT = """ mpld3.register_plugin("drag", DragPlugin); DragPlugin.prototype = Object.create(mpld3.Plugin.prototype); DragPlugin.prototype.constructor = DragPlugin; DragPlugin.prototype.requiredProps = ["id"]; DragPlugin.prototype.defaultProps = {} function DragPlugin(fig, props){ mpld3.Plugin.call(this, fig, props); mpld3.insert_css("#" + fig.figid + " path.dragging", {"fill-opacity": "1.0 !important", "stroke-opacity": "1.0 !important"}); }; DragPlugin.prototype.draw = function(){ var obj = mpld3.get_element(this.props.id); var drag = d3.drag() .subject(function(d) { return {x:obj.ax.x(d[0]), y:obj.ax.y(d[1])}; }) .on("start", dragstarted) .on("drag", dragged) .on("end", dragended); obj.elements() .data(obj.offsets) .style("cursor", "default") .call(drag); function dragstarted(d) { d3.event.sourceEvent.stopPropagation(); d3.select(this).classed("dragging", true); } function dragged(d, i) { d[0] = obj.ax.x.invert(d3.event.x); d[1] = obj.ax.y.invert(d3.event.y); d3.select(this) .attr("transform", "translate(" + [d3.event.x,d3.event.y] + ")"); } function dragended(d) { d3.select(this).classed("dragging", false); } } """ def __init__(self, points): if isinstance(points, mpl.lines.Line2D): suffix = "pts" else: suffix = None self.dict_ = {"type": "drag", "id": utils.get_id(points, suffix)} fig, ax = plt.subplots(1,1,figsize=(3,2)) np.random.seed(0) points = ax.plot(np.random.normal(size=20), np.random.normal(size=20), "or", alpha=0.5, markersize=50, markeredgewidth=1) ax.set_title("Click and Drag", fontsize=18) plugins.connect(fig, DragPlugin(points[0])) mpld3.show()
7.2 效果图:
8 再附一张图,代码省略:
===自己整理并分享出来===
喜欢的人,请点赞、关注、评论、转发和收藏。
我给儿子做了280张英语语法闪卡,忍不住要分享给你Part。1前段时间陪女儿学英语,我就发现一个奇怪的现象。老师每次给娃提问,小丫头回答得都十分言简意赅。老师问,Howareyoutoday?女儿答,Good!老师问,Whatar
如何体面地帮娃,戒掉游戏和手机Part。1前几天带娃出去吃饭,点完餐后,就是漫长的等待时间。儿子有点无聊,他一瞅周围,别的桌子上的顾客也在等餐。不过爸爸妈妈都在刷着手机,而小孩子则人手一台iPad。儿子有点不甘
318岁,各年龄段最好用的数学App在这里Part。1昨天在给娃整理iPad上的App。我是个程序员,程序员的特色就是喜欢琢磨新的东西。每每AppStore里有新的教育软件更新出来,我都会第一时间尝鲜。所以,我的iPad上
我从清华学到的儿童创意思维前段时间,我跟清华的老师一起设计一个STEM主题的儿童科学教案。我们讨论的方案想围绕重力这个主题展开,让孩子做一个很酷的项目,从中学习重力的知识点。我的方案是做了一个秋千,在高处一
不怕空气突然安静,就怕小舍得里数学老师附体Part。1前几天看小舍得,突然扫到钟老师骂学生的一幕。又是骂孩子笨,又是骂孩子木头脑子,各种伤自尊的词都上了。而学生则是可怜兮兮地坐在那边,手足无措。哎,这个钟老师太过分了,太让
对不起Part。1昨天有件事搞得很郁闷!前段时间跟火花思维博弈了好久,终于谈了一个很好的福利,把她们的魔方课和思维导图课薅出来,1分钱的价格拼团购买,跟免费送也没啥区别了。昨天文章发出去
悄悄告诉你我用三套暑假计划表,改掉儿子ampampquot拖拖拖ampampquot的坏毛病Part。1儿子前几天刚刚考完试。小家伙最近考试状态我是很满意的,早在一个多月前,他就忙不迭地开始复习。英语数学物理逻辑化学生物历史中文考试科目很多,但是娃做了一个很好的复习计划,
啧啧!这绘本,这画风,最低才5元女儿这段时间迷上了汪汪队,每次打开动画片的一刹那,汪汪队那高亢的音乐响起时,我都忍不住眉头一皱。不是说汪汪队不好,只不过它的剧情真的太太太雷同了,看多了也没什么营养!可是换什么给娃
OMG,又出教育新政,学区房彻底ampampquot躺平ampampquotPart。1前天,北京出台了一个新政策,简单来说,就是老师校长轮岗制,从北京开始,在各个学校,大规模推行老师轮岗。北京政策向来是其它城市的风向标,北京实行教师轮岗后,相信后面会有更
开学必看的英语教学动画,娃恨不得每天刷10集Part。1前几天,有读者问我一个关于自然拼读的问题正好最近我正测试自己设计的自然拼读游戏板,教女儿各个元音的词根。我当初设计这张图的时候,花了不少时间专门研究过自然拼读的学习体系
魔都年薪36万抢家教这么教,爆Part。1前几天朋友给我发了一条信息我们去应聘家教吧!然后附了几张图。这是南京的家教收入,年薪30W起!这是上海北京的家教收入,有的直接月薪3W起步!我掐指一算,每周做两三个家教