2020研究生数模整理(2):plotly双坐标轴绘制多个轨迹

B题最后一题为可视化,绘制各个变量的变更对产品辛烷值和硫的值的影响。因为变量有将近30个,为了节省论文的长度,咱们选择双坐标绘图。这里选择的plotly是plotly.offline。html

1 载入包

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import plotly.offline as py  #主角,绘图的库
import plotly.graph_objs as go  
import plotly.io as pio  #保存图片要用的库

2 准备好可视化要用的数据

#要可视化的数据,使用列表存储
#为了方便理解,这里的数据和数模题目无关
x0 = [x for x in range(-5,5)]
y1 = [22,33,44,55,66,77,88,99,101,120]
y2 = [26,23,25,24,24,22,23,22,21,20]

3 绘制第一个轨迹

#定义第一个轨迹,x0和y1的关系
#参数mode表示绘制点、线仍是点和线都有,这里点和线都要绘制
#颜色可自定定义,在绘制多条线的时候,若是要使用不一样的颜色,能够使用十六进制配色卡选择颜色
trace0 = go.Scatter(x=x0, y=y1, mode='lines+markers', name='RON_Product',line=dict(color='#283734'),opacity=0.9) 
data1 = [trace0]

#设置布局参数
layout = go.Layout(title="RON Product + Sulfur Content:  "+str(col_temp),                   #title
                   plot_bgcolor='#EEEEFF',                                                  #背景色
                   paper_bgcolor='#F8F8FF',                                            
                   autosize=False,width=645,height=480,
                   yaxis=dict(title="RON_Product"),            
                   yaxis2=dict(title="Sulfur_content", overlaying='y', side="right"),
                   legend=dict(x=0, y=1.18, font=dict(size=8, color="black")))

#绘制第一个轨迹
fig = go.Figure(data=data1, layout=layout)

4 添加其余轨迹

#添加轨迹2:变量的最优值,为一条竖线,Y的范围是为了控制线的长度,尽可能竖着占满整个Y轴的范围,可自行调节
#mode选择lines表示只绘制线
best_v = 1
fig.add_trace(
    go.Scatter(
        x= [best_v,best_v],
        y = [20,120],line = dict(color='#006c54'),name = 'Optimal Choice',mode = "lines"
    ))
#添加轨迹3:x0和y2的关系
fig.add_trace(go.Scatter(x=x0,
                    y=y2,
                    line=dict(color='#BE7591'),
                    mode='lines+markers',
                    name='Sulfur_content',
                    yaxis="y2")
)

5 保存并展现

敲重点!!!因为plotly的库是为了网页可视化而生的,因此想要写个程序自行保存图片不单单是使用save_img了,详细的保存教程能够参考连接:https://www.csdn.net/gather_21/Mtjacg5sODI1MzctYmxvZwO0O0OO0O0O.html。
尽管咱们掌握了自动保存图片的方法,可是发现保存的图片比较模糊,不知道是否是我参数设置的问题。因此最后将近三十张图是手动截下来的,因此若是想要批量保存,仍是推荐seaborn。web

#保存图片
fig.write_image('./test1.png') #选择手动截图能够把这行注释掉
fig.show()

看一下效果图(比赛产出的一个图):
在这里插入图片描述ide