Plotly Express是对 Plotly.py 的高级封装,内置了大量实用、现代的绘图模板,用户只需调用简单的API函数,即可快速生成漂亮的互动图表,可满足90%以上的应用场景。
本文借助Plotly Express提供的几个样例库进行散点图、折线图、饼图、柱状图、气泡图、桑基图、玫瑰环图、堆积图、二维面积图、甘特图等基本图形的实现。
代码示例
-
import plotly.express as px
-
df = px.data.iris()
-
#Index([
'sepal_length',
'sepal_width',
'petal_length',
'petal_width',
'species',
'species_id'],dtype=
'object')
-
# sepal_length sepal_width ... species species_id
-
#
0
5.1
3.5 ... setosa
1
-
#
1
4.9
3.0 ... setosa
1
-
#
2
4.7
3.2 ... setosa
1
-
# .. ... ... ... ... ...
-
#
149
5.9
3.0 ... virginica
3
-
# plotly.express.scatter(data_frame=None, x=None, y=None,
-
# color=None, symbol=None, size=None,
-
# hover_name=None, hover_data=None, custom_data=None, text=None,
-
# facet_row=None, facet_col=None, facet_col_wrap=
0, facet_row_spacing=None, facet_col_spacing=None,
-
# error_x=None, error_x_minus=None, error_y=None, error_y_minus=None,
-
# animation_frame=None, animation_group=None,
-
# category_orders=None, labels=None, orientation=None,
-
# color_discrete_sequence=None, color_discrete_map=None, color_continuous_scale=None,
-
# range_color=None, color_continuous_midpoint=None,
-
# symbol_sequence=None, symbol_map=None, opacity=None,
-
# size_max=None, marginal_x=None, marginal_y=None,
-
# trendline=None, trendline_color_override=None,
-
# log_x=False, log_y=False, range_x=None, range_y=None,
-
# render_mode=
'auto', title=None, template=None, width=None, height=None)
-
# 以sepal_width,sepal_length制作标准散点图
-
fig = px.scatter(df, x=
"sepal_width", y=
"sepal_length")
-
fig.show()
-
-
-
#以鸢尾花类型-species作为不同颜色区分标志 color
-
fig = px.scatter(df, x=
"sepal_width", y=
"sepal_length", color=
"species")
-
fig.show()
-
-
#追加petal_length作为散点大小,变位气泡图 size
-
fig = px.scatter(df, x=
"sepal_width", y=
"sepal_length",
-
color=
"species",size=
'petal_length')
-
fig.show()
-
-
#追加petal_width作为额外列,在悬停工具提示中显示为额外数据 hover_data
-
fig = px.scatter(df, x=
"sepal_width", y=
"sepal_length",
-
color=
"species", size=
'petal_length',
-
hover_data=[
'petal_width'])
-
fig.show()
-
-
#以鸢尾花类型-species区分散点的形状 symbol
-
fig = px.scatter(df, x=
"sepal_width", y=
"sepal_length",
-
symbol=
"species" ,color=
"species",
-
size=
'petal_length',
-
hover_data=[
'petal_width'])
-
fig.show()
-
-
#追加petal_width作为额外列,在悬停工具提示中以粗体显示。 hover_name
-
fig = px.scatter(df, x=
"sepal_width", y=
"sepal_length",
-
symbol=
"species" ,color=
"species",
-
size=
'petal_length',
-
hover_data=[
'petal_width'], hover_name=
"species")
-
fig.show()
-
-
#以鸢尾花类型编码-species_id作为散点的文本值 text
-
fig = px.scatter(df, x=
"sepal_width", y=
"sepal_length",
-
symbol=
"species" ,color=
"species",
-
size=
'petal_length',
-
hover_data=[
'petal_width'], hover_name=
"species",
-
text=
"species_id")
-
fig.show()
-
-
#追加图表标题 title
-
fig = px.scatter(df, x=
"sepal_width", y=
"sepal_length",
-
symbol=
"species" ,color=
"species", size=
'petal_length',
-
hover_data=[
'petal_width'], hover_name=
"species",
-
text=
"species_id",title=
"鸢尾花分类展示")
-
fig.show()
-
-
#以鸢尾花类型-species作为动画播放模式 animation_frame
-
fig = px.scatter(df, x=
"sepal_width", y=
"sepal_length",
-
symbol=
"species" ,color=
"species", size=
'petal_length',
-
hover_data=[
'petal_width'], hover_name=
"species",
-
text=
"species_id",title=
"鸢尾花分类展示",
-
animation_frame=
"species")
-
fig.show()
-
-
#固定X、Y最大值最小值范围range_x,range_y,防止动画播放时超出数值显示
-
fig = px.scatter(df, x=
"sepal_width", y=
"sepal_length",
-
symbol=
"species" ,color=
"species", size=
'petal_length',
-
hover_data=[
'petal_width'], hover_name=
"species",
-
text=
"species_id",title=
"鸢尾花分类展示",
-
animation_frame=
"species",range_x=[
1.5,
4.5],range_y=[
4,
8.5])
-
fig.show()
-
-
df = px.data.gapminder().query(
"country=='China'")
-
# Index([
'country',
'continent',
'year',
'lifeExp',
'pop',
'gdpPercap',
'iso_alpha',
'iso_num'],dtype=
'object')
-
# country continent year ... gdpPercap iso_alpha iso_num
-
#
288 China Asia
1952 ...
400.448611 CHN
156
-
#
289 China Asia
1957 ...
575.987001 CHN
156
-
#
290 China Asia
1962 ...
487.674018 CHN
156
-
# plotly.express.line(data_frame=None, x=None, y=None,
-
# line_group=None, color=None, line_dash=None,
-
# hover_name=None, hover_data=None, custom_data=None, text=None,
-
# facet_row=None, facet_col=None, facet_col_wrap=
0,
-
# facet_row_spacing=None, facet_col_spacing=None,
-
# error_x=None, error_x_minus=None, error_y=None, error_y_minus=None,
-
# animation_frame=None, animation_group=None,
-
# category_orders=None, labels=None, orientation=None,
-
# color_discrete_sequence=None, color_discrete_map=None,
-
# line_dash_sequence=None, line_dash_map=None,
-
# log_x=False, log_y=False,
-
# range_x=None, range_y=None,
-
# line_shape=None, render_mode=
'auto', title=None,
-
# template=None, width=None, height=None)
-
# 显示中国的人均寿命
-
fig = px.line(df, x=
"year", y=
"lifeExp", title=
'中国人均寿命')
-
fig.show()
-
-
# 以不同颜色显示亚洲各国的人均寿命
-
df = px.data.gapminder().query(
"continent == 'Asia'")
-
fig = px.line(df, x=
"year", y=
"lifeExp", color=
"country",
-
hover_name=
"country")
-
fig.show()
-
-
# line_group=
"country" 达到按国家去重的目的
-
df = px.data.gapminder().query(
"continent != 'Asia'") # remove Asia
for visibility
-
fig = px.line(df, x=
"year", y=
"lifeExp", color=
"continent",
-
line_group=
"country", hover_name=
"country")
-
fig.show()
-
-
# bar图
-
df = px.data.gapminder().query(
"country == 'China'")
-
fig = px.bar(df, x=
'year', y=
'lifeExp')
-
fig.show()
-
-
df = px.data.gapminder().query(
"continent == 'Asia'")
-
fig = px.bar(df, x=
'year', y=
'lifeExp',color=
"country" )
-
fig.show()
-
-
df = px.data.gapminder().query(
"country == 'China'")
-
fig = px.bar(df, x=
'year', y=
'pop',
-
hover_data=[
'lifeExp',
'gdpPercap'], color=
'lifeExp',
-
labels={
'pop':
'population of China'}, height=
400)
-
fig.show()
-
-
fig = px.bar(df, x=
'year', y=
'pop',
-
hover_data=[
'lifeExp',
'gdpPercap'], color=
'pop',
-
labels={
'pop':
'population of China'}, height=
400)
-
fig.show()
-
-
df = px.data.medals_long()
-
# # nation medal count
-
# #
0 South Korea gold
24
-
# #
1 China gold
10
-
# #
2 Canada gold
9
-
# #
3 South Korea silver
13
-
# #
4 China silver
15
-
# #
5 Canada silver
12
-
# #
6 South Korea bronze
11
-
# #
7 China bronze
8
-
# #
8 Canada bronze
12
-
fig = px.bar(df, x=
"nation", y=
"count", color=
"medal",
-
title=
"Long-Form Input")
-
fig.show()
-
-
# 气泡图
-
df = px.data.gapminder()
-
# X轴以对数形式展现
-
fig = px.scatter(df.query(
"year==2007"), x=
"gdpPercap", y=
"lifeExp",
-
size=
"pop",
-
color=
"continent",hover_name=
"country",
-
log_x=True, size_max=
60)
-
fig.show()
-
-
# X轴以标准形式展现
-
fig = px.scatter(df.query(
"year==2007"), x=
"gdpPercap", y=
"lifeExp",
-
size=
"pop",
-
color=
"continent",hover_name=
"country",
-
log_x=False, size_max=
60)
-
fig.show()
-
-
# 饼状图
-
px.data.gapminder().query(
"year == 2007").groupby(
'continent').count()
-
# country year lifeExp pop gdpPercap iso_alpha iso_num
-
# continent
-
# Africa
52
52
52
52
52
52
52
-
# Americas
25
25
25
25
25
25
25
-
# Asia
33
33
33
33
33
33
33
-
# Europe
30
30
30
30
30
30
30
-
# Oceania
2
2
2
2
2
2
2
-
df = px.data.gapminder().query(
"year == 2007").query(
"continent == 'Americas'")
-
fig = px.pie(df, values=
'pop', names=
'country',
-
title=
'Population of European continent')
-
fig.show()
-
-
df.loc[df[
'pop'] <
10000000,
'country'] =
'Other countries'
-
fig = px.pie(df, values=
'pop', names=
'country',
-
title=
'Population of European continent',
-
hover_name=
'country',labels=
'country')
-
fig.update_traces(textposition=
'inside', textinfo=
'percent+label')
-
fig.show()
-
-
df.loc[df[
'pop'] <
10000000,
'country'] =
'Other countries'
-
fig = px.pie(df, values=
'pop', names=
'country',
-
title=
'Population of European continent',
-
hover_name=
'country',labels=
'country',
-
color_discrete_sequence=px.colors.sequential.Blues)
-
fig.update_traces(textposition=
'inside', textinfo=
'percent+label')
-
fig.show()
-
-
# 二维面积图
-
df = px.data.gapminder()
-
fig = px.area(df, x=
"year", y=
"pop", color=
"continent",
-
line_group=
"country")
-
fig.show()
-
-
fig = px.area(df, x=
"year", y=
"pop", color=
"continent",
-
line_group=
"country",
-
color_discrete_sequence=px.colors.sequential.Blues)
-
fig.show()
-
-
df = px.data.gapminder().query(
"year == 2007")
-
fig = px.bar(df, x=
"pop", y=
"continent", orientation=
'h',
-
hover_name=
'country',
-
text=
'country',color=
'continent')
-
fig.show()
-
-
# 甘特图
-
import pandas as pd
-
df = pd.DataFrame([
-
dict(Task=
"Job A", Start=
'2009-01-01', Finish=
'2009-02-28',
-
Completion_pct=
50, Resource=
"Alex"),
-
dict(Task=
"Job B", Start=
'2009-03-05', Finish=
'2009-04-15',
-
Completion_pct=
25, Resource=
"Alex"),
-
dict(Task=
"Job C", Start=
'2009-02-20', Finish=
'2009-05-30',
-
Completion_pct=
75, Resource=
"Max")
-
])
-
fig = px.timeline(df, x_start=
"Start", x_end=
"Finish", y=
"Task",
-
color=
"Completion_pct")
-
fig.update_yaxes(autorange=
"reversed")
-
fig.show()
-
-
fig = px.timeline(df, x_start=
"Start", x_end=
"Finish", y=
"Resource",
-
color=
"Resource")
-
fig.update_yaxes(autorange=
"reversed")
-
fig.show()
-
-
# 玫瑰环图
-
df = px.data.tips()
-
# total_bill tip sex smoker day time size
-
#
0
16.99
1.01 Female No Sun Dinner
2
-
#
1
10.34
1.66 Male No Sun Dinner
3
-
#
2
21.01
3.50 Male No Sun Dinner
3
-
#
3
23.68
3.31 Male No Sun Dinner
2
-
#
4
24.59
3.61 Female No Sun Dinner
4
-
fig = px.sunburst(df, path=[
'day',
'time',
'sex'],
-
values=
'total_bill')
-
fig.show()
-
-
import numpy as np
-
df = px.data.gapminder().query(
"year == 2007")
-
fig = px.sunburst(df, path=[
'continent',
'country'],
-
values=
'pop',
-
color=
'lifeExp', hover_data=[
'iso_alpha'],
-
color_continuous_scale=
'RdBu',
-
color_continuous_midpoint=np.average(df[
'lifeExp'],
-
weights=df[
'pop']))
-
fig.show()
-
-
df = px.data.gapminder().query(
"year == 2007")
-
fig = px.sunburst(df, path=[
'continent',
'country'],
-
values=
'pop',
-
color=
'pop', hover_data=[
'iso_alpha'],
-
color_continuous_scale=
'RdBu')
-
fig.show()
-
-
# treemap图
-
import numpy as np
-
df = px.data.gapminder().query(
"year == 2007")
-
df[
"world"] =
"world" # in order to have a single root node
-
fig = px.treemap(df, path=[
'world',
'continent',
'country'],
-
values=
'pop',
-
color=
'lifeExp', hover_data=[
'iso_alpha'],
-
color_continuous_scale=
'RdBu',
-
color_continuous_midpoint=np.average(df[
'lifeExp'],
-
weights=df[
'pop']))
-
fig.show()
-
-
fig = px.treemap(df, path=[
'world',
'continent',
'country'], values=
'pop',
-
color=
'pop', hover_data=[
'iso_alpha'],
-
color_continuous_scale=
'RdBu',
-
color_continuous_midpoint=np.average(df[
'lifeExp'],
-
weights=df[
'pop']))
-
fig.show()
-
-
fig = px.treemap(df, path=[
'world',
'continent',
'country'], values=
'pop',
-
color=
'lifeExp', hover_data=[
'iso_alpha'],
-
color_continuous_scale=
'RdBu')
-
fig.show()
-
-
fig = px.treemap(df, path=[
'continent',
'country'], values=
'pop',
-
color=
'lifeExp', hover_data=[
'iso_alpha'],
-
color_continuous_scale=
'RdBu')
-
fig.show()
-
-
fig = px.treemap(df, path=[
'country'], values=
'pop',
-
color=
'lifeExp', hover_data=[
'iso_alpha'],
-
color_continuous_scale=
'RdBu')
-
fig.show()
-
-
# 桑基图
-
tips = px.data.tips()
-
fig = px.parallel_categories(tips, color=
"size",
-
color_continuous_scale=px.colors.sequential.Inferno)
-
fig.show()
-
转载:https://blog.csdn.net/baoqiangwang/article/details/114316272
查看评论