python-plotly绘图保姆级教程(各类图表、绘图配置、地理数据可视化、常见问题)

plotly基本方法、图表

两种使用plotly的方法:

  • 低阶API:Plotly Graph Objects(go)
  • 高阶API:Plotly Express(px)

导入语句为:

import plotly.express as px
import plotly.graph_objects as go

绘制表格

go.Table函数,指定header对应的列名和cells对应的数据,填充的颜色用fill_color指定。

fig = go.Figure(data=[go.Table(header=dict(values=views_top.columns,
                                           fill_color='yellow',
),
                 cells=dict(values=[views_top['event'],views_top['views']],
                            fill_color='paleturquoise',
                           ))
                     ])
fig.show()# 显示图

绘制热力图

density_heatmap函数,热力图的颜色根据z轴的值进行集聚计算得到。

fig = px.density_heatmap(df, x="published_year", y="views",z="comments")
fig.show()

绘制气泡图

在散点图中用size参数指定点的大小参考字段,即变为气泡图。

fig = px.scatter(df,x='comments',y='views',size='duration',color='num_speaker', log_x=True, size_max=60)
fig.show()

绘制环状图(donut chart)

饼图函数中设置hole参数值的大小,决定环图的孔的大小,即将饼图变为环图。

fig = go.Figure(
    data=[
        go.Pie(labels=labels, values=values, hole=0.2)
    ])
fig.show()

绘制柱状图

orientation='h'参数指定柱状图为横向

fig = px.bar(views_top, x='views', y='event',orientation='h')
fig.show()

绘制动图

通过animation_frame参数设置数据变化的依据的字段,据此可设置为随时间变化、随区域变化等效果。

px.scatter(df, x="duration", y="comments",animation_frame="published_year", size="duration", color="published_day")

绘制玫瑰图(polar bar chart/wind rose)

  • px方法: px.bar_polar绘制玫瑰风型图,r对应半径长度,theta为角度。

fig = px.bar_polar(df, r="frequency", theta="direction",
                   color="strength", template="plotly_dark",
                   color_discrete_sequence= px.colors.sequential.Plasma_r)
fig.show()
  • go方法(逐步添加玫瑰花瓣):
import plotly.graph_objects as go
fig = go.Figure()
fig.add_trace(go.Barpolar(
    r=[77.5, 72.5, 70.0, 45.0, 22.5],
    name='A',
    marker_color='rgb(106,81,163)'
))
fig.add_trace(go.Barpolar(
    r=[57.5, 50.0, 45.0, 35.0, 20.0],
    name='B',
    marker_color='rgb(158,154,200)'
))
fig.add_trace(go.Barpolar(
    r=[40.0, 30.0, 30.0, 35.0, 7.5],
    name='C',
    marker_color='rgb(203,201,226)'
))
fig.update_traces(text=['A', 'B', 'C', 'D', 'E'])
fig.update_layout(
    title='A Test',
    #font_size=16,
    legend_font_size=16,
    # polar_radialaxis_ticksuffix='%',
    polar_angularaxis_rotation=90,
)
fig.show()

绘制旭日图(sunburst)

旭日图的作用是显示层级关系的饼状图,对应px.sunburst函数。

  • 内外层级关系
    path指定的多个字段来区分内外对应的层级关系。color_continuous_midpoint指定了色带的取值中点为按人口数加权平均的人口寿命,即人均寿命。
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']))
  • 用字典格式数据绘制
    branchvalues设置内外关系。
data = dict(
    character=["Eve", "Cain", "Seth", "Enos", "Noam", "Abel", "Awan", "Enoch", "Azura"],
    parent=["", "Eve", "Eve", "Seth", "Seth", "Eve", "Eve", "Awan", "Eve" ],
    value=[42, 14, 12, 10, 2, 6, 6, 4, 4]) # 这里的value对应上面的character
fig =px.sunburst(
    data,
    names='character',
    parents='parent',
    values='value',
    branchvalues='total',
    color = 'value'
)
fig.update_layout(showlegend=True)
fig.show()

