『Plotly实战指南』--折线图绘制进阶篇

打印 上一主题 下一主题

主题 940|帖子 940|积分 2820

上一篇介绍了Plotly绘制折线图的基础知识和数据预处理的技巧,
本文将重点探究如何利用Plotly实现多线折线图的布局计划以及动态折线图的实现,
让我们一起掌握进阶的折线图绘制技巧。
1. 多折线图布局

在现实的数据分析场景中,常常必要同时展示多组数据,例如对比不同产物的销售趋势、不同地区的温度变化等。
这种多变量对比或时间序列对比的场景非常恰当使用多线折线图
然而,如何合理安排多组数据在同一图表中的展示,避免折线重叠或混乱,是布局规划的关键。
1.1. 布局的要点

假设我们有一组数据,记录了不同城市的月匀称气温。
我们必要在同一张图表中展示这些城市的气温变化趋势,以便举行对比分析。
针对这个示例,布局图形的要点是:

  • 利用子图(Subplots)或分层布局:如果数据组较多,可以使用子图将它们分层展示,避免图表过于拥挤。Plotly的make_subplots函数可以资助我们轻松创建子图布局。
  • 合理安排图例位置:确保图例清晰易读,避免遮挡折线。
  • 调整坐标轴范围:根据数据的最大值和最小值,合理设置坐标轴范围,使折线图更加美观。
  1. import plotly.graph_objects as go
  2. from plotly.subplots import make_subplots
  3. # 示例数据
  4. city1 = [20, 22, 25, 28, 30, 32, 35, 34, 30, 26, 22, 20]
  5. city2 = [15, 18, 20, 22, 25, 28, 30, 29, 25, 22, 18, 15]
  6. city3 = [10, 12, 15, 18, 20, 22, 25, 24, 20, 18, 15, 12]
  7. months = [
  8.     "1月",
  9.     "2月",
  10.     "3月",
  11.     "4月",
  12.     "5月",
  13.     "6月",
  14.     "7月",
  15.     "8月",
  16.     "9月",
  17.     "10月",
  18.     "11月",
  19.     "12月",
  20. ]
  21. # 创建子图布局
  22. fig = make_subplots(rows=1, cols=3, subplot_titles=("南京", "北京", "西安"))
  23. # 添加折线图
  24. fig.add_trace(go.Scatter(x=months, y=city1, name="南京"), row=1, col=1)
  25. fig.add_trace(go.Scatter(x=months, y=city2, name="北京"), row=1, col=2)
  26. fig.add_trace(go.Scatter(x=months, y=city3, name="西安"), row=1, col=3)
  27. # 更新布局
  28. fig.update_layout(height=400, width=900, title_text="每月平均气温比较")
  29. fig.show()
复制代码

通过子图布局,我们可以清晰地展示不同城市的气温变化趋势,避免了折线之间的相互干扰。
1.2. 颜色与样式的选择

在多折线图中,除了使用子图布局的方式,也可以将所有的折线绘制在一个图中,这时,颜色和样式的计划对于提升图表的可读性就至关重要。
对于颜色的选择与搭配:

  • 根据数据特点选择颜色:例如,对于温度数据,可以使用冷暖色调来区分不同的城市。
  • 使用Plotly的颜色库或自定义颜色:Plotly提供了丰富的颜色库,也可以通过十六进制代码自定义颜色。
对于折线演示的计划:

  • 线型的使用技巧:实线、虚线、点线等不同线型可以用于区分不同的数据组。
  • 线宽与标记点的设置:适当增加线宽或添加标记点可以突出关键数据。
  1. import plotly.graph_objects as go
  2. # 示例数据
  3. city1 = [20, 22, 25, 28, 30, 32, 35, 34, 30, 26, 22, 20]
  4. city2 = [15, 18, 20, 22, 25, 28, 30, 29, 25, 22, 18, 15]
  5. city3 = [10, 12, 15, 18, 20, 22, 25, 24, 20, 18, 15, 12]
  6. months = [
  7.     "1月",
  8.     "2月",
  9.     "3月",
  10.     "4月",
  11.     "5月",
  12.     "6月",
  13.     "7月",
  14.     "8月",
  15.     "9月",
  16.     "10月",
  17.     "11月",
  18.     "12月",
  19. ]
  20. # 创建折线图
  21. fig = go.Figure()
  22. # 添加折线
  23. fig.add_trace(
  24.     go.Scatter(
  25.         x=months,
  26.         y=city1,
  27.         mode="lines+markers",
  28.         name="南京",
  29.         line=dict(color="red", dash="solid", width=2),
  30.         marker=dict(size=8, color="red"),
  31.     )
  32. )
  33. fig.add_trace(
  34.     go.Scatter(
  35.         x=months,
  36.         y=city2,
  37.         mode="lines+markers",
  38.         name="北京",
  39.         line=dict(color="blue", dash="dash", width=2),
  40.         marker=dict(size=8, color="blue"),
  41.     )
  42. )
  43. fig.add_trace(
  44.     go.Scatter(
  45.         x=months,
  46.         y=city3,
  47.         mode="lines+markers",
  48.         name="西安",
  49.         line=dict(color="green", dash="dot", width=2),
  50.         marker=dict(size=8, color="green"),
  51.     )
  52. )
  53. # 更新布局
  54. fig.update_layout(
  55.     title="每月平均气温比较",
  56.     xaxis_title="月份",
  57.     yaxis_title="温度 (°C)",
  58. )
  59. fig.show()
复制代码

通过不同的颜色和线型,我们可以清晰地区分不同城市的气温变化趋势,提升图表的可读性。
2. 动态折线图

