Plotly-express-16-绘制技巧(一)

2,096 阅读2分钟

Plotly-express-16-绘制技巧(一)

本文中介绍的是利用Plotly绘图小技巧:

  • 图片的保存:jupyter notebook下的和指定路径下的保存
  • 柱状图的颜色改变(避免同样的颜色过于单调)
  • 双坐标轴图形的绘制
  • 子图制作

保存路径

改变路径

需要导入的库是os模块

  • .plot方法可以在指定位置生成
  • .iplot方法在notebook中生成
import plotly as py
import plotly.graph_objects as go
from plotly.graph_objects import Scatter,Bar
py.offline.init_notebook_mode()   # notebook里面直接生成图片

改变颜色

import random
import plotly as py
import plotly.graph_objects as go
from plotly.graph_objects import Scatter,Bar
py.offline.init_notebook_mode()   # notebook里面直接生成图片


# 生成颜色的函数
def random_color_generator(number_of_colors):
    color = ["#"+''.join([random.choice('0123456789ABCDEF') for j in range(6)])
                 for i in range(number_of_colors)]
    return color


# add data
trace0 = Scatter(x=[1,2,3,4],
                 y=[2,4,6,8])

# 改变每个柱状图的颜色
trace1 = Bar(x=[2,3,4,5],
             y=[10,12,16,20],
             marker=dict(color=random_color_generator(4)), # 使用随机函数生成4个颜色 ,改变柱状图的颜色
             opacity=0.7
            )

data = [trace0,trace1]


# add layout
layout = go.Layout(title="basic figure by using plotly",
                  xaxis=dict(title="x轴数据"),
                  yaxis=dict(title="y轴数据"),  
                  legend=dict(x=1,y=0.5,font=dict(size=20, color="black")))

# add figure
fig = go.Figure(data=data, layout=layout)

# generate figure
fig.show(render="svg")

绘制双坐标轴

# df.sort_values("产量",ascending=False):将产量进行降序排列,图形更直观
# 排序函数:sort_values("col",ascending=True)  根据某个字段,默认是升序
 
trace1 = go.Bar(
    x=df.sort_values("产量",ascending=False)["地区"].values.tolist(),
    y=df.sort_values("产量",ascending=False)["产量"].values.tolist(),
    marker=dict(color=random_color_generator(6)),
    # 指定显示的文本,类似y值
    text=df.sort_values("产量",ascending=False)["产量"].values.tolist(),
    textposition="outside",  # 文本的位置
    opacity=0.5,
    name="地区订单数量"
)

trace2 = go.Scatter(
    x=df["地区"].values.tolist(),
    y=df["财政收入"].values.tolist(),
    mode="markers",
    marker=dict(color=random_color_generator(6)),
    opacity=0.5,
    name="地区财政收入",
    yaxis="y2"   # 这是第二条y轴
)

data = [trace1,trace2]  # 添加图形的轨迹数据

layout = go.Layout(title="不同地区的订单数量", 
                   xaxis=dict(title="地区"),   # 共用x轴
                   yaxis=dict(title="地区订单数量"),  # 第一条y轴的名字
                   yaxis2=dict(title="地区财政收入",overlaying="y", side="right"),   # 第二条y轴的名字,堆叠位置(与y相同),位置在右边
                   legend=dict(x=0.8,y=0.9,font=dict(size=12,color="red"))  # 图例的位置(图形看做一个单位长度),大小和字体颜色
                  )

fig = go.Figure(data=data,layout=layout)

fig.show()

子图制作

介绍利用plotly中的tools工具如何制作子图

from plotly import tools   # 导入工具

fig = tools.make_subplots(rows=2,cols=1)  # 2*1的子图

# ----------------
trace1 = go.Bar(
    x=df.sort_values("产量",ascending=False)["地区"].values.tolist(),
    y=df.sort_values("产量",ascending=False)["产量"].values.tolist(),
    marker=dict(color=random_color_generator(6)),
    # 指定显示的文本,类似y值
    text=df.sort_values("产量",ascending=False)["产量"].values.tolist(),
    textposition="outside",  # 文本的位置
    opacity=0.5,
    name="地区订单数量"
)

sz = np.random.rand(100) * 30

trace2 = go.Scatter(
    x=df["地区"].values.tolist(),
    y=df["财政收入"].values.tolist(),
    mode="markers",
    marker=dict(color=random_color_generator(6),
                size=sz,
                opacity=0.5,
                colorscale="Viridis"
               ),
    name="地区财政收入",
    yaxis="y2"   # 这是第二条y轴
)

# -----------------------
# 添加数据轨迹
fig.append_trace(trace1,1,1)
fig.append_trace(trace2,2,1)

# 修改fig的布局
fig["layout"].update(height=600,width=800,title="子图制作")
fig.show()