B题最后一题为可视化,绘制各个变量的变更对产品辛烷值和硫的值的影响。因为变量有将近30个,为了节省论文的长度,咱们选择双坐标绘图。这里选择的plotly是plotly.offline。html
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 #保存图片要用的库
#要可视化的数据,使用列表存储 #为了方便理解,这里的数据和数模题目无关 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]
#定义第一个轨迹,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)
#添加轨迹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") )
敲重点!!!因为plotly的库是为了网页可视化而生的,因此想要写个程序自行保存图片不单单是使用save_img了,详细的保存教程能够参考连接:https://www.csdn.net/gather_21/Mtjacg5sODI1MzctYmxvZwO0O0OO0O0O.html。
尽管咱们掌握了自动保存图片的方法,可是发现保存的图片比较模糊,不知道是否是我参数设置的问题。因此最后将近三十张图是手动截下来的,因此若是想要批量保存,仍是推荐seaborn。web
#保存图片 fig.write_image('./test1.png') #选择手动截图能够把这行注释掉 fig.show()
看一下效果图(比赛产出的一个图):
ide