在数据分析中,动画效果可以资助我们更直观地展示数据随时间的变化趋势,例如展示股票代价的颠簸或温度的季候性变化。
动画效果不但能够吸引用户的注意力,还能资助用户更好地理解数据的变化过程。
动画可以清晰地展示数据的动态变化趋势,而不是仅仅展示静态的结果。
2.1. 动态折线图实现

Plotly提供了强大的动画功能,可以轻松实现动态效果。
可以通过设置帧率、过渡效果等参数来控制动画的播放效果。
  1. import plotly.graph_objects as go
  2. # 示例数据
  3. x = [1, 2, 3, 4, 5]
  4. y1 = [1, 4, 9, 16, 25]
  5. y2 = [2, 5, 8, 11, 14]
  6. frames = [
  7.     go.Frame(
  8.         data=[
  9.             go.Scatter(
  10.                 x=x[: i + 1], y=y1[: i + 1], mode="lines+markers", name="Line 1"
  11.             ),
  12.             go.Scatter(
  13.                 x=x[: i + 1], y=y2[: i + 1], mode="lines+markers", name="Line 2"
  14.             ),
  15.         ],
  16.         name=f"frame{i}",
  17.     )
  18.     for i in range(len(x))
  19. ]
  20. # 创建动画
  21. fig = go.Figure(
  22.     data=[
  23.         go.Scatter(x=x[:1], y=y1[:1], mode="lines+markers", name="Line 1"),
  24.         go.Scatter(x=x[:1], y=y2[:1], mode="lines+markers", name="Line 2"),
  25.     ],
  26.     frames=frames,
  27. )
  28. # 更新布局
  29. fig.update_layout(
  30.     title="动态折线图",
  31.     xaxis_title="X",
  32.     yaxis_title="Y",
  33.     updatemenus=[
  34.         dict(
  35.             type="buttons",
  36.             buttons=[
  37.                 dict(
  38.                     label="播放",
  39.                     method="animate",
  40.                     args=[
  41.                         None,
  42.                         {
  43.                             "frame": {"duration": 500, "redraw": True},
  44.                             "fromcurrent": True,
  45.                             "transition": {"duration": 0},
  46.                         },
  47.                     ],
  48.                 ),
  49.                 dict(
  50.                     label="暂停",
  51.                     method="animate",
  52.                     args=[
  53.                         [None],
  54.                         {
  55.                             "frame": {"duration": 0, "redraw": False},
  56.                             "mode": "immediate",
  57.                             "transition": {"duration": 0},
  58.                         },
  59.                     ],
  60.                 ),
  61.             ],
  62.         )
  63.     ],
  64. )
  65. fig.show()
复制代码

通过动画效果,我们可以清晰地看到两条折线随时间的变化趋势,资助用户更好地理解数据的动态特征。
2.2. 交互式动态图

交互式图表可以让用户根据自己的需求选择展示的数据,增强了用户与数据之间的互动性。
例如,用户可以通过滑块调整时间范围,或者通过下拉菜单选择不同的变量举行对比,从而更加机动地探索数据。
Plotly提供了丰富的交互工具,可以实现动态更新图表数据的功能。
通过结合这些工具,可以为用户创建高度定制化的交互体验。
  1. import plotly.graph_objects as go
  2. import numpy as np
  3. # 示例数据
  4. x = np.linspace(0, 10, 100)
  5. half = 50
  6. y1 = np.sin(x[:half])
  7. y2 = np.cos(x[half:])
  8. fig = go.Figure()
  9. # 创建交互式图表
  10. for i in range(half):
  11.     fig.add_trace(go.Scatter(x=x[:i], y=y1, mode="lines", name="sin(x)", visible=False))
  12. for i in range(half, 100):
  13.     fig.add_trace(
  14.         go.Scatter(x=x[half:i], y=y2, mode="lines", name="cos(x)", visible=False)
  15.     )
  16. # 添加滑块
  17. steps = []
  18. for i in range(half):
  19.     step = dict(
  20.         method="update",
  21.         args=[{"visible": [False] * len(x)}, {"title": f"x = {x[i]:.2f}"}],
  22.         label=f"{x[i]:.2f}",
  23.     )
  24.     step["args"][0]["visible"][i] = True
  25.     step["args"][0]["visible"][i + half] = True
  26.     steps.append(step)
  27. sliders = [
  28.     dict(active=0, currentvalue={"prefix": "Time: "}, pad={"t": 50}, steps=steps)
  29. ]
  30. fig.update_layout(sliders=sliders)
  31. fig.show()
复制代码

在这个示例中,用户可以通过滑块动态调整时间点,观察sin(x)和cos(x)在不同时间点的值。
这种交互式计划让用户能够更直观地探索数据的变化。
3. 图表优化技巧

在绘制复杂的动态折线图时,优化图表的性能用户体验至关重要。
性能优化方面:

  • 减少数据点数目:对于大规模数据集,可以通过采样或聚合减少数据点数目,避免图表卡顿。
  • 使用WebGL渲染:对于复杂的动态图表,Plotly支持使用WebGL举行渲染,提升性能。
美观优化方面:

  • 添加标题和注释:清晰的标题和注释可以资助用户更好地理解图表的内容。
  • 美化图例:确保图例清晰易读,避免遮挡图表主体。
  • 调整颜色和样式:根据数据特点选择合适的颜色和样式,提升图表的整体美观度。
交互优化方面:

  • 添加提示框:当鼠标悬停在数据点上时,表现提示框,展示具体信息。
  • 高亮表现:当用户选择某条折线时,可以通过高亮表现突出重点。
  • 动态调整坐标轴范围:根据用户的选择动态调整坐标轴范围,确保图表始终清晰易读。
4. 总结

本文探究了如何利用Plotly实现多线折线图的布局计划和动态折线图的实现。
无论是多组数据的展示,还是动态效果的实现,Plotly都提供了强大的功能支持。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

盛世宏图

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表