- 柱状折线复合图像效果
实现步骤
df = pd.read_csv('3汽车之家-奥迪汽车数据.csv')
df.head()
print(df.shape)
df.info()
注意所有 列字段 对应的数据类型,同时注意绘图所需要的汽车销售数量和价格
df1 = df.copy()
df1 = df1[~df1['百公里油耗'].str.contains('百公里电耗')] # 删除百公里电耗 行的数据
df1.shape
(17489, 17)
df_mean_price.info()
df_car_type = df1.groupby('车型')['购车用户'].count()df_tmp = df1['裸车价格'].str.split('万裸车购买价',expand=True) # ⭐
df1['裸车价格'] = df_tmp[0]
df1['裸车价格'] = df1['裸车价格'].astype('float')
df_mean_price = df1.groupby('车型')['裸车价格'].mean().to_frame()# 转换成 DataFrame
df_mean_price['裸车价格']=df_mean_price['裸车价格'].round(decimals=2)df_mean_price['销量']=df_car_type.values.tolist()
x_data = df_mean_price.index.tolist()
y_data1 = df_mean_price['销量'].tolist()
y_data2 = df_mean_price['裸车价格'].tolist()
当 expand=True 时,返回的结果是一个 DataFrame,每列包含分割后的字符串部分。
bar = (Bar(init_opts=opts.InitOpts(width='1000px', height='500px',bg_color='#CFD8DC')).add_xaxis(x_data).add_yaxis("销量",y_data1)# 扩展 Y 轴,用于折线图的裸车价格数据.extend_axis(yaxis=opts.AxisOpts(axislabel_opts=opts.LabelOpts(formatter="{value} 万"),)# 区间间隔自动显示).set_global_opts(yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(formatter="{value} 辆")),# 原本y轴xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=25)),# x轴标签旋转角度 visualmap_opts=opts.VisualMapOpts(max_=3000,min_=50,is_show=False),title_opts=opts.TitleOpts(title='奥迪全系销量及裸车价格',subtitle_textstyle_opts=opts.TextStyleOpts(color='#795548'),pos_top='1%',pos_left="center",title_textstyle_opts=opts.TextStyleOpts(color='#00838F',font_size=25),),legend_opts=opts.LegendOpts(pos_top='8%',pos_right='10%',orient='vertical'))
)line = (Line().add_xaxis(x_data).add_yaxis("裸车价格", y_data2, yaxis_index=1,z=10)# z=10 确保折线图显示在条形图之上# yaxis_index=1 指定折线图绑定到第二个 Y 轴(假设你已经通过 extend_axis 添加了一个额外的 Y 轴)。
)bar.overlap(line) #将折线图叠加到条形图上
bar.render_notebook()
- 结果