
matplotlib官网开源GitHub23K Star8.4K Fork可视化绘图库Seaborn官网开源GitHub14K Star2.1K Fork统计数据可视化库bokeh官网中文官网开源GitHub20.4K Star4.3K Fork交互式数据可视化库。PyEcharts官网开源GitHub15.8K Star2.8K Fork库Plotly官网交互式图表开源GitHub18.7K Star2.8K Fork库适合快速生成浏览器里的交互式图表用于数据分析和可视化。既有Plotly Express这种高层API也有graph_objects这种细粒度对象接口能覆盖从简单柱状图到指标卡、地图和复杂dashboard组件的需求。官方文档。特点图形多样化在线绘制多种图形如柱状图、饼图、直方图、饼图、气泡图、桑基图、股票图、旭日图、联合分布图、地图等在线可编辑提供在线编辑的平台可将生成的图形保存到该平台并进行分享开源免费所有资源都是开源免费的用户可直接使用还可直接和R、Python、MATLAB等无缝对接图形动态化生成图形全部是动态化Plotly的绘图最好在Jupyter notebook中进行能够很好地显示动态效果交互强缩放、悬停、图例筛选等交互默认可用颜色绚丽在使用Plotly绘制图形时可进行图形颜色的设置提供丰富颜色面板供选择代码量少尤其是Plotly的高级封装Plotly_Express代码量非常少一行代码就能实现多种功能且精美的图形格式开放Figure可转成JSON方便存储、审查和前端复用内置丰富数据集内置7个不同类型的数据集方便直接使用内置数据进行学习、使用文档健全官方提供丰富的文档资料和案例可免费学习能够快速的上手适合交互式报表、嵌入网页、HTML分享、Dash应用、业务指标页、需要悬停和图例筛选的图表。不适合对图像文件像素级排版要求极高的论文图或完全不能引入前端JS运行时的环境。实战基于pip安装pipinstallplotly pipinstallplotly_express示例importplotly.expressaspximportpandasaspdimportplotly.graph_objectsasgo# 内置GDP数据集gapminderpx.data.gapminder()# 小费tipspx.data.tips()# 鸢尾花irispx.data.iris()windpx.data.wind()electionpx.data.election()carsharepx.data.carshare()stockpx.data.stock()dfpd.DataFrame({month:[Jan,Feb,Mar],sales:[120,160,90]})figpx.bar(df,xmonth,ysales,titlesales)print(traces:,len(fig.data))print(type:,fig.data[0].type)fig.show()感觉执行或渲染速度有点慢自动打开浏览器新标签页网址为http://127.0.0.1:14574交互图如下更多示例# 散点图gappx.data.gapminder().query(year 2025)figpx.scatter(gap,xgdpPercap,ylifeExp,colorcontinent,sizepop# 点的大小,size_max60# 点的最大值)fig.show()# 3D散点图dfpx.data.iris()figpx.scatter_3d(df,# 指定数据xsepal_length,# 指定xyzysepal_width,zpetal_width,colorspecies)# 指定颜色fig.show()# 散点图figgo.Figure(go.Scatter(x[1,2,3],y[4,6,5],modelinesmarkers))fig.update_layout(templateplotly_white,hovermodex unified)print(mode:,fig.data[0].mode)print(template set:,fig.layout.templateisnotNone)print(hovermode:,fig.layout.hovermode)# 示例2figgo.Figure(go.Indicator(modenumberdelta,value420,delta{reference:380}))specfig.to_dict()print(trace type:,spec[data][0][type])print(delta ref:,spec[data][0][delta][reference])print(json ready:,bool(fig.to_json()))注意事项固定输入字段、数据量范围和缺失值策略明确图表是静态导出、Notebook交互、桌面GUI、Web嵌入在目标运行环境里做一次渲染或导出验证Altair项目主页基于Vega-Lite声明式绘图开源GitHub10.4K Star863 Fork工具用数据字段、mark类型和编码规则描述图表。适用于数据分析、报表原型、Notebook探索、前后端共享图表规格、需要可交互图表等场景。图表规格可以导出为JSON前端也容易复用。特点声明式关注字段和映射关系而不是手动画布细节交互方便selection、condition等能力能快速做筛选和高亮规格可导出图表本质是Vega-Lite spec适合保存、审查和前端复用不足处理超大数据集几十万行以上会有点吃力做特别复杂的自定义图形也不如Matplotlib灵活。不适合超大数据直接塞进前端spec、需要像素级手工排版的出版图或高度定制的3D/动画图表。实战基于pip安装pip install altair入门示例importaltairasaltimportpandasaspd datapd.DataFrame({x:[A,B,C,D],y:[1,2,1,2]})alt.Chart(data).mark_bar().encode(xx,yy,)注意不能直接使用终端执行需借助于Jupyter Notebook效果如下右上角选项更多示例importpandasaspdimportaltairasalt datapd.DataFrame({month:[Jan,Feb,Mar],sales:[120,160,90]})chartalt.Chart(data).mark_bar().encode(xmonth,ysales)specchart.to_dict()print(mark:,spec[mark][type])print(fields:,[spec[encoding][k][field]forkin[x,y]])datapd.DataFrame({team:[A,A,B,B],x:[1,2,1,2],y:[3,5,2,7]})chartalt.Chart(data).mark_line(pointTrue).encode(xx,yy,colorteam)specchart.to_dict()print(color field:,spec[encoding][color][field])print(rows:,len(spec[datasets][next(iter(spec[datasets]))]))sourcepd.DataFrame({category:[A,B,C,D],value:[28,55,43,91]})selectoralt.selection_point(fields[category])chartalt.Chart(source).mark_bar().encode(xcategory,yvalue,coloralt.condition(selector,alt.value(#4c78a8),alt.value(#d3d3d3)),).add_params(selector)specchart.to_dict()print(params:,spec[params][0][name])print(condition test:,conditioninspec[encoding][color])print(dataset rows:,len(spec[datasets][next(iter(spec[datasets]))]))注意事项控制数据量必要时先聚合再画固定字段名和类型避免图表变化导出spec后在目标前端或报告环境里做一次渲染检查bqplotJupyter交互绘图开源GitHub3.7K Star481 Fork库底层基于ipywidgets。思路让scale、mark、axis、interaction都成为可联动的Widget对象官方文档。特点组件化scale、mark、axis分开建模适合组合复杂Notebook图表交互自然BrushSelector等交互对象可直接挂到Figure上贴近Jupyter和ipywidgets协作良好适合参数控件联动图表适合Jupyter Notebook、教学演示、参数调试、快速可视化原型、交互式探索分析、需要控件联动的小型数据工具。不适合脱离Notebook的纯服务端报表或需要独立前端工程长期维护的大型可视化平台。实战基于pip安装pip install bqplot示例fromimportlib.metadataimportversionfrombqplotimportAxis,Bars,LinearScale,Lines,Figure,OrdinalScale,Scatterfrombqplot.interactsimportBrushSelector x_sc,y_scLinearScale(),LinearScale()lineLines(x[1,2,3],y[4,6,5],scales{x:x_sc,y:y_sc})figFigure(marks[line],titlesales)print(marks:,len(fig.marks))print(points:,len(line.x))x_sc,y_scOrdinalScale(),LinearScale()barsBars(x[A,B,C],y[4,7,2],scales{x:x_sc,y:y_sc})figFigure(marks[bars],axes[Axis(scalex_sc),Axis(scaley_sc,orientationvertical)])print(bar labels:,[str(x)forxinbars.x])print(axes:,len(fig.axes))x_sc,y_scLinearScale(),LinearScale()scatterScatter(x[1,2,3,4],y[2,5,3,6],scales{x:x_sc,y:y_sc})selectorBrushSelector(x_scalex_sc,y_scaley_sc)figFigure(marks[scatter],interactionselector)print(interaction:,type(fig.interaction).__name__)print(selected:,selector.selected)注意事项固定输入字段、数据量范围和缺失值策略。明确图表是静态导出、Notebook交互、桌面GUI、Web嵌入在目标运行环境里做一次渲染或导出验证。plotext在终端里画图表参考Python生态下CLI/TUI工具Rich、Textual、alive-progress、tabulate、plotext、yaspin、Scroll Art。plotlet开源GitHub主打定制自由输出静态SVG不支持交互功能鼠标悬浮显示数据、缩放、点击等链式语法。适合场景基因组图谱、曼哈顿图、进化树。实战基于pip安装pip install plotlet基于源码安装gitclone https://github.com/gitbamboo42/plotletcdplotlet pipinstall-e.示例importplotletaspt data{x:[1,2,3,4],y:[1,4,9,16]}cpt.chart(data,title测试,xlabelX轴,ylabelY轴)c.line(xx,yy)