三维图绘制

三维散点图

px.scatter_3d指定x、y、z轴参考的数据,color指定颜色深浅参考的字段值。

fig = px.scatter_3d(df,x='comments',y='views',z='duration',color='views')
fig.show()

3D表面图

传入三维数据给go.Surface函数。

fig = go.Figure(data=[go.Surface(z=df[['duration','views','comments']].values)])

fig.update_layout(title='3D Surface', autosize=False,
                  width=500, height=500,
                  margin=dict(l=65, r=50, b=65, t=90))

fig.show()

fig.update_layout用于布局参数的设置,适用于一开始图表未设置布局参数的情况。


绘图配置

保存图片

导出html:

fig.write_html("3d.html")

绘制子图

根据facet_col指定列,按列对应的字段来分为多个子图显示。

px.scatter(df, x="duration", y="comments",
           animation_frame="published_month", animation_group="event",
           facet_col="published_day",width=1500, height=500,
           size="views", color="published_day",
          )

绘制误差棒

error_y指定误差棒对应的误差值

fig =  go.Figure(
    data=[
        go.Bar(
    x=views_top['event'], y=views_top['views'],
    error_y=dict(type='data', array=views_top['error'].values)
)
    ])
fig.show()

图片悬停标注

hover_name设置悬停时显示的内容,hover_data设置悬停时显示的数据。

px.scatter(gapminder2002, x='gdpPercap', y='lifeExp',
           color='continent', size='pop', size_max=60,
           hover_name="country", # 悬停显示的内容
           hover_data=["year","continent","gdpPercap","lifeExp"],
           facet_col='continent',
          title="Mathpretty")

plotly地理数据可视化

基于mapbox绘图,首先需要在mapbox网站注册并设置自己的API,然后在绘图前用px.set_mapbox_access_token('YOURTOKEN')命令设置调用的API。

空间散点图

  • scatter_mapbox函数
px.set_mapbox_access_token('YOURTOKEN')
fig = px.scatter_mapbox(df, lat="lat", lon="lon",
                        color="region", 
                        size="views",
                  color_continuous_scale=
                        px.colors.cyclical.IceFire, size_max=15)
fig.show()

plotly配色

Plotly配色是给了三套配色(大类), 分别是:

层次渐变 Sequential Color scales
强烈的对比渐变, Diverging Color scales
循环渐变, Cyclical Color scales


plotly绘图常见问题参考

批量保存图片

https://zhuanlan.zhihu.com/p/138789325

地理可视化

https://plotly.com/python/map-subplots-and-small-multiples/

在jupyter环境中显示plotly绘图结果

需要安装node.js和插件。
https://www.jianshu.com/p/9cb9dbff06d1

reference

https://neptune.ai/blog/plotly-python-tutorial-for-machine-learning-specialists
https://mathpretty.com/11919.html

