2020研究生數模整理(2):plotly雙座標軸繪製多個軌跡

Trista0036發表於2020-09-27

B題最後一題為視覺化,繪製各個變數的變動對產品辛烷值和硫的值的影響。由於變數有將近30個,為了節省論文的長度,我們選擇雙座標繪圖。這裡選擇的plotly是plotly.offline。

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。

#儲存圖片
fig.write_image('./test1.png') #選擇手動截圖可以把這行註釋掉
fig.show()

看一下效果圖(比賽產出的一個圖):
在這裡插入圖片描述

相關文章