Plotly Express是对 Plotly.py 的高级封装,内置了大量实用、现代的绘图模板,用户只需调用简单的API函数,即可快速生成漂亮的互动图表,可满足90%以上的应用场景。

本文借助Plotly Express提供的几个样例库进行散点图、折线图、饼图、柱状图、气泡图、桑基图、玫瑰环图、堆积图、二维面积图、甘特图等基本图形的实现。

代码示例

  1. import plotly.express as px

  2. df = px.data.iris()

  3. #Index(['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'species','species_id'],dtype='object')

  4. # sepal_length sepal_width ... species species_id

  5. # 0 5.1 3.5 ... setosa 1

  6. # 1 4.9 3.0 ... setosa 1

  7. # 2 4.7 3.2 ... setosa 1

  8. # .. ... ... ... ... ...

  9. # 149 5.9 3.0 ... virginica 3

  10. # plotly.express.scatter(data_frame=None, x=None, y=None,

  11. # color=None, symbol=None, size=None,

  12. # hover_name=None, hover_data=None, custom_data=None, text=None,

  13. # facet_row=None, facet_col=None, facet_col_wrap=0, facet_row_spacing=None, facet_col_spacing=None,

  14. # error_x=None, error_x_minus=None, error_y=None, error_y_minus=None,

  15. # animation_frame=None, animation_group=None,

  16. # category_orders=None, labels=None, orientation=None,

  17. # color_discrete_sequence=None, color_discrete_map=None, color_continuous_scale=None,

  18. # range_color=None, color_continuous_midpoint=None,

  19. # symbol_sequence=None, symbol_map=None, opacity=None,

  20. # size_max=None, marginal_x=None, marginal_y=None,

  21. # trendline=None, trendline_color_override=None,

  22. # log_x=False, log_y=False, range_x=None, range_y=None,

  23. # render_mode='auto', title=None, template=None, width=None, height=None)

  24. # sepal_widthsepal_length制作标准散点图

  25. fig = px.scatter(df, x="sepal_width", y="sepal_length")

  26. fig.show()

  27. 关于Python可视化Dash工具—plotly基本图形_悬停

  28. #以鸢尾花类型-species作为不同颜色区分标志 color

  29. fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species")

  30. fig.show()

  31. 关于Python可视化Dash工具—plotly基本图形_悬停_02

  32. #追加petal_length作为散点大小,变位气泡图 size

  33. fig = px.scatter(df, x="sepal_width", y="sepal_length",

  34. color="species",size='petal_length')

  35. fig.show()

  36. 关于Python可视化Dash工具—plotly基本图形_ide_03

  37. #追加petal_width作为额外列,在悬停工具提示中显示为额外数据 hover_data

  38. fig = px.scatter(df, x="sepal_width", y="sepal_length",

  39. color="species", size='petal_length',

  40. hover_data=['petal_width'])

  41. fig.show()

  42. 关于Python可视化Dash工具—plotly基本图形_悬停_04

  43. #以鸢尾花类型-species区分散点的形状 symbol

  44. fig = px.scatter(df, x="sepal_width", y="sepal_length",

  45. symbol="species" ,color="species",

  46. size='petal_length',

  47. hover_data=['petal_width'])

  48. fig.show()

  49. 关于Python可视化Dash工具—plotly基本图形_甘特图_05

  50. #追加petal_width作为额外列,在悬停工具提示中以粗体显示。 hover_name

  51. fig = px.scatter(df, x="sepal_width", y="sepal_length",

  52. symbol="species" ,color="species",

  53. size='petal_length',

  54. hover_data=['petal_width'], hover_name="species")

  55. fig.show()

  56. 关于Python可视化Dash工具—plotly基本图形_悬停_06

  57. #以鸢尾花类型编码-species_id作为散点的文本值 text

  58. fig = px.scatter(df, x="sepal_width", y="sepal_length",

  59. symbol="species" ,color="species",

  60. size='petal_length',

  61. hover_data=['petal_width'], hover_name="species",

  62. text="species_id")

  63. fig.show()

  64. 关于Python可视化Dash工具—plotly基本图形_悬停_07

  65. #追加图表标题 title

  66. fig = px.scatter(df, x="sepal_width", y="sepal_length",

  67. symbol="species" ,color="species", size='petal_length',

  68. hover_data=['petal_width'], hover_name="species",

  69. text="species_id",title="鸢尾花分类展示")

  70. fig.show()

  71. 关于Python可视化Dash工具—plotly基本图形_悬停_08

  72. #以鸢尾花类型-species作为动画播放模式 animation_frame

  73. fig = px.scatter(df, x="sepal_width", y="sepal_length",

  74. symbol="species" ,color="species", size='petal_length',

  75. hover_data=['petal_width'], hover_name="species",

  76. text="species_id",title="鸢尾花分类展示",

  77. animation_frame="species")

  78. fig.show()

  79. 关于Python可视化Dash工具—plotly基本图形_ide_09

  80. #固定XY最大值最小值范围range_xrange_y,防止动画播放时超出数值显示

  81. fig = px.scatter(df, x="sepal_width", y="sepal_length",

  82. symbol="species" ,color="species", size='petal_length',

  83. hover_data=['petal_width'], hover_name="species",

  84. text="species_id",title="鸢尾花分类展示",

  85. animation_frame="species",range_x=[1.5,4.5],range_y=[4,8.5])

  86. fig.show()

  87. 关于Python可视化Dash工具—plotly基本图形_甘特图_10

  88. df = px.data.gapminder().query("country=='China'")

  89. # Index(['country', 'continent', 'year', 'lifeExp', 'pop', 'gdpPercap', 'iso_alpha', 'iso_num'],dtype='object')

  90. # country continent year ... gdpPercap iso_alpha iso_num

  91. # 288 China Asia 1952 ... 400.448611 CHN 156

  92. # 289 China Asia 1957 ... 575.987001 CHN 156

  93. # 290 China Asia 1962 ... 487.674018 CHN 156

  94. # plotly.express.line(data_frame=None, x=None, y=None,

  95. # line_group=None, color=None, line_dash=None,

  96. # hover_name=None, hover_data=None, custom_data=None, text=None,

  97. # facet_row=None, facet_col=None, facet_col_wrap=0,

  98. # facet_row_spacing=None, facet_col_spacing=None,

  99. # error_x=None, error_x_minus=None, error_y=None, error_y_minus=None,

  100. # animation_frame=None, animation_group=None,

  101. # category_orders=None, labels=None, orientation=None,

  102. # color_discrete_sequence=None, color_discrete_map=None,

  103. # line_dash_sequence=None, line_dash_map=None,

  104. # log_x=False, log_y=False,

  105. # range_x=None, range_y=None,

  106. # line_shape=None, render_mode='auto', title=None,

  107. # template=None, width=None, height=None)

  108. # 显示中国的人均寿命

  109. fig = px.line(df, x="year", y="lifeExp", title='中国人均寿命')

  110. fig.show()

  111. 关于Python可视化Dash工具—plotly基本图形_ide_11

  112. # 以不同颜色显示亚洲各国的人均寿命

  113. df = px.data.gapminder().query("continent == 'Asia'")

  114. fig = px.line(df, x="year", y="lifeExp", color="country",

  115. hover_name="country")

  116. fig.show()

  117. 关于Python可视化Dash工具—plotly基本图形_甘特图_12

  118. # line_group="country" 达到按国家去重的目的

  119. df = px.data.gapminder().query("continent != 'Asia'") # remove Asia for visibility

  120. fig = px.line(df, x="year", y="lifeExp", color="continent",

  121. line_group="country", hover_name="country")

  122. fig.show()

  123. 关于Python可视化Dash工具—plotly基本图形_ide_13

  124. # bar

  125. df = px.data.gapminder().query("country == 'China'")

  126. fig = px.bar(df, x='year', y='lifeExp')

  127. fig.show()

  128. 关于Python可视化Dash工具—plotly基本图形_甘特图_14

  129. df = px.data.gapminder().query("continent == 'Asia'")

  130. fig = px.bar(df, x='year', y='lifeExp',color="country" )

  131. fig.show()

  132. 关于Python可视化Dash工具—plotly基本图形_甘特图_15

  133. df = px.data.gapminder().query("country == 'China'")

  134. fig = px.bar(df, x='year', y='pop',

  135. hover_data=['lifeExp', 'gdpPercap'], color='lifeExp',

  136. labels={'pop':'population of China'}, height=400)

  137. fig.show()

  138. 关于Python可视化Dash工具—plotly基本图形_甘特图_16

  139. fig = px.bar(df, x='year', y='pop',

  140. hover_data=['lifeExp', 'gdpPercap'], color='pop',

  141. labels={'pop':'population of China'}, height=400)

  142. fig.show()

  143. 关于Python可视化Dash工具—plotly基本图形_ide_17

  144. df = px.data.medals_long()

  145. # # nation medal count

  146. # # 0 South Korea gold 24

  147. # # 1 China gold 10

  148. # # 2 Canada gold 9

  149. # # 3 South Korea silver 13

  150. # # 4 China silver 15

  151. # # 5 Canada silver 12

  152. # # 6 South Korea bronze 11

  153. # # 7 China bronze 8

  154. # # 8 Canada bronze 12

  155. fig = px.bar(df, x="nation", y="count", color="medal",

  156. title="Long-Form Input")

  157. fig.show()

  158. 关于Python可视化Dash工具—plotly基本图形_悬停_18

  159. # 气泡图

  160. df = px.data.gapminder()

  161. # X轴以对数形式展现

  162. fig = px.scatter(df.query("year==2007"), x="gdpPercap", y="lifeExp",

  163. size="pop",

  164. color="continent",hover_name="country",

  165. log_x=True, size_max=60)

  166. fig.show()

  167. 关于Python可视化Dash工具—plotly基本图形_悬停_19

  168. # X轴以标准形式展现

  169. fig = px.scatter(df.query("year==2007"), x="gdpPercap", y="lifeExp",

  170. size="pop",

  171. color="continent",hover_name="country",

  172. log_x=False, size_max=60)

  173. fig.show()

  174. 关于Python可视化Dash工具—plotly基本图形_甘特图_20

  175. # 饼状图

  176. px.data.gapminder().query("year == 2007").groupby('continent').count()

  177. # country year lifeExp pop gdpPercap iso_alpha iso_num

  178. # continent

  179. # Africa 52 52 52 52 52 52 52

  180. # Americas 25 25 25 25 25 25 25

  181. # Asia 33 33 33 33 33 33 33

  182. # Europe 30 30 30 30 30 30 30

  183. # Oceania 2 2 2 2 2 2 2

  184. df = px.data.gapminder().query("year == 2007").query("continent == 'Americas'")

  185. fig = px.pie(df, values='pop', names='country',

  186. title='Population of European continent')

  187. fig.show()

  188. 关于Python可视化Dash工具—plotly基本图形_悬停_21

  189. df.loc[df['pop'] < 10000000, 'country'] = 'Other countries'

  190. fig = px.pie(df, values='pop', names='country',

  191. title='Population of European continent',

  192. hover_name='country',labels='country')

  193. fig.update_traces(textposition='inside', textinfo='percent+label')

  194. fig.show()

  195. 关于Python可视化Dash工具—plotly基本图形_ide_22

  196. df.loc[df['pop'] < 10000000, 'country'] = 'Other countries'

  197. fig = px.pie(df, values='pop', names='country',

  198. title='Population of European continent',

  199. hover_name='country',labels='country',

  200. color_discrete_sequence=px.colors.sequential.Blues)

  201. fig.update_traces(textposition='inside', textinfo='percent+label')

  202. fig.show()

  203. 关于Python可视化Dash工具—plotly基本图形_ide_23

  204. # 二维面积图

  205. df = px.data.gapminder()

  206. fig = px.area(df, x="year", y="pop", color="continent",

  207. line_group="country")

  208. fig.show()

  209. 关于Python可视化Dash工具—plotly基本图形_甘特图_24

  210. fig = px.area(df, x="year", y="pop", color="continent",

  211. line_group="country",

  212. color_discrete_sequence=px.colors.sequential.Blues)

  213. fig.show()

  214. 关于Python可视化Dash工具—plotly基本图形_悬停_25

  215. df = px.data.gapminder().query("year == 2007")

  216. fig = px.bar(df, x="pop", y="continent", orientation='h',

  217. hover_name='country',

  218. text='country',color='continent')

  219. fig.show()

  220. 关于Python可视化Dash工具—plotly基本图形_悬停_26

  221. # 甘特图

  222. import pandas as pd

  223. df = pd.DataFrame([

  224. dict(Task="Job A", Start='2009-01-01', Finish='2009-02-28',

  225. Completion_pct=50, Resource="Alex"),

  226. dict(Task="Job B", Start='2009-03-05', Finish='2009-04-15',

  227. Completion_pct=25, Resource="Alex"),

  228. dict(Task="Job C", Start='2009-02-20', Finish='2009-05-30',

  229. Completion_pct=75, Resource="Max")

  230. ])

  231. fig = px.timeline(df, x_start="Start", x_end="Finish", y="Task",

  232. color="Completion_pct")

  233. fig.update_yaxes(autorange="reversed")

  234. fig.show()

  235. 关于Python可视化Dash工具—plotly基本图形_ide_27

  236. fig = px.timeline(df, x_start="Start", x_end="Finish", y="Resource",

  237. color="Resource")

  238. fig.update_yaxes(autorange="reversed")

  239. fig.show()

  240. 关于Python可视化Dash工具—plotly基本图形_悬停_28

  241. # 玫瑰环图

  242. df = px.data.tips()

  243. # total_bill tip sex smoker day time size

  244. # 0 16.99 1.01 Female No Sun Dinner 2

  245. # 1 10.34 1.66 Male No Sun Dinner 3

  246. # 2 21.01 3.50 Male No Sun Dinner 3

  247. # 3 23.68 3.31 Male No Sun Dinner 2

  248. # 4 24.59 3.61 Female No Sun Dinner 4

  249. fig = px.sunburst(df, path=['day', 'time', 'sex'],

  250. values='total_bill')

  251. fig.show()

  252. 关于Python可视化Dash工具—plotly基本图形_甘特图_29

  253. import numpy as np

  254. df = px.data.gapminder().query("year == 2007")

  255. fig = px.sunburst(df, path=['continent', 'country'],

  256. values='pop',

  257. color='lifeExp', hover_data=['iso_alpha'],

  258. color_continuous_scale='RdBu',

  259. color_continuous_midpoint=np.average(df['lifeExp'],

  260. weights=df['pop']))

  261. fig.show()

  262. 关于Python可视化Dash工具—plotly基本图形_ide_30

  263. df = px.data.gapminder().query("year == 2007")

  264. fig = px.sunburst(df, path=['continent', 'country'],

  265. values='pop',

  266. color='pop', hover_data=['iso_alpha'],

  267. color_continuous_scale='RdBu')

  268. fig.show()

  269. 关于Python可视化Dash工具—plotly基本图形_ide_31

  270. # treemap

  271. import numpy as np

  272. df = px.data.gapminder().query("year == 2007")

  273. df["world"] = "world" # in order to have a single root node

  274. fig = px.treemap(df, path=['world', 'continent', 'country'],

  275. values='pop',

  276. color='lifeExp', hover_data=['iso_alpha'],

  277. color_continuous_scale='RdBu',

  278. color_continuous_midpoint=np.average(df['lifeExp'],

  279. weights=df['pop']))

  280. fig.show()

  281. 关于Python可视化Dash工具—plotly基本图形_ide_32

  282. fig = px.treemap(df, path=['world', 'continent', 'country'], values='pop',

  283. color='pop', hover_data=['iso_alpha'],

  284. color_continuous_scale='RdBu',

  285. color_continuous_midpoint=np.average(df['lifeExp'],

  286. weights=df['pop']))

  287. fig.show()

  288. 关于Python可视化Dash工具—plotly基本图形_悬停_33

  289. fig = px.treemap(df, path=['world', 'continent', 'country'], values='pop',

  290. color='lifeExp', hover_data=['iso_alpha'],

  291. color_continuous_scale='RdBu')

  292. fig.show()

  293. 关于Python可视化Dash工具—plotly基本图形_悬停_34

  294. fig = px.treemap(df, path=[ 'continent', 'country'], values='pop',

  295. color='lifeExp', hover_data=['iso_alpha'],

  296. color_continuous_scale='RdBu')

  297. fig.show()

  298. 关于Python可视化Dash工具—plotly基本图形_ide_35

  299. fig = px.treemap(df, path=[ 'country'], values='pop',

  300. color='lifeExp', hover_data=['iso_alpha'],

  301. color_continuous_scale='RdBu')

  302. fig.show()

  303. 关于Python可视化Dash工具—plotly基本图形_ide_36

  304. # 桑基图

  305. tips = px.data.tips()

  306. fig = px.parallel_categories(tips, color="size",

  307. color_continuous_scale=px.colors.sequential.Inferno)

  308. fig.show()

  309. 关于Python可视化Dash工具—plotly基本图形_悬停_37