<think>嗯,用户想学习在Python中用数据可视化工具绘制折线图,特别是使用哪些库和方法。首先,我需要确定用户可能对Python数据可视化库不太熟悉,所以得从基础的开始讲起。 用户的问题提到了折线图的绘制方法、使用的库以及教程,所以我应该先介绍常用的库,比如Matplotlib,因为这是最基础的,而且很多教程都基于它。可能还需要提到Seaborn或者Plotly,不过根据引用内容,引用的资料里主要提到了Matplotlib,所以重点应该放在Matplotlib上。 接下来,要分步骤讲解如何绘制折线图。第一步应该是安装库,不过用户可能已经安装了,但为了全面,还是需要包括安装命令,比如pip install matplotlib。然后导入库,通常是import matplotlib.pyplot as plt。 然后,准备数据。需要给出一个示例数据,比如使用列表或者NumPy数组生成的数据。例如,x轴是时间,y轴是数值。这里可能需要用简单的数据,比如月份和销量,这样用户容易理解。 然后是绘制图表,使用plt.plot()函数,并设置标题、坐标轴标签等。这部分需要详细说明每个参数的作用,比如x和y的数据,label参数,以及后续的plt.title()、plt.xlabel()等函数。 接下来是样式调整,比如线条颜色、样式、标记点等。这部分可以举例说明如何修改颜色为十六进制,线型为虚线,添加标记点。同时,可能需要提到如何调整图的大小,使用plt.figure(figsize=(10,6))。 然后是添加图例,使用plt.legend(),并说明loc参数的作用,比如调整图例的位置。 另外,用户可能需要保存图表,所以需要包括plt.savefig()的用法,以及显示图表plt.show()。 此外,根据引用内容,引用[3]提到了Matplotlib是基础的2D绘图库,所以需要强调Matplotlib的重要性,可能还提到Seaborn是基于Matplotlib的,可以简化操作,或者Plotly的交互性。但根据用户的问题,可能主要关注Matplotlib。 可能还需要考虑用户是否是新手,所以代码注释要详细,比如在代码中添加注释说明每一步的作用,如引用[3]中的示例代码加了保姆注释。 然后,相关问题部分需要生成与折线图相关的问题,比如如何添加多个折线,如何调整坐标轴范围,如何处理大数据集,或者如何导出高清图片等。需要确保问题覆盖用户可能遇到的后续疑问。 最后,检查是否所有引用都正确标注,比如引用[1]、[2]、[3]都是关于Python绘制折线图的资料,需要在回答末尾添加引用标识,例如在提到Matplotlib的时候引用对应的资料。 可能还需要考虑用户是否想了解更高的功能,比如动态更新折线图或者交互式图表,但根据问题描述,用户可能更关注基础方法,所以保持回答的基础部分详细,高部分简要提及即可。 总结回答的结构应该是:介绍Matplotlib,安装和导入,数据准备,绘制图表,样式调整,图例和标签,保存和显示,然后是扩展库如Seaborn和Plotly的简介,最后相关问题部分。</think>### Python数据可视化:折线图绘制教程 #### 一、核心工具库:Matplotlib Matplotlib是Python中最基础的2D绘图库,适合生成静态、交互式或动态的可视化图表[^3]。以下是详细绘制步骤: --- #### 二、绘制步骤详解 1. **安装与导入库** ```bash pip install matplotlib ``` ```python import matplotlib.pyplot as plt ``` 2. **准备数据** ```python # 示例:某产品月度销量 months = [1, 2, 3, 4, 5, 6] sales = [120, 150, 90, 200, 180, 240] ``` 3. **基础绘图** ```python plt.plot(months, sales, label="月度销量", color="#FF6B6B", linestyle="--", marker="o") plt.title("2023年上半年销量趋势") plt.xlabel("月份") plt.ylabel("销量(件)") plt.grid(True) # 添加网格线 ``` 4. **样式优化** - 调整图像尺寸:`plt.figure(figsize=(10, 6))` - 自定义刻度:`plt.xticks(months, ["Jan", "Feb", "Mar", "Apr", "May", "Jun"])` - 添加图例:`plt.legend(loc="upper left")` 5. **保存与展示** ```python plt.savefig("sales_trend.png", dpi=300) # 保存高清图片 plt.show() ``` --- #### 三、扩展应用 1. **多折线对比** ```python sales_2022 = [80, 110, 95, 150, 130, 190] plt.plot(months, sales, label="2023") plt.plot(months, sales_2022, label="2022", marker="x") ``` 2. **结合Pandas处理数据** ```python import pandas as pd df = pd.DataFrame({"Month": months, "Sales": sales}) plt.plot(df["Month"], df["Sales"]) ``` 3. **使用Seaborn简化操作** ```python import seaborn as sns sns.lineplot(x="Month", y="Sales", data=df, ci=None) ``` --- #### 四、其他工具库简介 - **Plotly**:生成交互式图表,支持缩放、悬停查看数值 - **Pygal**:适合生成SVG矢量图 - **Bokeh**:面向Web浏览器的交互式可视化 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值