我们前两天讨论的matplotlib与Seaborn套件基本上已经可以满足绝大多数的绘图需求,唯一美中不足的一点是这些图形都是静态(Static)的,如果我们想要让这些图形带有一点互动(Interactive),像是滑鼠游标移上去会显示资料点的数据或可以缩放图形等基于JavaScript的效果,我们可以在Python使用Bokeh这个高阶绘图套件来达成。
以目前发展来看,资料视觉化套件会以d3.js与其他基于JavaScript或d3.js衍生的网页专案领衔冲锋,像是Leaflet、c3.js以及我们今天会使用的plotly等。Python的视觉化套件则是努力让使用者用精简的方法与函数画出具备互动效果的视觉化,如我们今天要讨论的Bokeh以及Plotly。如果你的工作是以资料视觉化为重,花时间与精神钻研网页前端技术与d3.js是必须的投资。
我们今天试着使用Bokeh的Plotly套件来划一些基本的图形,包括:
直方图(Histogram)
散布图(Scatter plot)
线图(Line plot)
长条图(Bar plot)
盒须图(Box plot)
我下载的Anaconda版本已经将Bokeh安装好了,如果你的版本没有,只要在终端机执行这段程式即可。
$ conda install -c anaconda bokeh=0.12.3
直方图(Histogram)
使用bokeh.charts的Histogram()方法。
散布图(Scatter plot)
使用bokeh.charts的Scatter()方法。
from bokeh.charts import Scatter, show
import pandas as pd
speed = [4, 4, 7, 7, 8, 9, 10, 10, 10, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 16, 16, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 20, 20, 20, 20, 20, 22, 23, 24, 24, 24, 24, 25]
dist = [2, 10, 4, 22, 16, 10, 18, 26, 34, 17, 28, 14, 20, 24, 28, 26, 34, 34, 46, 26, 36, 60, 80, 20, 26, 54, 32, 40, 32, 40, 50, 42, 56, 76, 84, 36, 46, 68, 32, 48, 52, 56, 64, 66, 54, 70, 92, 93, 120, 85]
cars_df = pd.DataFrame(
{"speed": speed,
"dist": dist
}
)
scatter = Scatter(cars_df, x = "speed", y = "dist")
show(scatter)
线图(Line plot)
使用bokeh.charts的Line()方法。
from bokeh.charts import Line, show
import pandas as pd
speed = [4, 4, 7, 7, 8, 9, 10, 10, 10, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 16, 16, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 20, 20, 20, 20, 20, 22, 23, 24, 24, 24, 24, 25]
dist = [2, 10, 4, 22, 16, 10, 18, 26, 34, 17, 28, 14, 20, 24, 28, 26, 34, 34, 46, 26, 36, 60, 80, 20, 26, 54, 32, 40, 32, 40, 50, 42, 56, 76, 84, 36, 46, 68, 32, 48, 52, 56, 64, 66, 54, 70, 92, 93, 120, 85]
cars_df = pd.DataFrame(
{"speed": speed,
"dist": dist
}
)
line = Line(cars_df, x = "speed", y = "dist")
show(line)
长条图(Bar plot)
使用bokeh.charts的Bar()方法。
from bokeh.charts import Bar, show
import pandas as pd
cyls = [11, 7, 14]
labels = ["4", "6", "8"]
cyl_df = pd.DataFrame({
"cyl": cyls,
"label": labels
})
bar = Bar(cyl_df, values = "cyl", label = "label")
show(bar)
盒须图(Box plot)
使用bokeh.charts的BoxPlot()方法。
from bokeh.charts import BoxPlot, show, output_notebook
import pandas as pd
output_notebook()
mpg = [21, 21, 22.8, 21.4, 18.7, 18.1, 14.3, 24.4, 22.8, 19.2, 17.8, 16.4, 17.3, 15.2, 10.4, 10.4, 14.7, 32.4, 30.4, 33.9, 21.5, 15.5, 15.2, 13.3, 19.2, 27.3, 26, 30.4, 15.8, 19.7, 15, 21.4]
cyl = [6, 6, 4, 6, 8, 6, 8, 4, 4, 6, 6, 8, 8, 8, 8, 8, 8, 4, 4, 4, 4, 8, 8, 8, 8, 4, 4, 4, 8, 6, 8, 4]
mtcars_df = pd.DataFrame({
"mpg": mpg,
"cyl": cyl
})
box = BoxPlot(mtcars_df, values = "mpg", label = "cyl")
show(box)
小结
我们练习使用Python的视觉化套件Bokeh绘制基本的图形。
领取专属 10元无门槛券
私享最新 技术干货