关于Python可视化Dash工具—plotly中级图表

2022-03-11 14:06:33 浏览数 (1)

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()

0 人点赞