【发布时间】:2018-10-23 06:42:06
【问题描述】:
我有一个数据框,每个日期有多个值(日期时间字段)。这些值通过使用列 Group 分为 U (users) 和 S (session)。 Seaborn 用于可视化每个日期的两个箱线图,其中色调设置为 Group。
当考虑到对应于 U (users) 的值远大于对应于 S (session) 的值时,问题就出现了,使得 S 数据难以辨认。因此,我需要想出一个解决方案,让我能够以易于理解的方式在同一个图中绘制两个系列(U 和 S)。
我想知道是否可以为每个色调设置独立的 Y 轴(具有不同的比例),以便同时显示两个 Y 轴(就像使用 twinx 时一样,但不会失去色调可视化功能。
欢迎任何其他选择 =)
S箱线图时间序列箱线图:
使用色调的组合箱线图时间序列。显然,由于 Y 轴的比例,看不到任何关于 S 组的信息:
数据框的列:
|日期(日期时间)| n_data(数字)|组(S 或 U)|
生成组合箱线图的代码行:
seaborn.boxplot(ax=ax,x='Day', y='n_data', hue='Group', data=df,
palette='PRGn', showfliers=False)
设法通过使用 twinx 找到解决方案:
fig,ax= plt.subplots(figsize=(50,10))
tmpU = groups.copy()
tmpU.loc[tmp['Group']!='U','n_data'] = np.nan
tmpS = grupos.copy()
tmpS.loc[tmp['Group']!='S','n_data'] = np.nan
ax=seaborn.boxplot(ax=ax,x='Day', y = 'n_data', hue='Group', data=tmpU, palette = 'PRGn', showfliers=False)
ax2 = ax.twinx()
seaborn.boxplot(ax=ax2,x='Day', y = 'n_data', hue='Group', data=tmpS, palette = 'PRGn', showfliers=False)
handles,labels = ax.get_legend_handles_labels()
l= plt.legend(handles[0:2],labels[0:2],loc=1)
plt.setp(ax.get_xticklabels(),rotation=30,horizontalalignment='right')
for label in ax.get_xticklabels()[::2]:
label.set_visible(False)
plt.show()
plt.close('all')
上面的代码生成下图:
在这种情况下,结果过于密集而无法发布。因此,正如 Parfait 在他/她的回答中所暗示的那样,我将采用基于子图的可视化。
这对我来说不是一个明显的解决方案,所以我要感谢 Parfait 的回答。
【问题讨论】:
-
请显示代码。请包括数据样本。甚至请截图问题情节。
-
我添加了生成组合图的行、我所指的图像并解释了我正在绘制的熊猫数据框的头部。不要犹豫,提出任何问题或任何可能有助于解决我的问题的进一步细节。另外,我知道我所要求的可以使用 R 来完成。
标签: python pandas time-series seaborn boxplot