Plotly Express是对 Plotly.py 的高级封装,内置了大量实用、现代的绘图模板,用户只需调用简单的API函数,即可快速生成漂亮的互动图表,可满足90%以上的应用场景。
本文借助Plotly Express提供的几个样例库进行密度图、小提琴图、箱线图、地图、趋势图,还有用于实现数据预探索的各种关系图、直方图等基本图形的实现。
plotly介于seaborn和pyechart之间,在表达丰富度形式上优于seaborn,在定制化程度上高于pyechart。
代码示例
代码语言:javascript复制import plotly.express as px
df = px.data.iris().query('species_id==1')
# marginal_x–'rug' 密度图, 'box' 箱线图, 'violin' 小提琴图, or 'histogram'直方图。
# 如果设置,则在主图上方绘制一个水平子图,以可视化x分布。
# marginal_y–地毯、盒子、小提琴或柱状图中的一种。
# 如果设置,则在主图的右侧绘制一个垂直子图,以显示y分布。
# 鸢尾花类型=1的sepal_width,sepal_length散点图,x轴为密度图,y轴为直方图
fig = px.scatter(df, x="sepal_width", y="sepal_length",
marginal_x="rug", marginal_y="histogram")
fig.show()
# 鸢尾花类型=1的sepal_width,sepal_length散点图,x轴为箱线图,y轴为小提琴图
fig = px.scatter(df, x="sepal_width", y="sepal_length",
marginal_x="box", marginal_y="violin")
fig.show()
df = px.data.iris()
# 所有花卉,x轴为箱线图,y轴为小提琴图,颜色以鸢尾花类型分类
fig = px.scatter(df, x="sepal_width", y="sepal_length",
color="species", size='petal_length',
hover_data=['petal_width'], hover_name="species",
title="鸢尾花分类展示",
marginal_x="box", marginal_y="violin")
fig.show()
# 密度热力图,鸢尾花类型=1的sepal_width,sepal_length散点图,x轴为密度图,y轴为直方图
fig = px.density_heatmap(df.query('species_id==1'),
x="sepal_width", y="sepal_length",
marginal_x="rug",
marginal_y="histogram"
)
fig.show()
# 密度热力图,行轴用sex,列轴用smoker进行多维度展示
df = px.data.tips()
fig = px.density_heatmap(df, x="total_bill", y="tip",
facet_row="sex", facet_col="smoker")
fig.show()
df = px.data.iris()
# 直方图,只有x轴,箱线图
fig = px.histogram(df, x="sepal_length", color="species",
marginal="box")
fig.show()
# 在原有直方图基础上,增加20个区间
fig = px.histogram(df, x="sepal_length", color="species",
marginal="box" ,nbins=20)
fig.show()
# 箱线图
fig = px.box(df, x="species", y="sepal_length",
color='species')
fig.show()
# 在箱线图上追加散点
fig = px.box(df, x="species", y="sepal_length",
color='species',points='all')
fig.show()
# 散点图矩阵,不指定列会把所有列带出来展示
df = px.data.iris()
fig = px.scatter_matrix(df)
fig.show()
# 散点图矩阵,以鸢尾花颜色分类
fig = px.scatter_matrix(df,
dimensions=["sepal_width", "sepal_length",
"petal_width", "petal_length"],
color="species")
fig.show()
# 散点图,用年份做列分割,每行限定4列
df = px.data.gapminder()
fig = px.scatter(df, x='gdpPercap', y='lifeExp', color='continent', size='pop',
facet_col='year', facet_col_wrap=4)
fig.show()
# 地图展示,不过精确度太差
df = px.data.election()
# pandas.melt(frame, id_vars=None, value_vars=None,
# var_name=None, value_name='value', col_level=None)
# 参数解释:宽数据--->>长数据
# frame:要处理的数据集。
# id_vars:不需要被转换的列名。
# value_vars:需要转换的列名,如果剩下的列全部都要转换,就不用写了。
# var_name和value_name是自定义设置对应的列名。
# col_level :如果列是MultiIndex,则使用此级别。
df = df.melt(id_vars="district", value_vars=["Coderre", "Bergeron", "Joly"],
var_name="candidate", value_name="votes")
# 获取地图
geojson = px.data.election_geojson()
# 地图展示
fig = px.choropleth(df, geojson=geojson, color="votes", facet_col="candidate",
locations="district", featureidkey="properties.district",
projection="mercator"
)
fig.update_geos(fitbounds="locations", visible=False)
fig.show()
# 条带图
df = px.data.iris()
fig = px.strip(df, x="sepal_width", y="sepal_length",
color="species", facet_col="species")
fig.show()
# 密度轮廓图
df = px.data.gapminder().query("year == 2007 | year==1957 | year==1982")
fig = px.density_contour(df, x="gdpPercap", y="lifeExp", z="pop",
facet_col="year",color="continent")
fig.show()
df = px.data.gapminder().query("year == 2007")
fig = px.density_contour(df, x="gdpPercap", y="lifeExp", z="pop")
fig.update_traces(contours_coloring="fill",
contours_showlabels = True)
fig.show()
# 散点图加趋势线图
df = px.data.tips()
fig = px.scatter(
df, x='total_bill', y='tip', opacity=0.65,
trendline='ols', trendline_color_override='darkblue'
)
# 散点图加趋势线图
df = px.data.iris()
fig = px.scatter(df, x="sepal_width", y="sepal_length",
color="species", facet_col="species",
trendline='ols',
trendline_color_override='darkblue')
fig.show()