如何将start_hour与end_hour的两个图表合并为一个对比可视化图?
合并start_hour和end_hour对比图表的方法
你可以用两种简单的方式把两个小时变量的统计图画在同一张图里做对比:
方法1:把数据转成长格式(推荐)
先把start_hour和end_hour两列转成“小时值+类型”的长格式,这样就能用hue参数区分两类数据了,代码如下:
import seaborn as sb import numpy as np import matplotlib.pyplot as plt import pandas as pd # 把数据转成长格式:新增一列区分是start还是end hour_data = pd.melt(gobike, value_vars=['start_hour', 'end_hour'], var_name='hour_type', value_name='hour') hour_order = np.arange(0,24) plt.figure(figsize=(10,5)) plt.title('Bike Service Start vs End Popular Times') # 用hue区分start和end,dodge=True让柱子分开不重叠 sb.countplot(data=hour_data, x='hour', hue='hour_type', order=hour_order, dodge=True) plt.ylabel('Count') plt.xlabel('Hours'); plt.legend(title='Hour Type', labels=['Start Hour', 'End Hour'])
方法2:在同一个轴上分别绘制两个countplot
如果不想改数据格式,直接在同一个坐标轴上画两个统计柱,设置不同颜色即可:
base_colors = sb.color_palette()[:2] # 取前两种不同的颜色 hour_order = np.arange(0,24) plt.figure(figsize=(10,5)) plt.title('Bike Service Start vs End Popular Times') # 先画start_hour的柱子 sb.countplot(data=gobike, x='start_hour', order=hour_order, color=base_colors[0], label='Start Hour', dodge=False) # 再画end_hour的柱子,设置alpha让颜色半透明,避免完全遮挡 sb.countplot(data=gobike, x='end_hour', order=hour_order, color=base_colors[1], label='End Hour', alpha=0.7, dodge=False) plt.ylabel('Count') plt.xlabel('Hours'); plt.legend(title='Hour Type')
两种方法都能实现对比效果,第一种转长格式的方式更符合seaborn的设计逻辑,图表也更规整;第二种适合快速调整,不用改动原始数据结构。
内容的提问来源于stack exchange,提问作者Aaliyah Motala
相关产品推荐
相关产品推荐

